diff --git a/3party/boost/boost/accumulators/framework/accumulators/droppable_accumulator.hpp b/3party/boost/boost/accumulators/framework/accumulators/droppable_accumulator.hpp index c0f512ffda..1beed664a3 100644 --- a/3party/boost/boost/accumulators/framework/accumulators/droppable_accumulator.hpp +++ b/3party/boost/boost/accumulators/framework/accumulators/droppable_accumulator.hpp @@ -115,6 +115,12 @@ namespace boost { namespace accumulators { } + droppable_accumulator_base(droppable_accumulator_base const &that) + : Accumulator(*static_cast(&that)) + , ref_count_(that.ref_count_) + { + } + template void operator ()(Args const &args) { @@ -162,6 +168,11 @@ namespace boost { namespace accumulators : droppable_accumulator::base(args) { } + + droppable_accumulator(droppable_accumulator const &that) + : droppable_accumulator::base(*static_cast(&that)) + { + } }; ////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/accumulators/numeric/functional.hpp b/3party/boost/boost/accumulators/numeric/functional.hpp index 9d955dbbdc..34cd91bdc0 100644 --- a/3party/boost/boost/accumulators/numeric/functional.hpp +++ b/3party/boost/boost/accumulators/numeric/functional.hpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -277,6 +278,8 @@ namespace boost { namespace numeric struct as_min_base : std::unary_function::type> { + BOOST_STATIC_ASSERT(std::numeric_limits::type>::is_specialized); + typename remove_const::type operator ()(Arg &) const { return (std::numeric_limits::type>::min)(); @@ -287,6 +290,8 @@ namespace boost { namespace numeric struct as_min_base >::type> : std::unary_function::type> { + BOOST_STATIC_ASSERT(std::numeric_limits::type>::is_specialized); + typename remove_const::type operator ()(Arg &) const { return -(std::numeric_limits::type>::max)(); @@ -297,6 +302,8 @@ namespace boost { namespace numeric struct as_max_base : std::unary_function::type> { + BOOST_STATIC_ASSERT(std::numeric_limits::type>::is_specialized); + typename remove_const::type operator ()(Arg &) const { return (std::numeric_limits::type>::max)(); diff --git a/3party/boost/boost/accumulators/statistics.hpp b/3party/boost/boost/accumulators/statistics.hpp index 1d136e58eb..01786079a8 100644 --- a/3party/boost/boost/accumulators/statistics.hpp +++ b/3party/boost/boost/accumulators/statistics.hpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp b/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp index b6c008d712..09ffef2963 100644 --- a/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp +++ b/3party/boost/boost/accumulators/statistics/extended_p_square_quantile.hpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/3party/boost/boost/accumulators/statistics/median.hpp b/3party/boost/boost/accumulators/statistics/median.hpp index 13ebb28621..919cf69e4f 100644 --- a/3party/boost/boost/accumulators/statistics/median.hpp +++ b/3party/boost/boost/accumulators/statistics/median.hpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include namespace boost { namespace accumulators { diff --git a/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp b/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp new file mode 100644 index 0000000000..b9e24f676c --- /dev/null +++ b/3party/boost/boost/accumulators/statistics/p_square_cumul_dist.hpp @@ -0,0 +1,260 @@ +/////////////////////////////////////////////////////////////////////////////// +// p_square_cumulative_distribution.hpp +// +// Copyright 2005 Daniel Egloff, Olivier Gygi. 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 BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006 +#define BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace accumulators +{ +/////////////////////////////////////////////////////////////////////////////// +// num_cells named parameter +// +BOOST_PARAMETER_NESTED_KEYWORD(tag, p_square_cumulative_distribution_num_cells, num_cells) + +namespace impl +{ + /////////////////////////////////////////////////////////////////////////////// + // p_square_cumulative_distribution_impl + // cumulative_distribution calculation (as histogram) + /** + @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm + + A histogram of the sample cumulative distribution is computed dynamically without storing samples + based on the \f$ P^2 \f$ algorithm. The returned histogram has a specifiable amount (num_cells) + equiprobable (and not equal-sized) cells. + + For further details, see + + R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and + histograms without storing observations, Communications of the ACM, + Volume 28 (October), Number 10, 1985, p. 1076-1085. + + @param p_square_cumulative_distribution_num_cells. + */ + template + struct p_square_cumulative_distribution_impl + : accumulator_base + { + typedef typename numeric::functional::average::result_type float_type; + typedef std::vector array_type; + typedef std::vector > histogram_type; + // for boost::result_of + typedef iterator_range result_type; + + template + p_square_cumulative_distribution_impl(Args const &args) + : num_cells(args[p_square_cumulative_distribution_num_cells]) + , heights(num_cells + 1) + , actual_positions(num_cells + 1) + , desired_positions(num_cells + 1) + , positions_increments(num_cells + 1) + , histogram(num_cells + 1) + , is_dirty(true) + { + std::size_t b = this->num_cells; + + for (std::size_t i = 0; i < b + 1; ++i) + { + this->actual_positions[i] = i + 1.; + this->desired_positions[i] = i + 1.; + this->positions_increments[i] = numeric::average(i, b); + } + } + + template + void operator ()(Args const &args) + { + this->is_dirty = true; + + std::size_t cnt = count(args); + std::size_t sample_cell = 1; // k + std::size_t b = this->num_cells; + + // accumulate num_cells + 1 first samples + if (cnt <= b + 1) + { + this->heights[cnt - 1] = args[sample]; + + // complete the initialization of heights by sorting + if (cnt == b + 1) + { + std::sort(this->heights.begin(), this->heights.end()); + } + } + else + { + // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values + if (args[sample] < this->heights[0]) + { + this->heights[0] = args[sample]; + sample_cell = 1; + } + else if (this->heights[b] <= args[sample]) + { + this->heights[b] = args[sample]; + sample_cell = b; + } + else + { + typename array_type::iterator it; + it = std::upper_bound( + this->heights.begin() + , this->heights.end() + , args[sample] + ); + + sample_cell = std::distance(this->heights.begin(), it); + } + + // increment positions of markers above sample_cell + for (std::size_t i = sample_cell; i < b + 1; ++i) + { + ++this->actual_positions[i]; + } + + // update desired position of markers 2 to num_cells + 1 + // (desired position of first marker is always 1) + for (std::size_t i = 1; i < b + 1; ++i) + { + this->desired_positions[i] += this->positions_increments[i]; + } + + // adjust heights of markers 2 to num_cells if necessary + for (std::size_t i = 1; i < b; ++i) + { + // offset to desire position + float_type d = this->desired_positions[i] - this->actual_positions[i]; + + // offset to next position + float_type dp = this->actual_positions[i + 1] - this->actual_positions[i]; + + // offset to previous position + float_type dm = this->actual_positions[i - 1] - this->actual_positions[i]; + + // height ds + float_type hp = (this->heights[i + 1] - this->heights[i]) / dp; + float_type hm = (this->heights[i - 1] - this->heights[i]) / dm; + + if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) ) + { + short sign_d = static_cast(d / std::abs(d)); + + // try adjusting heights[i] using p-squared formula + float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm ); + + if ( this->heights[i - 1] < h && h < this->heights[i + 1] ) + { + this->heights[i] = h; + } + else + { + // use linear formula + if (d>0) + { + this->heights[i] += hp; + } + if (d<0) + { + this->heights[i] -= hm; + } + } + this->actual_positions[i] += sign_d; + } + } + } + } + + template + result_type result(Args const &args) const + { + if (this->is_dirty) + { + this->is_dirty = false; + + // creates a vector of std::pair where each pair i holds + // the values heights[i] (x-axis of histogram) and + // actual_positions[i] / cnt (y-axis of histogram) + + std::size_t cnt = count(args); + + for (std::size_t i = 0; i < this->histogram.size(); ++i) + { + this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], cnt)); + } + } + //return histogram; + return make_iterator_range(this->histogram); + } + + private: + std::size_t num_cells; // number of cells b + array_type heights; // q_i + array_type actual_positions; // n_i + array_type desired_positions; // n'_i + array_type positions_increments; // dn'_i + mutable histogram_type histogram; // histogram + mutable bool is_dirty; + }; + +} // namespace detail + +/////////////////////////////////////////////////////////////////////////////// +// tag::p_square_cumulative_distribution +// +namespace tag +{ + struct p_square_cumulative_distribution + : depends_on + , p_square_cumulative_distribution_num_cells + { + /// INTERNAL ONLY + /// + typedef accumulators::impl::p_square_cumulative_distribution_impl impl; + }; +} + +/////////////////////////////////////////////////////////////////////////////// +// extract::p_square_cumulative_distribution +// +namespace extract +{ + extractor const p_square_cumulative_distribution = {}; + + BOOST_ACCUMULATORS_IGNORE_GLOBAL(p_square_cumulative_distribution) +} + +using extract::p_square_cumulative_distribution; + +// So that p_square_cumulative_distribution can be automatically substituted with +// weighted_p_square_cumulative_distribution when the weight parameter is non-void +template<> +struct as_weighted_feature +{ + typedef tag::weighted_p_square_cumulative_distribution type; +}; + +template<> +struct feature_of + : feature_of +{ +}; + +}} // namespace boost::accumulators + +#endif diff --git a/3party/boost/boost/accumulators/statistics/p_square_cumulative_distribution.hpp b/3party/boost/boost/accumulators/statistics/p_square_cumulative_distribution.hpp index 437469c65b..5e08b51293 100644 --- a/3party/boost/boost/accumulators/statistics/p_square_cumulative_distribution.hpp +++ b/3party/boost/boost/accumulators/statistics/p_square_cumulative_distribution.hpp @@ -1,260 +1,19 @@ /////////////////////////////////////////////////////////////////////////////// // p_square_cumulative_distribution.hpp // -// Copyright 2005 Daniel Egloff, Olivier Gygi. Distributed under the Boost +// Copyright 2012 Eric Niebler. 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 BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006 -#define BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006 +#ifndef BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012 +#define BOOST_ACCUMULATORS_STATISTICS_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__) +# pragma message ("Warning: This header is deprecated. Please use: boost/accumulators/statistics/p_square_cumul_dist.hpp") +#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) +# warning "This header is deprecated. Please use: boost/accumulators/statistics/p_square_cumul_dist.hpp" +#endif -namespace boost { namespace accumulators -{ -/////////////////////////////////////////////////////////////////////////////// -// num_cells named parameter -// -BOOST_PARAMETER_NESTED_KEYWORD(tag, p_square_cumulative_distribution_num_cells, num_cells) - -namespace impl -{ - /////////////////////////////////////////////////////////////////////////////// - // p_square_cumulative_distribution_impl - // cumulative_distribution calculation (as histogram) - /** - @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm - - A histogram of the sample cumulative distribution is computed dynamically without storing samples - based on the \f$ P^2 \f$ algorithm. The returned histogram has a specifiable amount (num_cells) - equiprobable (and not equal-sized) cells. - - For further details, see - - R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and - histograms without storing observations, Communications of the ACM, - Volume 28 (October), Number 10, 1985, p. 1076-1085. - - @param p_square_cumulative_distribution_num_cells. - */ - template - struct p_square_cumulative_distribution_impl - : accumulator_base - { - typedef typename numeric::functional::average::result_type float_type; - typedef std::vector array_type; - typedef std::vector > histogram_type; - // for boost::result_of - typedef iterator_range result_type; - - template - p_square_cumulative_distribution_impl(Args const &args) - : num_cells(args[p_square_cumulative_distribution_num_cells]) - , heights(num_cells + 1) - , actual_positions(num_cells + 1) - , desired_positions(num_cells + 1) - , positions_increments(num_cells + 1) - , histogram(num_cells + 1) - , is_dirty(true) - { - std::size_t b = this->num_cells; - - for (std::size_t i = 0; i < b + 1; ++i) - { - this->actual_positions[i] = i + 1.; - this->desired_positions[i] = i + 1.; - this->positions_increments[i] = numeric::average(i, b); - } - } - - template - void operator ()(Args const &args) - { - this->is_dirty = true; - - std::size_t cnt = count(args); - std::size_t sample_cell = 1; // k - std::size_t b = this->num_cells; - - // accumulate num_cells + 1 first samples - if (cnt <= b + 1) - { - this->heights[cnt - 1] = args[sample]; - - // complete the initialization of heights by sorting - if (cnt == b + 1) - { - std::sort(this->heights.begin(), this->heights.end()); - } - } - else - { - // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values - if (args[sample] < this->heights[0]) - { - this->heights[0] = args[sample]; - sample_cell = 1; - } - else if (this->heights[b] <= args[sample]) - { - this->heights[b] = args[sample]; - sample_cell = b; - } - else - { - typename array_type::iterator it; - it = std::upper_bound( - this->heights.begin() - , this->heights.end() - , args[sample] - ); - - sample_cell = std::distance(this->heights.begin(), it); - } - - // increment positions of markers above sample_cell - for (std::size_t i = sample_cell; i < b + 1; ++i) - { - ++this->actual_positions[i]; - } - - // update desired position of markers 2 to num_cells + 1 - // (desired position of first marker is always 1) - for (std::size_t i = 1; i < b + 1; ++i) - { - this->desired_positions[i] += this->positions_increments[i]; - } - - // adjust heights of markers 2 to num_cells if necessary - for (std::size_t i = 1; i < b; ++i) - { - // offset to desire position - float_type d = this->desired_positions[i] - this->actual_positions[i]; - - // offset to next position - float_type dp = this->actual_positions[i + 1] - this->actual_positions[i]; - - // offset to previous position - float_type dm = this->actual_positions[i - 1] - this->actual_positions[i]; - - // height ds - float_type hp = (this->heights[i + 1] - this->heights[i]) / dp; - float_type hm = (this->heights[i - 1] - this->heights[i]) / dm; - - if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) ) - { - short sign_d = static_cast(d / std::abs(d)); - - // try adjusting heights[i] using p-squared formula - float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm ); - - if ( this->heights[i - 1] < h && h < this->heights[i + 1] ) - { - this->heights[i] = h; - } - else - { - // use linear formula - if (d>0) - { - this->heights[i] += hp; - } - if (d<0) - { - this->heights[i] -= hm; - } - } - this->actual_positions[i] += sign_d; - } - } - } - } - - template - result_type result(Args const &args) const - { - if (this->is_dirty) - { - this->is_dirty = false; - - // creates a vector of std::pair where each pair i holds - // the values heights[i] (x-axis of histogram) and - // actual_positions[i] / cnt (y-axis of histogram) - - std::size_t cnt = count(args); - - for (std::size_t i = 0; i < this->histogram.size(); ++i) - { - this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], cnt)); - } - } - //return histogram; - return make_iterator_range(this->histogram); - } - - private: - std::size_t num_cells; // number of cells b - array_type heights; // q_i - array_type actual_positions; // n_i - array_type desired_positions; // n'_i - array_type positions_increments; // dn'_i - mutable histogram_type histogram; // histogram - mutable bool is_dirty; - }; - -} // namespace detail - -/////////////////////////////////////////////////////////////////////////////// -// tag::p_square_cumulative_distribution -// -namespace tag -{ - struct p_square_cumulative_distribution - : depends_on - , p_square_cumulative_distribution_num_cells - { - /// INTERNAL ONLY - /// - typedef accumulators::impl::p_square_cumulative_distribution_impl impl; - }; -} - -/////////////////////////////////////////////////////////////////////////////// -// extract::p_square_cumulative_distribution -// -namespace extract -{ - extractor const p_square_cumulative_distribution = {}; - - BOOST_ACCUMULATORS_IGNORE_GLOBAL(p_square_cumulative_distribution) -} - -using extract::p_square_cumulative_distribution; - -// So that p_square_cumulative_distribution can be automatically substituted with -// weighted_p_square_cumulative_distribution when the weight parameter is non-void -template<> -struct as_weighted_feature -{ - typedef tag::weighted_p_square_cumulative_distribution type; -}; - -template<> -struct feature_of - : feature_of -{ -}; - -}} // namespace boost::accumulators +#include #endif diff --git a/3party/boost/boost/accumulators/statistics/sum_kahan.hpp b/3party/boost/boost/accumulators/statistics/sum_kahan.hpp index b5b9958643..97ade18da8 100644 --- a/3party/boost/boost/accumulators/statistics/sum_kahan.hpp +++ b/3party/boost/boost/accumulators/statistics/sum_kahan.hpp @@ -51,7 +51,7 @@ struct sum_kahan_impl template void #if BOOST_ACCUMULATORS_GCC_VERSION > 40305 - __attribute__((optimize("no-associative-math"))) + __attribute__((__optimize__("no-associative-math"))) #endif operator ()(Args const & args) { diff --git a/3party/boost/boost/accumulators/statistics/weighted_median.hpp b/3party/boost/boost/accumulators/statistics/weighted_median.hpp index 46880c88d1..b8b94f9f9f 100644 --- a/3party/boost/boost/accumulators/statistics/weighted_median.hpp +++ b/3party/boost/boost/accumulators/statistics/weighted_median.hpp @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace boost { namespace accumulators { diff --git a/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp b/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp new file mode 100644 index 0000000000..832e231414 --- /dev/null +++ b/3party/boost/boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp @@ -0,0 +1,262 @@ +/////////////////////////////////////////////////////////////////////////////// +// weighted_p_square_cumul_dist.hpp +// +// Copyright 2006 Daniel Egloff, Olivier Gygi. 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 BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006 +#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMUL_DIST_HPP_DE_01_01_2006 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for named parameter p_square_cumulative_distribution_num_cells + +namespace boost { namespace accumulators +{ + +namespace impl +{ + /////////////////////////////////////////////////////////////////////////////// + // weighted_p_square_cumulative_distribution_impl + // cumulative distribution calculation (as histogram) + /** + @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm for weighted samples + + A histogram of the sample cumulative distribution is computed dynamically without storing samples + based on the \f$ P^2 \f$ algorithm for weighted samples. The returned histogram has a specifiable + amount (num_cells) equiprobable (and not equal-sized) cells. + + Note that applying importance sampling results in regions to be more and other regions to be less + accurately estimated than without importance sampling, i.e., with unweighted samples. + + For further details, see + + R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and + histograms without storing observations, Communications of the ACM, + Volume 28 (October), Number 10, 1985, p. 1076-1085. + + @param p_square_cumulative_distribution_num_cells + */ + template + struct weighted_p_square_cumulative_distribution_impl + : accumulator_base + { + typedef typename numeric::functional::multiplies::result_type weighted_sample; + typedef typename numeric::functional::average::result_type float_type; + typedef std::vector > histogram_type; + typedef std::vector array_type; + // for boost::result_of + typedef iterator_range result_type; + + template + weighted_p_square_cumulative_distribution_impl(Args const &args) + : num_cells(args[p_square_cumulative_distribution_num_cells]) + , heights(num_cells + 1) + , actual_positions(num_cells + 1) + , desired_positions(num_cells + 1) + , histogram(num_cells + 1) + , is_dirty(true) + { + } + + template + void operator ()(Args const &args) + { + this->is_dirty = true; + + std::size_t cnt = count(args); + std::size_t sample_cell = 1; // k + std::size_t b = this->num_cells; + + // accumulate num_cells + 1 first samples + if (cnt <= b + 1) + { + this->heights[cnt - 1] = args[sample]; + this->actual_positions[cnt - 1] = args[weight]; + + // complete the initialization of heights by sorting + if (cnt == b + 1) + { + //std::sort(this->heights.begin(), this->heights.end()); + + // TODO: we need to sort the initial samples (in heights) in ascending order and + // sort their weights (in actual_positions) the same way. The following lines do + // it, but there must be a better and more efficient way of doing this. + typename array_type::iterator it_begin, it_end, it_min; + + it_begin = this->heights.begin(); + it_end = this->heights.end(); + + std::size_t pos = 0; + + while (it_begin != it_end) + { + it_min = std::min_element(it_begin, it_end); + std::size_t d = std::distance(it_begin, it_min); + std::swap(*it_begin, *it_min); + std::swap(this->actual_positions[pos], this->actual_positions[pos + d]); + ++it_begin; + ++pos; + } + + // calculate correct initial actual positions + for (std::size_t i = 1; i < b; ++i) + { + this->actual_positions[i] += this->actual_positions[i - 1]; + } + } + } + else + { + // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values + if (args[sample] < this->heights[0]) + { + this->heights[0] = args[sample]; + this->actual_positions[0] = args[weight]; + sample_cell = 1; + } + else if (this->heights[b] <= args[sample]) + { + this->heights[b] = args[sample]; + sample_cell = b; + } + else + { + typename array_type::iterator it; + it = std::upper_bound( + this->heights.begin() + , this->heights.end() + , args[sample] + ); + + sample_cell = std::distance(this->heights.begin(), it); + } + + // increment positions of markers above sample_cell + for (std::size_t i = sample_cell; i < b + 1; ++i) + { + this->actual_positions[i] += args[weight]; + } + + // determine desired marker positions + for (std::size_t i = 1; i < b + 1; ++i) + { + this->desired_positions[i] = this->actual_positions[0] + + numeric::average((i-1) * (sum_of_weights(args) - this->actual_positions[0]), b); + } + + // adjust heights of markers 2 to num_cells if necessary + for (std::size_t i = 1; i < b; ++i) + { + // offset to desire position + float_type d = this->desired_positions[i] - this->actual_positions[i]; + + // offset to next position + float_type dp = this->actual_positions[i + 1] - this->actual_positions[i]; + + // offset to previous position + float_type dm = this->actual_positions[i - 1] - this->actual_positions[i]; + + // height ds + float_type hp = (this->heights[i + 1] - this->heights[i]) / dp; + float_type hm = (this->heights[i - 1] - this->heights[i]) / dm; + + if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) ) + { + short sign_d = static_cast(d / std::abs(d)); + + // try adjusting heights[i] using p-squared formula + float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm ); + + if ( this->heights[i - 1] < h && h < this->heights[i + 1] ) + { + this->heights[i] = h; + } + else + { + // use linear formula + if (d>0) + { + this->heights[i] += hp; + } + if (d<0) + { + this->heights[i] -= hm; + } + } + this->actual_positions[i] += sign_d; + } + } + } + } + + template + result_type result(Args const &args) const + { + if (this->is_dirty) + { + this->is_dirty = false; + + // creates a vector of std::pair where each pair i holds + // the values heights[i] (x-axis of histogram) and + // actual_positions[i] / sum_of_weights (y-axis of histogram) + + for (std::size_t i = 0; i < this->histogram.size(); ++i) + { + this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], sum_of_weights(args))); + } + } + + return make_iterator_range(this->histogram); + } + + private: + std::size_t num_cells; // number of cells b + array_type heights; // q_i + array_type actual_positions; // n_i + array_type desired_positions; // n'_i + mutable histogram_type histogram; // histogram + mutable bool is_dirty; + }; + +} // namespace detail + +/////////////////////////////////////////////////////////////////////////////// +// tag::weighted_p_square_cumulative_distribution +// +namespace tag +{ + struct weighted_p_square_cumulative_distribution + : depends_on + , p_square_cumulative_distribution_num_cells + { + typedef accumulators::impl::weighted_p_square_cumulative_distribution_impl impl; + }; +} + +/////////////////////////////////////////////////////////////////////////////// +// extract::weighted_p_square_cumulative_distribution +// +namespace extract +{ + extractor const weighted_p_square_cumulative_distribution = {}; + + BOOST_ACCUMULATORS_IGNORE_GLOBAL(weighted_p_square_cumulative_distribution) +} + +using extract::weighted_p_square_cumulative_distribution; + +}} // namespace boost::accumulators + +#endif diff --git a/3party/boost/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp b/3party/boost/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp index 290f090fe5..918970e8dc 100644 --- a/3party/boost/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp +++ b/3party/boost/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp @@ -1,262 +1,19 @@ /////////////////////////////////////////////////////////////////////////////// // weighted_p_square_cumulative_distribution.hpp // -// Copyright 2006 Daniel Egloff, Olivier Gygi. Distributed under the Boost +// Copyright 2012 Eric Niebler. 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 BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006 -#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_DE_01_01_2006 +#ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012 +#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_CUMULATIVE_DISTRIBUTION_HPP_03_19_2012 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // for named parameter p_square_cumulative_distribution_num_cells +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__) +# pragma message ("Warning: This header is deprecated. Please use: boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp") +#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) +# warning "This header is deprecated. Please use: boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp" +#endif -namespace boost { namespace accumulators -{ - -namespace impl -{ - /////////////////////////////////////////////////////////////////////////////// - // weighted_p_square_cumulative_distribution_impl - // cumulative distribution calculation (as histogram) - /** - @brief Histogram calculation of the cumulative distribution with the \f$P^2\f$ algorithm for weighted samples - - A histogram of the sample cumulative distribution is computed dynamically without storing samples - based on the \f$ P^2 \f$ algorithm for weighted samples. The returned histogram has a specifiable - amount (num_cells) equiprobable (and not equal-sized) cells. - - Note that applying importance sampling results in regions to be more and other regions to be less - accurately estimated than without importance sampling, i.e., with unweighted samples. - - For further details, see - - R. Jain and I. Chlamtac, The P^2 algorithmus for dynamic calculation of quantiles and - histograms without storing observations, Communications of the ACM, - Volume 28 (October), Number 10, 1985, p. 1076-1085. - - @param p_square_cumulative_distribution_num_cells - */ - template - struct weighted_p_square_cumulative_distribution_impl - : accumulator_base - { - typedef typename numeric::functional::multiplies::result_type weighted_sample; - typedef typename numeric::functional::average::result_type float_type; - typedef std::vector > histogram_type; - typedef std::vector array_type; - // for boost::result_of - typedef iterator_range result_type; - - template - weighted_p_square_cumulative_distribution_impl(Args const &args) - : num_cells(args[p_square_cumulative_distribution_num_cells]) - , heights(num_cells + 1) - , actual_positions(num_cells + 1) - , desired_positions(num_cells + 1) - , histogram(num_cells + 1) - , is_dirty(true) - { - } - - template - void operator ()(Args const &args) - { - this->is_dirty = true; - - std::size_t cnt = count(args); - std::size_t sample_cell = 1; // k - std::size_t b = this->num_cells; - - // accumulate num_cells + 1 first samples - if (cnt <= b + 1) - { - this->heights[cnt - 1] = args[sample]; - this->actual_positions[cnt - 1] = args[weight]; - - // complete the initialization of heights by sorting - if (cnt == b + 1) - { - //std::sort(this->heights.begin(), this->heights.end()); - - // TODO: we need to sort the initial samples (in heights) in ascending order and - // sort their weights (in actual_positions) the same way. The following lines do - // it, but there must be a better and more efficient way of doing this. - typename array_type::iterator it_begin, it_end, it_min; - - it_begin = this->heights.begin(); - it_end = this->heights.end(); - - std::size_t pos = 0; - - while (it_begin != it_end) - { - it_min = std::min_element(it_begin, it_end); - std::size_t d = std::distance(it_begin, it_min); - std::swap(*it_begin, *it_min); - std::swap(this->actual_positions[pos], this->actual_positions[pos + d]); - ++it_begin; - ++pos; - } - - // calculate correct initial actual positions - for (std::size_t i = 1; i < b; ++i) - { - this->actual_positions[i] += this->actual_positions[i - 1]; - } - } - } - else - { - // find cell k such that heights[k-1] <= args[sample] < heights[k] and adjust extreme values - if (args[sample] < this->heights[0]) - { - this->heights[0] = args[sample]; - this->actual_positions[0] = args[weight]; - sample_cell = 1; - } - else if (this->heights[b] <= args[sample]) - { - this->heights[b] = args[sample]; - sample_cell = b; - } - else - { - typename array_type::iterator it; - it = std::upper_bound( - this->heights.begin() - , this->heights.end() - , args[sample] - ); - - sample_cell = std::distance(this->heights.begin(), it); - } - - // increment positions of markers above sample_cell - for (std::size_t i = sample_cell; i < b + 1; ++i) - { - this->actual_positions[i] += args[weight]; - } - - // determine desired marker positions - for (std::size_t i = 1; i < b + 1; ++i) - { - this->desired_positions[i] = this->actual_positions[0] - + numeric::average((i-1) * (sum_of_weights(args) - this->actual_positions[0]), b); - } - - // adjust heights of markers 2 to num_cells if necessary - for (std::size_t i = 1; i < b; ++i) - { - // offset to desire position - float_type d = this->desired_positions[i] - this->actual_positions[i]; - - // offset to next position - float_type dp = this->actual_positions[i + 1] - this->actual_positions[i]; - - // offset to previous position - float_type dm = this->actual_positions[i - 1] - this->actual_positions[i]; - - // height ds - float_type hp = (this->heights[i + 1] - this->heights[i]) / dp; - float_type hm = (this->heights[i - 1] - this->heights[i]) / dm; - - if ( ( d >= 1. && dp > 1. ) || ( d <= -1. && dm < -1. ) ) - { - short sign_d = static_cast(d / std::abs(d)); - - // try adjusting heights[i] using p-squared formula - float_type h = this->heights[i] + sign_d / (dp - dm) * ( (sign_d - dm) * hp + (dp - sign_d) * hm ); - - if ( this->heights[i - 1] < h && h < this->heights[i + 1] ) - { - this->heights[i] = h; - } - else - { - // use linear formula - if (d>0) - { - this->heights[i] += hp; - } - if (d<0) - { - this->heights[i] -= hm; - } - } - this->actual_positions[i] += sign_d; - } - } - } - } - - template - result_type result(Args const &args) const - { - if (this->is_dirty) - { - this->is_dirty = false; - - // creates a vector of std::pair where each pair i holds - // the values heights[i] (x-axis of histogram) and - // actual_positions[i] / sum_of_weights (y-axis of histogram) - - for (std::size_t i = 0; i < this->histogram.size(); ++i) - { - this->histogram[i] = std::make_pair(this->heights[i], numeric::average(this->actual_positions[i], sum_of_weights(args))); - } - } - - return make_iterator_range(this->histogram); - } - - private: - std::size_t num_cells; // number of cells b - array_type heights; // q_i - array_type actual_positions; // n_i - array_type desired_positions; // n'_i - mutable histogram_type histogram; // histogram - mutable bool is_dirty; - }; - -} // namespace detail - -/////////////////////////////////////////////////////////////////////////////// -// tag::weighted_p_square_cumulative_distribution -// -namespace tag -{ - struct weighted_p_square_cumulative_distribution - : depends_on - , p_square_cumulative_distribution_num_cells - { - typedef accumulators::impl::weighted_p_square_cumulative_distribution_impl impl; - }; -} - -/////////////////////////////////////////////////////////////////////////////// -// extract::weighted_p_square_cumulative_distribution -// -namespace extract -{ - extractor const weighted_p_square_cumulative_distribution = {}; - - BOOST_ACCUMULATORS_IGNORE_GLOBAL(weighted_p_square_cumulative_distribution) -} - -using extract::weighted_p_square_cumulative_distribution; - -}} // namespace boost::accumulators +#include #endif diff --git a/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp b/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp index 4e0d4efa5e..5dc84f4764 100644 --- a/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp +++ b/3party/boost/boost/accumulators/statistics/weighted_p_square_quantile.hpp @@ -8,6 +8,7 @@ #ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_QUANTILE_HPP_DE_01_01_2006 #define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_P_SQUARE_QUANTILE_HPP_DE_01_01_2006 +#include #include #include #include diff --git a/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp b/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp index 6d3017b3ec..8ee2c56005 100644 --- a/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp +++ b/3party/boost/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/accumulators/statistics/weighted_sum_kahan.hpp b/3party/boost/boost/accumulators/statistics/weighted_sum_kahan.hpp index ad9b83d4b9..fbb0303acc 100644 --- a/3party/boost/boost/accumulators/statistics/weighted_sum_kahan.hpp +++ b/3party/boost/boost/accumulators/statistics/weighted_sum_kahan.hpp @@ -52,7 +52,7 @@ namespace impl template void #if BOOST_ACCUMULATORS_GCC_VERSION > 40305 - __attribute__((optimize("no-associative-math"))) + __attribute__((__optimize__("no-associative-math"))) #endif operator ()(Args const &args) { diff --git a/3party/boost/boost/algorithm/clamp.hpp b/3party/boost/boost/algorithm/clamp.hpp new file mode 100644 index 0000000000..ae98d15d2f --- /dev/null +++ b/3party/boost/boost/algorithm/clamp.hpp @@ -0,0 +1,175 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) + + Revision history: + 27 June 2009 mtc First version + 23 Oct 2010 mtc Added predicate version + +*/ + +/// \file clamp.hpp +/// \brief Clamp algorithm +/// \author Marshall Clow +/// +/// Suggested by olafvdspek in https://svn.boost.org/trac/boost/ticket/3215 + +#ifndef BOOST_ALGORITHM_CLAMP_HPP +#define BOOST_ALGORITHM_CLAMP_HPP + +#include // For std::less +#include // For std::iterator_traits +#include + +#include +#include +#include // for identity +#include // for boost::disable_if + +namespace boost { namespace algorithm { + +/// \fn clamp ( T const& val, +/// typename boost::mpl::identity::type const& lo, +/// typename boost::mpl::identity::type const& hi, Pred p ) +/// \return the value "val" brought into the range [ lo, hi ] +/// using the comparison predicate p. +/// If p ( val, lo ) return lo. +/// If p ( hi, val ) return hi. +/// Otherwise, return the original value. +/// +/// \param val The value to be clamped +/// \param lo The lower bound of the range to be clamped to +/// \param hi The upper bound of the range to be clamped to +/// \param p A predicate to use to compare the values. +/// p ( a, b ) returns a boolean. +/// + template + T const & clamp ( T const& val, + typename boost::mpl::identity::type const & lo, + typename boost::mpl::identity::type const & hi, Pred p ) + { +// assert ( !p ( hi, lo )); // Can't assert p ( lo, hi ) b/c they might be equal + return p ( val, lo ) ? lo : p ( hi, val ) ? hi : val; + } + + +/// \fn clamp ( T const& val, +/// typename boost::mpl::identity::type const& lo, +/// typename boost::mpl::identity::type const& hi ) +/// \return the value "val" brought into the range [ lo, hi ]. +/// If the value is less than lo, return lo. +/// If the value is greater than "hi", return hi. +/// Otherwise, return the original value. +/// +/// \param val The value to be clamped +/// \param lo The lower bound of the range to be clamped to +/// \param hi The upper bound of the range to be clamped to +/// + template + T const& clamp ( const T& val, + typename boost::mpl::identity::type const & lo, + typename boost::mpl::identity::type const & hi ) + { + return (clamp) ( val, lo, hi, std::less()); + } + +/// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out, +/// std::iterator_traits::value_type lo, +/// std::iterator_traits::value_type hi ) +/// \return clamp the sequence of values [first, last) into [ lo, hi ] +/// +/// \param first The start of the range of values +/// \param last One past the end of the range of input values +/// \param out An output iterator to write the clamped values into +/// \param lo The lower bound of the range to be clamped to +/// \param hi The upper bound of the range to be clamped to +/// + template + OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out, + typename std::iterator_traits::value_type lo, + typename std::iterator_traits::value_type hi ) + { + // this could also be written with bind and std::transform + while ( first != last ) + *out++ = clamp ( *first++, lo, hi ); + return out; + } + +/// \fn clamp_range ( const Range &r, OutputIterator out, +/// typename std::iterator_traits::type>::value_type lo, +/// typename std::iterator_traits::type>::value_type hi ) +/// \return clamp the sequence of values [first, last) into [ lo, hi ] +/// +/// \param r The range of values to be clamped +/// \param out An output iterator to write the clamped values into +/// \param lo The lower bound of the range to be clamped to +/// \param hi The upper bound of the range to be clamped to +/// + template + typename boost::disable_if_c::value, OutputIterator>::type + clamp_range ( const Range &r, OutputIterator out, + typename std::iterator_traits::type>::value_type lo, + typename std::iterator_traits::type>::value_type hi ) + { + return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi ); + } + + +/// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out, +/// std::iterator_traits::value_type lo, +/// std::iterator_traits::value_type hi, Pred p ) +/// \return clamp the sequence of values [first, last) into [ lo, hi ] +/// using the comparison predicate p. +/// +/// \param first The start of the range of values +/// \param last One past the end of the range of input values +/// \param out An output iterator to write the clamped values into +/// \param lo The lower bound of the range to be clamped to +/// \param hi The upper bound of the range to be clamped to +/// \param p A predicate to use to compare the values. +/// p ( a, b ) returns a boolean. + +/// + template + OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out, + typename std::iterator_traits::value_type lo, + typename std::iterator_traits::value_type hi, Pred p ) + { + // this could also be written with bind and std::transform + while ( first != last ) + *out++ = clamp ( *first++, lo, hi, p ); + return out; + } + +/// \fn clamp_range ( const Range &r, OutputIterator out, +/// typename std::iterator_traits::type>::value_type lo, +/// typename std::iterator_traits::type>::value_type hi, +/// Pred p ) +/// \return clamp the sequence of values [first, last) into [ lo, hi ] +/// using the comparison predicate p. +/// +/// \param r The range of values to be clamped +/// \param out An output iterator to write the clamped values into +/// \param lo The lower bound of the range to be clamped to +/// \param hi The upper bound of the range to be clamped to +/// \param p A predicate to use to compare the values. +/// p ( a, b ) returns a boolean. +// +// Disable this template if the first two parameters are the same type; +// In that case, the user will get the two iterator version. + template + typename boost::disable_if_c::value, OutputIterator>::type + clamp_range ( const Range &r, OutputIterator out, + typename std::iterator_traits::type>::value_type lo, + typename std::iterator_traits::type>::value_type hi, + Pred p ) + { + return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi, p ); + } + + +}} + +#endif // BOOST_ALGORITHM_CLAMP_HPP diff --git a/3party/boost/boost/algorithm/cxx11/all_of.hpp b/3party/boost/boost/algorithm/cxx11/all_of.hpp new file mode 100644 index 0000000000..b76cb3f010 --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/all_of.hpp @@ -0,0 +1,91 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) +*/ + +/// \file all_of.hpp +/// \brief Test ranges to see if all elements match a value or predicate. +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_ALL_OF_HPP +#define BOOST_ALGORITHM_ALL_OF_HPP + +#include // for std::all_of, if available +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of all_of if it is available +using std::all_of; // Section 25.2.1 +#else +/// \fn all_of ( InputIterator first, InputIterator last, Predicate p ) +/// \return true if all elements in [first, last) satisfy the predicate 'p' +/// \note returns true on an empty range +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p A predicate for testing the elements of the sequence +/// +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +bool all_of ( InputIterator first, InputIterator last, Predicate p ) +{ + for ( ; first != last; ++first ) + if ( !p(*first)) + return false; + return true; +} +#endif + +/// \fn all_of ( const Range &r, Predicate p ) +/// \return true if all elements in the range satisfy the predicate 'p' +/// \note returns true on an empty range +/// +/// \param r The input range +/// \param p A predicate for testing the elements of the range +/// +template +bool all_of ( const Range &r, Predicate p ) +{ + return boost::algorithm::all_of ( boost::begin (r), boost::end (r), p ); +} + +/// \fn all_of_equal ( InputIterator first, InputIterator last, const T &val ) +/// \return true if all elements in [first, last) are equal to 'val' +/// \note returns true on an empty range +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param val A value to compare against +/// +template +bool all_of_equal ( InputIterator first, InputIterator last, const T &val ) +{ + for ( ; first != last; ++first ) + if ( val != *first ) + return false; + return true; +} + +/// \fn all_of_equal ( const Range &r, const T &val ) +/// \return true if all elements in the range are equal to 'val' +/// \note returns true on an empty range +/// +/// \param r The input range +/// \param val A value to compare against +/// +template +bool all_of_equal ( const Range &r, const T &val ) +{ + return boost::algorithm::all_of_equal ( boost::begin (r), boost::end (r), val ); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_ALL_OF_HPP diff --git a/3party/boost/boost/algorithm/cxx11/any_of.hpp b/3party/boost/boost/algorithm/cxx11/any_of.hpp new file mode 100644 index 0000000000..c3ab3ce59f --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/any_of.hpp @@ -0,0 +1,90 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) + + For more information, see http://www.boost.org +*/ + +/// \file +/// \brief Test ranges to see if any elements match a value or predicate. +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_ANY_OF_HPP +#define BOOST_ALGORITHM_ANY_OF_HPP + +#include // for std::any_of, if available +#include +#include + +namespace boost { namespace algorithm { + +// Use the C++11 versions of any_of if it is available +#if __cplusplus >= 201103L +using std::any_of; // Section 25.2.2 +#else +/// \fn any_of ( InputIterator first, InputIterator last, Predicate p ) +/// \return true if any of the elements in [first, last) satisfy the predicate +/// \note returns false on an empty range +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p A predicate for testing the elements of the sequence +/// +template +bool any_of ( InputIterator first, InputIterator last, Predicate p ) +{ + for ( ; first != last; ++first ) + if ( p(*first)) + return true; + return false; +} +#endif + +/// \fn any_of ( const Range &r, Predicate p ) +/// \return true if any elements in the range satisfy the predicate 'p' +/// \note returns false on an empty range +/// +/// \param r The input range +/// \param p A predicate for testing the elements of the range +/// +template +bool any_of ( const Range &r, Predicate p ) +{ + return boost::algorithm::any_of (boost::begin (r), boost::end (r), p); +} + +/// \fn any_of_equal ( InputIterator first, InputIterator last, const V &val ) +/// \return true if any of the elements in [first, last) are equal to 'val' +/// \note returns false on an empty range +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param val A value to compare against +/// +template +bool any_of_equal ( InputIterator first, InputIterator last, const V &val ) +{ + for ( ; first != last; ++first ) + if ( val == *first ) + return true; + return false; +} + +/// \fn any_of_equal ( const Range &r, const V &val ) +/// \return true if any of the elements in the range are equal to 'val' +/// \note returns false on an empty range +/// +/// \param r The input range +/// \param val A value to compare against +/// +template +bool any_of_equal ( const Range &r, const V &val ) +{ + return boost::algorithm::any_of_equal (boost::begin (r), boost::end (r), val); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_ANY_OF_HPP diff --git a/3party/boost/boost/algorithm/cxx11/copy_if.hpp b/3party/boost/boost/algorithm/cxx11/copy_if.hpp new file mode 100644 index 0000000000..6d0ba00bae --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/copy_if.hpp @@ -0,0 +1,133 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) +*/ + +/// \file copy_if.hpp +/// \brief Copy a subset of a sequence to a new sequence +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_COPY_IF_HPP +#define BOOST_ALGORITHM_COPY_IF_HPP + +#include // for std::copy_if, if available +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of copy_if if it is available +using std::copy_if; // Section 25.3.1 +#else +/// \fn copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) +/// \brief Copies all the elements from the input range that satisfy the +/// predicate to the output range. +/// \return The updated output iterator +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param result An output iterator to write the results into +/// \param p A predicate for testing the elements of the range +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) +{ + for ( ; first != last; ++first ) + if (p(*first)) + *result++ = first; + return result; +} +#endif + +/// \fn copy_if ( const Range &r, OutputIterator result, Predicate p ) +/// \brief Copies all the elements from the input range that satisfy the +/// predicate to the output range. +/// \return The updated output iterator +/// +/// \param r The input range +/// \param result An output iterator to write the results into +/// \param p A predicate for testing the elements of the range +/// +template +OutputIterator copy_if ( const Range &r, OutputIterator result, Predicate p ) +{ + return boost::algorithm::copy_if (boost::begin (r), boost::end(r), result, p); +} + + +/// \fn copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) +/// \brief Copies all the elements at the start of the input range that +/// satisfy the predicate to the output range. +/// \return The updated output iterator +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param result An output iterator to write the results into +/// \param p A predicate for testing the elements of the range +/// +template +OutputIterator copy_while ( InputIterator first, InputIterator last, + OutputIterator result, Predicate p ) +{ + for ( ; first != last && p(*first); ++first ) + *result++ = first; + return result; +} + +/// \fn copy_while ( const Range &r, OutputIterator result, Predicate p ) +/// \brief Copies all the elements at the start of the input range that +/// satisfy the predicate to the output range. +/// \return The updated output iterator +/// +/// \param r The input range +/// \param result An output iterator to write the results into +/// \param p A predicate for testing the elements of the range +/// +template +OutputIterator copy_while ( const Range &r, OutputIterator result, Predicate p ) +{ + return boost::algorithm::copy_while (boost::begin (r), boost::end(r), result, p); +} + + +/// \fn copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) +/// \brief Copies all the elements at the start of the input range that do not +/// satisfy the predicate to the output range. +/// \return The updated output iterator +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param result An output iterator to write the results into +/// \param p A predicate for testing the elements of the range +/// +template +OutputIterator copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) +{ + for ( ; first != last && !p(*first); ++first ) + *result++ = first; + return result; +} + +/// \fn copy_until ( const Range &r, OutputIterator result, Predicate p ) +/// \brief Copies all the elements at the start of the input range that do not +/// satisfy the predicate to the output range. +/// \return The updated output iterator +/// +/// \param r The input range +/// \param result An output iterator to write the results into +/// \param p A predicate for testing the elements of the range +/// +template +OutputIterator copy_until ( const Range &r, OutputIterator result, Predicate p ) +{ + return boost::algorithm::copy_until (boost::begin (r), boost::end(r), result, p); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_COPY_IF_HPP diff --git a/3party/boost/boost/algorithm/cxx11/copy_n.hpp b/3party/boost/boost/algorithm/cxx11/copy_n.hpp new file mode 100644 index 0000000000..0ea53bd23f --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/copy_n.hpp @@ -0,0 +1,44 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) +*/ + +/// \file copy_n.hpp +/// \brief Copy n items from one sequence to another +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_COPY_N_HPP +#define BOOST_ALGORITHM_COPY_N_HPP + +#include // for std::copy_n, if available + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of copy_n if it is available +using std::copy_n; // Section 25.3.1 +#else +/// \fn copy_n ( InputIterator first, Size n, OutputIterator result ) +/// \brief Copies exactly n (n > 0) elements from the range starting at first to +/// the range starting at result. +/// \return The updated output iterator +/// +/// \param first The start of the input sequence +/// \param n The number of elements to copy +/// \param result An output iterator to write the results into +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result ) +{ + for ( ; n > 0; --n, ++first, ++result ) + *result = *first; + return result; +} +#endif +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_COPY_IF_HPP diff --git a/3party/boost/boost/algorithm/cxx11/find_if_not.hpp b/3party/boost/boost/algorithm/cxx11/find_if_not.hpp new file mode 100644 index 0000000000..4beed00083 --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/find_if_not.hpp @@ -0,0 +1,60 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) +*/ + +/// \file find_if_not.hpp +/// \brief Find the first element in a sequence that does not satisfy a predicate. +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_FIND_IF_NOT_HPP +#define BOOST_ALGORITHM_FIND_IF_NOT_HPP + +#include // for std::find_if_not, if it exists + +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of find_if_not if it is available +using std::find_if_not; // Section 25.2.5 +#else +/// \fn find_if_not(InputIterator first, InputIterator last, Predicate p) +/// \brief Finds the first element in the sequence that does not satisfy the predicate. +/// \return The iterator pointing to the desired element. +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p A predicate for testing the elements of the range +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p ) +{ + for ( ; first != last; ++first ) + if ( !p(*first)) + break; + return first; +} +#endif + +/// \fn find_if_not ( const Range &r, Predicate p ) +/// \brief Finds the first element in the sequence that does not satisfy the predicate. +/// \return The iterator pointing to the desired element. +/// +/// \param r The input range +/// \param p A predicate for testing the elements of the range +/// +template +typename boost::range_iterator::type find_if_not ( const Range &r, Predicate p ) +{ + return boost::algorithm::find_if_not (boost::begin (r), boost::end(r), p); +} + +}} +#endif // BOOST_ALGORITHM_FIND_IF_NOT_HPP diff --git a/3party/boost/boost/algorithm/cxx11/iota.hpp b/3party/boost/boost/algorithm/cxx11/iota.hpp new file mode 100644 index 0000000000..b4f0dafa6d --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/iota.hpp @@ -0,0 +1,74 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) +*/ + +/// \file iota.hpp +/// \brief Generate an increasing series +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_IOTA_HPP +#define BOOST_ALGORITHM_IOTA_HPP + +#include + +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of iota if it is available +using std::iota; // Section 26.7.6 +#else +/// \fn iota ( ForwardIterator first, ForwardIterator last, T value ) +/// \brief Generates an increasing sequence of values, and stores them in [first, last) +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param value The initial value of the sequence to be generated +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +void iota ( ForwardIterator first, ForwardIterator last, T value ) +{ + for ( ; first != last; ++first, ++value ) + *first = value; +} +#endif + +/// \fn iota ( Range &r, T value ) +/// \brief Generates an increasing sequence of values, and stores them in the input Range. +/// +/// \param r The input range +/// \param value The initial value of the sequence to be generated +/// +template +void iota ( Range &r, T value ) +{ + boost::algorithm::iota (boost::begin(r), boost::end(r), value); +} + + +/// \fn iota_n ( OutputIterator out, T value, std::size_t n ) +/// \brief Generates an increasing sequence of values, and stores them in the input Range. +/// +/// \param out An output iterator to write the results into +/// \param value The initial value of the sequence to be generated +/// \param n The number of items to write +/// +template +OutputIterator iota_n ( OutputIterator out, T value, std::size_t n ) +{ + while ( n-- > 0 ) + *out++ = value++; + + return out; +} + +}} + +#endif // BOOST_ALGORITHM_IOTA_HPP diff --git a/3party/boost/boost/algorithm/cxx11/is_partitioned.hpp b/3party/boost/boost/algorithm/cxx11/is_partitioned.hpp new file mode 100644 index 0000000000..d647183a8a --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/is_partitioned.hpp @@ -0,0 +1,65 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) +*/ + +/// \file is_partitioned.hpp +/// \brief Tell if a sequence is partitioned +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP +#define BOOST_ALGORITHM_IS_PARTITIONED_HPP + +#include // for std::is_partitioned, if available + +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of is_partitioned if it is available +using std::is_partitioned; // Section 25.3.13 +#else +/// \fn is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p ) +/// \brief Tests to see if a sequence is partititioned according to a predicate +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p The predicicate to test the values with +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p ) +{ +// Run through the part that satisfy the predicate + for ( ; first != last; ++first ) + if ( !p (*first)) + break; +// Now the part that does not satisfy the predicate + for ( ; first != last; ++first ) + if ( p (*first)) + return false; + return true; +} +#endif + +/// \fn is_partitioned ( const Range &r, UnaryPredicate p ) +/// \brief Generates an increasing sequence of values, and stores them in the input Range. +/// +/// \param r The input range +/// \param p The predicicate to test the values with +/// +template +bool is_partitioned ( const Range &r, UnaryPredicate p ) +{ + return boost::algorithm::is_partitioned (boost::begin(r), boost::end(r), p); +} + + +}} + +#endif // BOOST_ALGORITHM_IS_PARTITIONED_HPP diff --git a/3party/boost/boost/algorithm/cxx11/is_permutation.hpp b/3party/boost/boost/algorithm/cxx11/is_permutation.hpp new file mode 100644 index 0000000000..33cb712378 --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/is_permutation.hpp @@ -0,0 +1,139 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) +*/ + +/// \file is_permutation.hpp +/// \brief Is a sequence a permutation of another sequence +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_IS_PERMUTATION_HPP +#define BOOST_ALGORITHM_IS_PERMUTATION_HPP + +#include // for std::less, tie, mismatch and is_permutation (if available) +#include // for std::make_pair +#include // for std::equal_to +#include + +#include +#include +#include +#include +#include // for tie + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of is_permutation if it is available +using std::is_permutation; // Section 25.2.12 +#else +/// \cond DOXYGEN_HIDE +namespace detail { + template + struct value_predicate { + value_predicate ( Predicate p, Iterator it ) : p_ ( p ), it_ ( it ) {} + + template + bool operator () ( const T1 &t1 ) const { return p_ ( *it_, t1 ); } + private: + Predicate &p_; + Iterator it_; + }; +} +/// \endcond + + +/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2, BinaryPredicate p ) +/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2 +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param first2 The start of the second sequence +/// \param p The predicate to compare elements with +/// +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate > +bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, BinaryPredicate p ) +{ +// Skip the common prefix (if any) +// std::tie (first1, first2) = std::mismatch (first1, last1, first2, p); + std::pair eq = std::mismatch (first1, last1, first2, p); + first1 = eq.first; + first2 = eq.second; + if ( first1 != last1 ) { + // Create last2 + ForwardIterator2 last2 = first2; + std::advance ( last2, std::distance (first1, last1)); + + // for each unique value in the sequence [first1,last1), count how many times + // it occurs, and make sure it occurs the same number of times in [first2, last2) + for ( ForwardIterator1 iter = first1; iter != last1; ++iter ) { + detail::value_predicate pred ( p, iter ); + + /* For each value we haven't seen yet... */ + if ( std::find_if ( first1, iter, pred ) == iter ) { + std::size_t dest_count = std::count_if ( first2, last2, pred ); + if ( dest_count == 0 || dest_count != (std::size_t) std::count_if ( iter, last1, pred )) + return false; + } + } + } + + return true; +} + +/// \fn is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2 ) +/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2 +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param first2 The start of the second sequence +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template< class ForwardIterator1, class ForwardIterator2 > +bool is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIterator2 first2 ) +{ +// How should I deal with the idea that ForwardIterator1::value_type +// and ForwardIterator2::value_type could be different? Define my own comparison predicate? + return boost::algorithm::is_permutation ( first, last, first2, + std::equal_to::value_type> ()); +} + +#endif + +/// \fn is_permutation ( const Range &r, ForwardIterator first2 ) +/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2 +/// +/// \param r The input range +/// \param first2 The start of the second sequence +template +bool is_permutation ( const Range &r, ForwardIterator first2 ) +{ + return boost::algorithm::is_permutation (boost::begin (r), boost::end (r), first2 ); +} + +/// \fn is_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred ) +/// \brief Tests to see if a the sequence [first,last) is a permutation of the sequence starting at first2 +/// +/// \param r The input range +/// \param first2 The start of the second sequence +/// \param pred The predicate to compare elements with +/// +// Disable this template when the first two parameters are the same type +// That way the non-range version will be chosen. +template +typename boost::disable_if_c::value, bool>::type +is_permutation ( const Range &r, ForwardIterator first2, BinaryPredicate pred ) +{ + return boost::algorithm::is_permutation (boost::begin (r), boost::end (r), first2, pred ); +} + +}} + +#endif // BOOST_ALGORITHM_IS_PERMUTATION_HPP diff --git a/3party/boost/boost/algorithm/cxx11/is_sorted.hpp b/3party/boost/boost/algorithm/cxx11/is_sorted.hpp new file mode 100644 index 0000000000..c9bc65fbe9 --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/is_sorted.hpp @@ -0,0 +1,287 @@ +// Copyright (c) 2010 Nuovation System Designs, LLC +// Grant Erickson +// +// Reworked somewhat by Marshall Clow; August 2010 +// +// 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) +// +// See http://www.boost.org/ for latest version. +// + +#ifndef BOOST_ALGORITHM_ORDERED_HPP +#define BOOST_ALGORITHM_ORDERED_HPP + +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of is_sorted/is_sorted_until if they are available +using std::is_sorted_until; // Section 25.4.1.5 +using std::is_sorted; // Section 25.4.1.5 +#else +/// \fn is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p ) +/// \return the point in the sequence [first, last) where the elements are unordered +/// (according to the comparison predicate 'p'). +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// \param p A binary predicate that returns true if two elements are ordered. +/// + template + ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p ) + { + if ( first == last ) return last; // the empty sequence is ordered + ForwardIterator next = first; + while ( ++next != last ) + { + if ( p ( *next, *first )) + return next; + first = next; + } + return last; + } + +/// \fn is_sorted_until ( ForwardIterator first, ForwardIterator last ) +/// \return the point in the sequence [first, last) where the elements are unordered +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// + template + ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last ) + { + typedef typename std::iterator_traits::value_type value_type; + return boost::algorithm::is_sorted_until ( first, last, std::less()); + } + + +/// \fn is_sorted ( ForwardIterator first, ForwardIterator last, Pred p ) +/// \return whether or not the entire sequence is sorted +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// \param p A binary predicate that returns true if two elements are ordered. +/// + template + bool is_sorted ( ForwardIterator first, ForwardIterator last, Pred p ) + { + return boost::algorithm::is_sorted_until (first, last, p) == last; + } + +/// \fn is_sorted ( ForwardIterator first, ForwardIterator last ) +/// \return whether or not the entire sequence is sorted +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// + template + bool is_sorted ( ForwardIterator first, ForwardIterator last ) + { + return boost::algorithm::is_sorted_until (first, last) == last; + } +#endif + +/// +/// -- Range based versions of the C++11 functions +/// + +/// \fn is_sorted_until ( const R &range, Pred p ) +/// \return the point in the range R where the elements are unordered +/// (according to the comparison predicate 'p'). +/// +/// \param range The range to be tested. +/// \param p A binary predicate that returns true if two elements are ordered. +/// + template + typename boost::lazy_disable_if_c< + boost::is_same::value, + typename boost::range_iterator + >::type is_sorted_until ( const R &range, Pred p ) + { + return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range ), p ); + } + + +/// \fn is_sorted_until ( const R &range ) +/// \return the point in the range R where the elements are unordered +/// +/// \param range The range to be tested. +/// + template + typename boost::range_iterator::type is_sorted_until ( const R &range ) + { + return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range )); + } + +/// \fn is_sorted ( const R &range, Pred p ) +/// \return whether or not the entire range R is sorted +/// (according to the comparison predicate 'p'). +/// +/// \param range The range to be tested. +/// \param p A binary predicate that returns true if two elements are ordered. +/// + template + typename boost::lazy_disable_if_c< boost::is_same::value, boost::mpl::identity >::type + is_sorted ( const R &range, Pred p ) + { + return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range ), p ); + } + + +/// \fn is_sorted ( const R &range ) +/// \return whether or not the entire range R is sorted +/// +/// \param range The range to be tested. +/// + template + bool is_sorted ( const R &range ) + { + return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range )); + } + + +/// +/// -- Range based versions of the C++11 functions +/// + +/// \fn is_increasing ( ForwardIterator first, ForwardIterator last ) +/// \return true if the entire sequence is increasing; i.e, each item is greater than or +/// equal to the previous one. +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// +/// \note This function will return true for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_strictly_increasing instead. + template + bool is_increasing ( ForwardIterator first, ForwardIterator last ) + { + typedef typename std::iterator_traits::value_type value_type; + return boost::algorithm::is_sorted (first, last, std::less()); + } + + +/// \fn is_increasing ( const R &range ) +/// \return true if the entire sequence is increasing; i.e, each item is greater than or +/// equal to the previous one. +/// +/// \param range The range to be tested. +/// +/// \note This function will return true for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_strictly_increasing instead. + template + bool is_increasing ( const R &range ) + { + return is_increasing ( boost::begin ( range ), boost::end ( range )); + } + + + +/// \fn is_decreasing ( ForwardIterator first, ForwardIterator last ) +/// \return true if the entire sequence is decreasing; i.e, each item is less than +/// or equal to the previous one. +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// +/// \note This function will return true for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_strictly_decreasing instead. + template + bool is_decreasing ( ForwardIterator first, ForwardIterator last ) + { + typedef typename std::iterator_traits::value_type value_type; + return boost::algorithm::is_sorted (first, last, std::greater()); + } + +/// \fn is_decreasing ( const R &range ) +/// \return true if the entire sequence is decreasing; i.e, each item is less than +/// or equal to the previous one. +/// +/// \param range The range to be tested. +/// +/// \note This function will return true for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_strictly_decreasing instead. + template + bool is_decreasing ( const R &range ) + { + return is_decreasing ( boost::begin ( range ), boost::end ( range )); + } + + + +/// \fn is_strictly_increasing ( ForwardIterator first, ForwardIterator last ) +/// \return true if the entire sequence is strictly increasing; i.e, each item is greater +/// than the previous one +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// +/// \note This function will return false for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_increasing instead. + template + bool is_strictly_increasing ( ForwardIterator first, ForwardIterator last ) + { + typedef typename std::iterator_traits::value_type value_type; + return boost::algorithm::is_sorted (first, last, std::less_equal()); + } + +/// \fn is_strictly_increasing ( const R &range ) +/// \return true if the entire sequence is strictly increasing; i.e, each item is greater +/// than the previous one +/// +/// \param range The range to be tested. +/// +/// \note This function will return false for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_increasing instead. + template + bool is_strictly_increasing ( const R &range ) + { + return is_strictly_increasing ( boost::begin ( range ), boost::end ( range )); + } + + +/// \fn is_strictly_decreasing ( ForwardIterator first, ForwardIterator last ) +/// \return true if the entire sequence is strictly decreasing; i.e, each item is less than +/// the previous one +/// +/// \param first The start of the sequence to be tested. +/// \param last One past the end of the sequence +/// +/// \note This function will return false for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_decreasing instead. + template + bool is_strictly_decreasing ( ForwardIterator first, ForwardIterator last ) + { + typedef typename std::iterator_traits::value_type value_type; + return boost::algorithm::is_sorted (first, last, std::greater_equal()); + } + +/// \fn is_strictly_decreasing ( const R &range ) +/// \return true if the entire sequence is strictly decreasing; i.e, each item is less than +/// the previous one +/// +/// \param range The range to be tested. +/// +/// \note This function will return false for sequences that contain items that compare +/// equal. If that is not what you intended, you should use is_decreasing instead. + template + bool is_strictly_decreasing ( const R &range ) + { + return is_strictly_decreasing ( boost::begin ( range ), boost::end ( range )); + } + +}} // namespace boost + +#endif // BOOST_ALGORITHM_ORDERED_HPP diff --git a/3party/boost/boost/algorithm/cxx11/none_of.hpp b/3party/boost/boost/algorithm/cxx11/none_of.hpp new file mode 100644 index 0000000000..feae9919fc --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/none_of.hpp @@ -0,0 +1,88 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) +*/ + +/// \file none_of.hpp +/// \brief Test ranges to see if no elements match a value or predicate. +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_NONE_OF_HPP +#define BOOST_ALGORITHM_NONE_OF_HPP + +#include // for std::none_of, if available +#include +#include + +namespace boost { namespace algorithm { + +// Use the C++11 versions of the none_of if it is available +#if __cplusplus >= 201103L +using std::none_of; // Section 25.2.3 +#else +/// \fn none_of ( InputIterator first, InputIterator last, Predicate p ) +/// \return true if none of the elements in [first, last) satisfy the predicate 'p' +/// \note returns true on an empty range +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p A predicate for testing the elements of the sequence +/// +template +bool none_of ( InputIterator first, InputIterator last, Predicate p ) +{ +for ( ; first != last; ++first ) + if ( p(*first)) + return false; + return true; +} +#endif + +/// \fn none_of ( const Range &r, Predicate p ) +/// \return true if none of the elements in the range satisfy the predicate 'p' +/// \note returns true on an empty range +/// +/// \param r The input range +/// \param p A predicate for testing the elements of the range +/// +template +bool none_of ( const Range &r, Predicate p ) +{ + return boost::algorithm::none_of (boost::begin (r), boost::end (r), p ); +} + +/// \fn none_of_equal ( InputIterator first, InputIterator last, const V &val ) +/// \return true if none of the elements in [first, last) are equal to 'val' +/// \note returns true on an empty range +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param val A value to compare against +/// +template +bool none_of_equal ( InputIterator first, InputIterator last, const V &val ) +{ + for ( ; first != last; ++first ) + if ( val == *first ) + return false; + return true; +} + +/// \fn none_of_equal ( const Range &r, const V &val ) +/// \return true if none of the elements in the range are equal to 'val' +/// \note returns true on an empty range +/// +/// \param r The input range +/// \param val A value to compare against +/// +template +bool none_of_equal ( const Range &r, const V & val ) +{ + return boost::algorithm::none_of_equal (boost::begin (r), boost::end (r), val); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_NONE_OF_HPP diff --git a/3party/boost/boost/algorithm/cxx11/one_of.hpp b/3party/boost/boost/algorithm/cxx11/one_of.hpp new file mode 100644 index 0000000000..b6e8c77194 --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/one_of.hpp @@ -0,0 +1,82 @@ +/* + Copyright (c) Marshall Clow 2008-2012. + + 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) +*/ + +/// \file one_of.hpp +/// \brief Test ranges to see if only one element matches a value or predicate. +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_ONE_OF_HPP +#define BOOST_ALGORITHM_ONE_OF_HPP + +#include // for std::find and std::find_if +#include + +#include +#include + +namespace boost { namespace algorithm { + +/// \fn one_of ( InputIterator first, InputIterator last, Predicate p ) +/// \return true if the predicate 'p' is true for exactly one item in [first, last). +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p A predicate for testing the elements of the sequence +/// +template +bool one_of ( InputIterator first, InputIterator last, Predicate p ) +{ + InputIterator i = std::find_if (first, last, p); + if (i == last) + return false; // Didn't occur at all + return boost::algorithm::none_of (++i, last, p); +} + +/// \fn one_of ( const Range &r, Predicate p ) +/// \return true if the predicate 'p' is true for exactly one item in the range. +/// +/// \param r The input range +/// \param p A predicate for testing the elements of the range +/// +template +bool one_of ( const Range &r, Predicate p ) +{ + return boost::algorithm::one_of ( boost::begin (r), boost::end (r), p ); +} + + +/// \fn one_of_equal ( InputIterator first, InputIterator last, const V &val ) +/// \return true if the value 'val' exists only once in [first, last). +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param val A value to compare against +/// +template +bool one_of_equal ( InputIterator first, InputIterator last, const V &val ) +{ + InputIterator i = std::find (first, last, val); // find first occurrence of 'val' + if (i == last) + return false; // Didn't occur at all + return boost::algorithm::none_of_equal (++i, last, val); +} + +/// \fn one_of_equal ( const Range &r, const V &val ) +/// \return true if the value 'val' exists only once in the range. +/// +/// \param r The input range +/// \param val A value to compare against +/// +template +bool one_of_equal ( const Range &r, const V &val ) +{ + return boost::algorithm::one_of_equal ( boost::begin (r), boost::end (r), val ); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_ALL_HPP diff --git a/3party/boost/boost/algorithm/cxx11/partition_copy.hpp b/3party/boost/boost/algorithm/cxx11/partition_copy.hpp new file mode 100644 index 0000000000..15c4dd68ab --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/partition_copy.hpp @@ -0,0 +1,78 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) +*/ + +/// \file partition_copy.hpp +/// \brief Copy a subset of a sequence to a new sequence +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_PARTITION_COPY_HPP +#define BOOST_ALGORITHM_PARTITION_COPY_HPP + +#include // for std::partition_copy, if available +#include // for make_pair + +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of partition_copy if it is available +using std::partition_copy; // Section 25.3.13 +#else +/// \fn partition_copy ( InputIterator first, InputIterator last, +/// OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p ) +/// \brief Copies the elements that satisfy the predicate p from the range [first, last) +/// to the range beginning at d_first_true, and +/// copies the elements that do not satisfy p to the range beginning at d_first_false. +/// +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param out_true An output iterator to write the elements that satisfy the predicate into +/// \param out_false An output iterator to write the elements that do not satisfy the predicate into +/// \param p A predicate for dividing the elements of the input sequence. +/// +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +std::pair +partition_copy ( InputIterator first, InputIterator last, + OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p ) +{ + for ( ; first != last; ++first ) + if ( p (*first)) + *out_true++ = *first; + else + *out_false++ = *first; + return std::pair ( out_true, out_false ); +} +#endif + +/// \fn partition_copy ( const Range &r, +/// OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p ) +/// +/// \param r The input range +/// \param out_true An output iterator to write the elements that satisfy the predicate into +/// \param out_false An output iterator to write the elements that do not satisfy the predicate into +/// \param p A predicate for dividing the elements of the input sequence. +/// +template +std::pair +partition_copy ( const Range &r, OutputIterator1 out_true, OutputIterator2 out_false, + UnaryPredicate p ) +{ + return boost::algorithm::partition_copy + (boost::begin(r), boost::end(r), out_true, out_false, p ); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_PARTITION_COPY_HPP diff --git a/3party/boost/boost/algorithm/cxx11/partition_point.hpp b/3party/boost/boost/algorithm/cxx11/partition_point.hpp new file mode 100644 index 0000000000..36d8384b57 --- /dev/null +++ b/3party/boost/boost/algorithm/cxx11/partition_point.hpp @@ -0,0 +1,72 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) +*/ + +/// \file partition_point.hpp +/// \brief Find the partition point in a sequence +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_PARTITION_POINT_HPP +#define BOOST_ALGORITHM_PARTITION_POINT_HPP + +#include // for std::partition_point, if available + +#include +#include + +namespace boost { namespace algorithm { + +#if __cplusplus >= 201103L +// Use the C++11 versions of partition_point if it is available +using std::partition_point; // Section 25.3.13 +#else +/// \fn partition_point ( ForwardIterator first, ForwardIterator last, Predicate p ) +/// \brief Given a partitioned range, returns the partition point, i.e, the first element +/// that does not satisfy p +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param p The predicate to test the values with +/// \note This function is part of the C++2011 standard library. +/// We will use the standard one if it is available, +/// otherwise we have our own implementation. +template +ForwardIterator partition_point ( ForwardIterator first, ForwardIterator last, Predicate p ) +{ + std::size_t dist = std::distance ( first, last ); + while ( first != last ) { + std::size_t d2 = dist / 2; + ForwardIterator ret_val = first; + std::advance (ret_val, d2); + if (p (*ret_val)) { + first = ++ret_val; + dist -= d2 + 1; + } + else { + last = ret_val; + dist = d2; + } + } + return first; +} +#endif + +/// \fn partition_point ( Range &r, Predicate p ) +/// \brief Given a partitioned range, returns the partition point +/// +/// \param r The input range +/// \param p The predicate to test the values with +/// +template +typename boost::range_iterator partition_point ( Range &r, Predicate p ) +{ + return boost::algorithm::partition_point (boost::begin(r), boost::end(r), p); +} + + +}} + +#endif // BOOST_ALGORITHM_PARTITION_POINT_HPP diff --git a/3party/boost/boost/algorithm/hex.hpp b/3party/boost/boost/algorithm/hex.hpp new file mode 100644 index 0000000000..3f3c0c694b --- /dev/null +++ b/3party/boost/boost/algorithm/hex.hpp @@ -0,0 +1,265 @@ +/* + Copyright (c) Marshall Clow 2011-2012. + + 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) + + Thanks to Nevin for his comments/help. +*/ + +/* + General problem - turn a sequence of integral types into a sequence of hexadecimal characters. + - and back. + +TO DO: + 1. these should really only work on integral types. (see the >> and << operations) + -- this is done, I think. + 2. The 'value_type_or_char' struct is really a hack. + -- but it's a better hack now that it works with back_insert_iterators +*/ + +/// \file hex.hpp +/// \brief Convert sequence of integral types into a sequence of hexadecimal +/// characters and back. Based on the MySQL functions HEX and UNHEX +/// \author Marshall Clow + +#ifndef BOOST_ALGORITHM_HEXHPP +#define BOOST_ALGORITHM_HEXHPP + +#include // for std::iterator_traits +#include + +#include +#include +#include + +#include +#include + + +namespace boost { namespace algorithm { + +/*! + \struct hex_decode_error + \brief Base exception class for all hex decoding errors + + \struct non_hex_input + \brief Thrown when a non-hex value (0-9, A-F) encountered when decoding. + Contains the offending character + + \struct not_enough_input + \brief Thrown when the input sequence unexpectedly ends + +*/ +struct hex_decode_error : virtual boost::exception, virtual std::exception {}; +struct not_enough_input : virtual hex_decode_error {}; +struct non_hex_input : virtual hex_decode_error {}; +typedef boost::error_info bad_char; + +namespace detail { +/// \cond DOXYGEN_HIDE + + template + OutputIterator encode_one ( T val, OutputIterator out ) { + const std::size_t num_hex_digits = 2 * sizeof ( T ); + char res [ num_hex_digits ]; + char *p = res + num_hex_digits; + for ( std::size_t i = 0; i < num_hex_digits; ++i, val >>= 4 ) + *--p = "0123456789ABCDEF" [ val & 0x0F ]; + return std::copy ( res, res + num_hex_digits, out ); + } + + unsigned hex_char_to_int ( char c ) { + if ( c >= '0' && c <= '9' ) return c - '0'; + if ( c >= 'A' && c <= 'F' ) return c - 'A' + 10; + if ( c >= 'a' && c <= 'f' ) return c - 'a' + 10; + BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c)); + return 0; // keep dumb compilers happy + } + + +// My own iterator_traits class. +// It is here so that I can "reach inside" some kinds of output iterators +// and get the type to write. + template + struct hex_iterator_traits { + typedef typename std::iterator_traits::value_type value_type; + }; + + template + struct hex_iterator_traits< std::back_insert_iterator > { + typedef typename Container::value_type value_type; + }; + + template + struct hex_iterator_traits< std::front_insert_iterator > { + typedef typename Container::value_type value_type; + }; + + template + struct hex_iterator_traits< std::insert_iterator > { + typedef typename Container::value_type value_type; + }; + +// ostream_iterators have three template parameters. +// The first one is the output type, the second one is the character type of +// the underlying stream, the third is the character traits. +// We only care about the first one. + template + struct hex_iterator_traits< std::ostream_iterator > { + typedef T value_type; + }; + + template + bool iter_end ( Iterator current, Iterator last ) { return current == last; } + + template + bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '\0'; } + +// What can we assume here about the inputs? +// is std::iterator_traits::value_type always 'char' ? +// Could it be wchar_t, say? Does it matter? +// We are assuming ASCII for the values - but what about the storage? + template + typename boost::enable_if::value_type>, OutputIterator>::type + decode_one ( InputIterator &first, InputIterator last, OutputIterator out, EndPred pred ) { + typedef typename hex_iterator_traits::value_type T; + T res (0); + + // Need to make sure that we get can read that many chars here. + for ( std::size_t i = 0; i < 2 * sizeof ( T ); ++i, ++first ) { + if ( pred ( first, last )) + BOOST_THROW_EXCEPTION (not_enough_input ()); + res = ( 16 * res ) + hex_char_to_int (static_cast (*first)); + } + + *out = res; + return ++out; + } +/// \endcond + } + + +/// \fn hex ( InputIterator first, InputIterator last, OutputIterator out ) +/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters. +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param out An output iterator to the results into +/// \return The updated output iterator +/// \note Based on the MySQL function of the same name +template +typename boost::enable_if::value_type>, OutputIterator>::type +hex ( InputIterator first, InputIterator last, OutputIterator out ) { + for ( ; first != last; ++first ) + out = detail::encode_one ( *first, out ); + return out; + } + + +/// \fn hex ( const T *ptr, OutputIterator out ) +/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters. +/// +/// \param ptr A pointer to a 0-terminated sequence of data. +/// \param out An output iterator to the results into +/// \return The updated output iterator +/// \note Based on the MySQL function of the same name +template +typename boost::enable_if, OutputIterator>::type +hex ( const T *ptr, OutputIterator out ) { + while ( *ptr ) + out = detail::encode_one ( *ptr++, out ); + return out; + } + +/// \fn hex ( const Range &r, OutputIterator out ) +/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters. +/// +/// \param r The input range +/// \param out An output iterator to the results into +/// \return The updated output iterator +/// \note Based on the MySQL function of the same name +template +typename boost::enable_if::value_type>, OutputIterator>::type +hex ( const Range &r, OutputIterator out ) { + return hex (boost::begin(r), boost::end(r), out); +} + + +/// \fn unhex ( InputIterator first, InputIterator last, OutputIterator out ) +/// \brief Converts a sequence of hexadecimal characters into a sequence of integers. +/// +/// \param first The start of the input sequence +/// \param last One past the end of the input sequence +/// \param out An output iterator to the results into +/// \return The updated output iterator +/// \note Based on the MySQL function of the same name +template +OutputIterator unhex ( InputIterator first, InputIterator last, OutputIterator out ) { + while ( first != last ) + out = detail::decode_one ( first, last, out, detail::iter_end ); + return out; + } + + +/// \fn unhex ( const T *ptr, OutputIterator out ) +/// \brief Converts a sequence of hexadecimal characters into a sequence of integers. +/// +/// \param ptr A pointer to a null-terminated input sequence. +/// \param out An output iterator to the results into +/// \return The updated output iterator +/// \note Based on the MySQL function of the same name +template +OutputIterator unhex ( const T *ptr, OutputIterator out ) { + typedef typename detail::hex_iterator_traits::value_type OutputType; +// If we run into the terminator while decoding, we will throw a +// malformed input exception. It would be nicer to throw a 'Not enough input' +// exception - but how much extra work would that require? + while ( *ptr ) + out = detail::decode_one ( ptr, (const T *) NULL, out, detail::ptr_end ); + return out; + } + + +/// \fn OutputIterator unhex ( const Range &r, OutputIterator out ) +/// \brief Converts a sequence of hexadecimal characters into a sequence of integers. +/// +/// \param r The input range +/// \param out An output iterator to the results into +/// \return The updated output iterator +/// \note Based on the MySQL function of the same name +template +OutputIterator unhex ( const Range &r, OutputIterator out ) { + return unhex (boost::begin(r), boost::end(r), out); + } + + +/// \fn String hex ( const String &input ) +/// \brief Converts a sequence of integral types into a hexadecimal sequence of characters. +/// +/// \param input A container to be converted +/// \return A container with the encoded text +template +String hex ( const String &input ) { + String output; + output.reserve (input.size () * (2 * sizeof (typename String::value_type))); + (void) hex (input, std::back_inserter (output)); + return output; + } + +/// \fn String unhex ( const String &input ) +/// \brief Converts a sequence of hexadecimal characters into a sequence of characters. +/// +/// \param input A container to be converted +/// \return A container with the decoded text +template +String unhex ( const String &input ) { + String output; + output.reserve (input.size () / (2 * sizeof (typename String::value_type))); + (void) unhex (input, std::back_inserter (output)); + return output; + } + +}} + +#endif // BOOST_ALGORITHM_HEXHPP diff --git a/3party/boost/boost/algorithm/searching/boyer_moore.hpp b/3party/boost/boost/algorithm/searching/boyer_moore.hpp new file mode 100644 index 0000000000..958f0b8d0c --- /dev/null +++ b/3party/boost/boost/algorithm/searching/boyer_moore.hpp @@ -0,0 +1,268 @@ +/* + Copyright (c) Marshall Clow 2010-2012. + + 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) + + For more information, see http://www.boost.org +*/ + +#ifndef BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP +#define BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP + +#include // for std::iterator_traits + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +namespace boost { namespace algorithm { + +/* + A templated version of the boyer-moore searching algorithm. + +References: + http://www.cs.utexas.edu/users/moore/best-ideas/string-searching/ + http://www.cs.utexas.edu/~moore/publications/fstrpos.pdf + +Explanations: boostinspect:noascii (test tool complains) + http://en.wikipedia.org/wiki/Boyer–Moore_string_search_algorithm + http://www.movsd.com/bm.htm + http://www.cs.ucdavis.edu/~gusfield/cs224f09/bnotes.pdf + +The Boyer-Moore search algorithm uses two tables, a "bad character" table +to tell how far to skip ahead when it hits a character that is not in the pattern, +and a "good character" table to tell how far to skip ahead when it hits a +mismatch on a character that _is_ in the pattern. + +Requirements: + * Random access iterators + * The two iterator types (patIter and corpusIter) must + "point to" the same underlying type and be comparable. + * Additional requirements may be imposed but the skip table, such as: + ** Numeric type (array-based skip table) + ** Hashable type (map-based skip table) +*/ + + template > + class boyer_moore { + typedef typename std::iterator_traits::difference_type difference_type; + public: + boyer_moore ( patIter first, patIter last ) + : pat_first ( first ), pat_last ( last ), + k_pattern_length ( std::distance ( pat_first, pat_last )), + skip_ ( k_pattern_length, -1 ), + suffix_ ( k_pattern_length + 1 ) + { + this->build_skip_table ( first, last ); + this->build_suffix_table ( first, last ); + } + + ~boyer_moore () {} + + /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last ) + /// \brief Searches the corpus for the pattern that was passed into the constructor + /// + /// \param corpus_first The start of the data to search (Random Access Iterator) + /// \param corpus_last One past the end of the data to search + /// + template + corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { + BOOST_STATIC_ASSERT (( boost::is_same< + typename std::iterator_traits::value_type, + typename std::iterator_traits::value_type>::value )); + + if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it! + if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start + + const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last ); + // If the pattern is larger than the corpus, we can't find it! + if ( k_corpus_length < k_pattern_length ) + return corpus_last; + + // Do the search + return this->do_search ( corpus_first, corpus_last ); + } + + template + typename boost::range_iterator::type operator () ( Range &r ) const { + return (*this) (boost::begin(r), boost::end(r)); + } + + private: +/// \cond DOXYGEN_HIDE + patIter pat_first, pat_last; + const difference_type k_pattern_length; + typename traits::skip_table_t skip_; + std::vector suffix_; + + /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p ) + /// \brief Searches the corpus for the pattern that was passed into the constructor + /// + /// \param corpus_first The start of the data to search (Random Access Iterator) + /// \param corpus_last One past the end of the data to search + /// \param p A predicate used for the search comparisons. + /// + template + corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const { + /* ---- Do the matching ---- */ + corpusIter curPos = corpus_first; + const corpusIter lastPos = corpus_last - k_pattern_length; + difference_type j, k, m; + + while ( curPos <= lastPos ) { + /* while ( std::distance ( curPos, corpus_last ) >= k_pattern_length ) { */ + // Do we match right where we are? + j = k_pattern_length; + while ( pat_first [j-1] == curPos [j-1] ) { + j--; + // We matched - we're done! + if ( j == 0 ) + return curPos; + } + + // Since we didn't match, figure out how far to skip forward + k = skip_ [ curPos [ j - 1 ]]; + m = j - k - 1; + if ( k < j && m > suffix_ [ j ] ) + curPos += m; + else + curPos += suffix_ [ j ]; + } + + return corpus_last; // We didn't find anything + } + + + void build_skip_table ( patIter first, patIter last ) { + for ( std::size_t i = 0; first != last; ++first, ++i ) + skip_.insert ( *first, i ); + } + + + template + void compute_bm_prefix ( Iter pat_first, Iter pat_last, Container &prefix ) { + const std::size_t count = std::distance ( pat_first, pat_last ); + BOOST_ASSERT ( count > 0 ); + BOOST_ASSERT ( prefix.size () == count ); + + prefix[0] = 0; + std::size_t k = 0; + for ( std::size_t i = 1; i < count; ++i ) { + BOOST_ASSERT ( k < count ); + while ( k > 0 && ( pat_first[k] != pat_first[i] )) { + BOOST_ASSERT ( k < count ); + k = prefix [ k - 1 ]; + } + + if ( pat_first[k] == pat_first[i] ) + k++; + prefix [ i ] = k; + } + } + + void build_suffix_table ( patIter pat_first, patIter pat_last ) { + const std::size_t count = (std::size_t) std::distance ( pat_first, pat_last ); + + if ( count > 0 ) { // empty pattern + std::vector::value_type> reversed(count); + (void) std::reverse_copy ( pat_first, pat_last, reversed.begin ()); + + std::vector prefix (count); + compute_bm_prefix ( pat_first, pat_last, prefix ); + + std::vector prefix_reversed (count); + compute_bm_prefix ( reversed.begin (), reversed.end (), prefix_reversed ); + + for ( std::size_t i = 0; i <= count; i++ ) + suffix_[i] = count - prefix [count-1]; + + for ( std::size_t i = 0; i < count; i++ ) { + const std::size_t j = count - prefix_reversed[i]; + const difference_type k = i - prefix_reversed[i] + 1; + + if (suffix_[j] > k) + suffix_[j] = k; + } + } + } +/// \endcond + }; + + +/* Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters + Use a bit of TMP to disambiguate the 3-argument templates */ + +/// \fn boyer_moore_search ( corpusIter corpus_first, corpusIter corpus_last, +/// patIter pat_first, patIter pat_last ) +/// \brief Searches the corpus for the pattern. +/// +/// \param corpus_first The start of the data to search (Random Access Iterator) +/// \param corpus_last One past the end of the data to search +/// \param pat_first The start of the pattern to search for (Random Access Iterator) +/// \param pat_last One past the end of the data to search for +/// + template + corpusIter boyer_moore_search ( + corpusIter corpus_first, corpusIter corpus_last, + patIter pat_first, patIter pat_last ) + { + boyer_moore bm ( pat_first, pat_last ); + return bm ( corpus_first, corpus_last ); + } + + template + corpusIter boyer_moore_search ( + corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern ) + { + typedef typename boost::range_iterator::type pattern_iterator; + boyer_moore bm ( boost::begin(pattern), boost::end (pattern)); + return bm ( corpus_first, corpus_last ); + } + + template + typename boost::lazy_disable_if_c< + boost::is_same::value, typename boost::range_iterator > + ::type + boyer_moore_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last ) + { + boyer_moore bm ( pat_first, pat_last ); + return bm (boost::begin (corpus), boost::end (corpus)); + } + + template + typename boost::range_iterator::type + boyer_moore_search ( CorpusRange &corpus, const PatternRange &pattern ) + { + typedef typename boost::range_iterator::type pattern_iterator; + boyer_moore bm ( boost::begin(pattern), boost::end (pattern)); + return bm (boost::begin (corpus), boost::end (corpus)); + } + + + // Creator functions -- take a pattern range, return an object + template + boost::algorithm::boyer_moore::type> + make_boyer_moore ( const Range &r ) { + return boost::algorithm::boyer_moore + ::type> (boost::begin(r), boost::end(r)); + } + + template + boost::algorithm::boyer_moore::type> + make_boyer_moore ( Range &r ) { + return boost::algorithm::boyer_moore + ::type> (boost::begin(r), boost::end(r)); + } + +}} + +#endif // BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP diff --git a/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp b/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp new file mode 100644 index 0000000000..5e59cf3220 --- /dev/null +++ b/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp @@ -0,0 +1,194 @@ +/* + Copyright (c) Marshall Clow 2010-2012. + + 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) + + For more information, see http://www.boost.org +*/ + +#ifndef BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP +#define BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP + +#include // for std::iterator_traits + +#include +#include +#include + +#include +#include + +// #define BOOST_ALGORITHM_BOYER_MOORE_HORSPOOL_DEBUG_HPP + +namespace boost { namespace algorithm { + +/* + A templated version of the boyer-moore-horspool searching algorithm. + + Requirements: + * Random access iterators + * The two iterator types (patIter and corpusIter) must + "point to" the same underlying type. + * Additional requirements may be imposed buy the skip table, such as: + ** Numeric type (array-based skip table) + ** Hashable type (map-based skip table) + +http://www-igm.univ-mlv.fr/%7Elecroq/string/node18.html + +*/ + + template > + class boyer_moore_horspool { + typedef typename std::iterator_traits::difference_type difference_type; + public: + boyer_moore_horspool ( patIter first, patIter last ) + : pat_first ( first ), pat_last ( last ), + k_pattern_length ( std::distance ( pat_first, pat_last )), + skip_ ( k_pattern_length, k_pattern_length ) { + + // Build the skip table + std::size_t i = 0; + if ( first != last ) // empty pattern? + for ( patIter iter = first; iter != last-1; ++iter, ++i ) + skip_.insert ( *iter, k_pattern_length - 1 - i ); +#ifdef BOOST_ALGORITHM_BOYER_MOORE_HORSPOOL_DEBUG_HPP + skip_.PrintSkipTable (); +#endif + } + + ~boyer_moore_horspool () {} + + /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p ) + /// \brief Searches the corpus for the pattern that was passed into the constructor + /// + /// \param corpus_first The start of the data to search (Random Access Iterator) + /// \param corpus_last One past the end of the data to search + /// \param p A predicate used for the search comparisons. + /// + template + corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { + BOOST_STATIC_ASSERT (( boost::is_same< + typename std::iterator_traits::value_type, + typename std::iterator_traits::value_type>::value )); + + if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it! + if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start + + const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last ); + // If the pattern is larger than the corpus, we can't find it! + if ( k_corpus_length < k_pattern_length ) + return corpus_last; + + // Do the search + return this->do_search ( corpus_first, corpus_last ); + } + + template + typename boost::range_iterator::type operator () ( Range &r ) const { + return (*this) (boost::begin(r), boost::end(r)); + } + + private: +/// \cond DOXYGEN_HIDE + patIter pat_first, pat_last; + const difference_type k_pattern_length; + typename traits::skip_table_t skip_; + + /// \fn do_search ( corpusIter corpus_first, corpusIter corpus_last ) + /// \brief Searches the corpus for the pattern that was passed into the constructor + /// + /// \param corpus_first The start of the data to search (Random Access Iterator) + /// \param corpus_last One past the end of the data to search + /// \param k_corpus_length The length of the corpus to search + /// + template + corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last ) const { + corpusIter curPos = corpus_first; + const corpusIter lastPos = corpus_last - k_pattern_length; + while ( curPos <= lastPos ) { + // Do we match right where we are? + std::size_t j = k_pattern_length - 1; + while ( pat_first [j] == curPos [j] ) { + // We matched - we're done! + if ( j == 0 ) + return curPos; + j--; + } + + curPos += skip_ [ curPos [ k_pattern_length - 1 ]]; + } + + return corpus_last; + } +// \endcond + }; + +/* Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters + Use a bit of TMP to disambiguate the 3-argument templates */ + +/// \fn boyer_moore_horspool_search ( corpusIter corpus_first, corpusIter corpus_last, +/// patIter pat_first, patIter pat_last ) +/// \brief Searches the corpus for the pattern. +/// +/// \param corpus_first The start of the data to search (Random Access Iterator) +/// \param corpus_last One past the end of the data to search +/// \param pat_first The start of the pattern to search for (Random Access Iterator) +/// \param pat_last One past the end of the data to search for +/// + template + corpusIter boyer_moore_horspool_search ( + corpusIter corpus_first, corpusIter corpus_last, + patIter pat_first, patIter pat_last ) + { + boyer_moore_horspool bmh ( pat_first, pat_last ); + return bmh ( corpus_first, corpus_last ); + } + + template + corpusIter boyer_moore_horspool_search ( + corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern ) + { + typedef typename boost::range_iterator::type pattern_iterator; + boyer_moore_horspool bmh ( boost::begin(pattern), boost::end (pattern)); + return bmh ( corpus_first, corpus_last ); + } + + template + typename boost::lazy_disable_if_c< + boost::is_same::value, typename boost::range_iterator > + ::type + boyer_moore_horspool_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last ) + { + boyer_moore_horspool bmh ( pat_first, pat_last ); + return bm (boost::begin (corpus), boost::end (corpus)); + } + + template + typename boost::range_iterator::type + boyer_moore_horspool_search ( CorpusRange &corpus, const PatternRange &pattern ) + { + typedef typename boost::range_iterator::type pattern_iterator; + boyer_moore_horspool bmh ( boost::begin(pattern), boost::end (pattern)); + return bmh (boost::begin (corpus), boost::end (corpus)); + } + + + // Creator functions -- take a pattern range, return an object + template + boost::algorithm::boyer_moore_horspool::type> + make_boyer_moore_horspool ( const Range &r ) { + return boost::algorithm::boyer_moore_horspool + ::type> (boost::begin(r), boost::end(r)); + } + + template + boost::algorithm::boyer_moore_horspool::type> + make_boyer_moore_horspool ( Range &r ) { + return boost::algorithm::boyer_moore_horspool + ::type> (boost::begin(r), boost::end(r)); + } + +}} + +#endif // BOOST_ALGORITHM_BOYER_MOORE_HORSPOOOL_SEARCH_HPP diff --git a/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp b/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp new file mode 100644 index 0000000000..ea150c3021 --- /dev/null +++ b/3party/boost/boost/algorithm/searching/detail/bm_traits.hpp @@ -0,0 +1,105 @@ +/* + Copyright (c) Marshall Clow 2010-2012. + + 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) + + For more information, see http://www.boost.org +*/ + +#ifndef BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP +#define BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP + +#include // for CHAR_BIT +#include +#include // for std::iterator_traits + +#include +#include +#include +#include + +#include +#include + +#include + +namespace boost { namespace algorithm { namespace detail { + +// +// Default implementations of the skip tables for B-M and B-M-H +// + template class skip_table; + +// General case for data searching other than bytes; use a map + template + class skip_table { + private: + typedef std::tr1::unordered_map skip_map; + const value_type k_default_value; + skip_map skip_; + + public: + skip_table ( std::size_t patSize, value_type default_value ) + : k_default_value ( default_value ), skip_ ( patSize ) {} + + void insert ( key_type key, value_type val ) { + skip_ [ key ] = val; // Would skip_.insert (val) be better here? + } + + value_type operator [] ( key_type key ) const { + typename skip_map::const_iterator it = skip_.find ( key ); + return it == skip_.end () ? k_default_value : it->second; + } + + void PrintSkipTable () const { + std::cout << "BM(H) Skip Table :" << std::endl; + for ( typename skip_map::const_iterator it = skip_.begin (); it != skip_.end (); ++it ) + if ( it->second != k_default_value ) + std::cout << " " << it->first << ": " << it->second << std::endl; + std::cout << std::endl; + } + }; + + +// Special case small numeric values; use an array + template + class skip_table { + private: + typedef typename boost::make_unsigned::type unsigned_key_type; + typedef boost::array skip_map; + skip_map skip_; + const value_type k_default_value; + public: + skip_table ( std::size_t patSize, value_type default_value ) : k_default_value ( default_value ) { + std::fill_n ( skip_.begin(), skip_.size(), default_value ); + } + + void insert ( key_type key, value_type val ) { + skip_ [ static_cast ( key ) ] = val; + } + + value_type operator [] ( key_type key ) const { + return skip_ [ static_cast ( key ) ]; + } + + void PrintSkipTable () const { + std::cout << "BM(H) Skip Table :" << std::endl; + for ( typename skip_map::const_iterator it = skip_.begin (); it != skip_.end (); ++it ) + if ( *it != k_default_value ) + std::cout << " " << std::distance (skip_.begin (), it) << ": " << *it << std::endl; + std::cout << std::endl; + } + }; + + template + struct BM_traits { + typedef typename std::iterator_traits::difference_type value_type; + typedef typename std::iterator_traits::value_type key_type; + typedef boost::algorithm::detail::skip_table::value && (sizeof(key_type)==1)> skip_table_t; + }; + +}}} // namespaces + +#endif // BOOST_ALGORITHM_SEARCH_DETAIL_BM_TRAITS_HPP diff --git a/3party/boost/boost/algorithm/searching/detail/debugging.hpp b/3party/boost/boost/algorithm/searching/detail/debugging.hpp new file mode 100644 index 0000000000..3996e0f503 --- /dev/null +++ b/3party/boost/boost/algorithm/searching/detail/debugging.hpp @@ -0,0 +1,30 @@ +/* + Copyright (c) Marshall Clow 2010-2012. + + 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) + + For more information, see http://www.boost.org +*/ + +#ifndef BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP +#define BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP + +#include +/// \cond DOXYGEN_HIDE + +namespace boost { namespace algorithm { namespace detail { + +// Debugging support + template + void PrintTable ( Iter first, Iter last ) { + std::cout << std::distance ( first, last ) << ": { "; + for ( Iter iter = first; iter != last; ++iter ) + std::cout << *iter << " "; + std::cout << "}" << std::endl; + } + +}}} +/// \endcond + +#endif // BOOST_ALGORITHM_SEARCH_DETAIL_DEBUG_HPP diff --git a/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp b/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp new file mode 100644 index 0000000000..cc83185c51 --- /dev/null +++ b/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp @@ -0,0 +1,253 @@ +/* + Copyright (c) Marshall Clow 2010-2012. + + 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) + + For more information, see http://www.boost.org +*/ + +#ifndef BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP +#define BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP + +#include +#include // for std::iterator_traits + +#include +#include +#include + +#include + +// #define BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_DEBUG + +namespace boost { namespace algorithm { + +// #define NEW_KMP + +/* + A templated version of the Knuth-Morris-Pratt searching algorithm. + + Requirements: + * Random-access iterators + * The two iterator types (I1 and I2) must "point to" the same underlying type. + + http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm + http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm +*/ + + template + class knuth_morris_pratt { + typedef typename std::iterator_traits::difference_type difference_type; + public: + knuth_morris_pratt ( patIter first, patIter last ) + : pat_first ( first ), pat_last ( last ), + k_pattern_length ( std::distance ( pat_first, pat_last )), + skip_ ( k_pattern_length + 1 ) { +#ifdef NEW_KMP + preKmp ( pat_first, pat_last ); +#else + init_skip_table ( pat_first, pat_last ); +#endif +#ifdef BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_DEBUG + detail::PrintTable ( skip_.begin (), skip_.end ()); +#endif + } + + ~knuth_morris_pratt () {} + + /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p ) + /// \brief Searches the corpus for the pattern that was passed into the constructor + /// + /// \param corpus_first The start of the data to search (Random Access Iterator) + /// \param corpus_last One past the end of the data to search + /// \param p A predicate used for the search comparisons. + /// + template + corpusIter operator () ( corpusIter corpus_first, corpusIter corpus_last ) const { + BOOST_STATIC_ASSERT (( boost::is_same< + typename std::iterator_traits::value_type, + typename std::iterator_traits::value_type>::value )); + if ( corpus_first == corpus_last ) return corpus_last; // if nothing to search, we didn't find it! + if ( pat_first == pat_last ) return corpus_first; // empty pattern matches at start + + const difference_type k_corpus_length = std::distance ( corpus_first, corpus_last ); + // If the pattern is larger than the corpus, we can't find it! + if ( k_corpus_length < k_pattern_length ) + return corpus_last; + + return do_search ( corpus_first, corpus_last, k_corpus_length ); + } + + template + typename boost::range_iterator::type operator () ( Range &r ) const { + return (*this) (boost::begin(r), boost::end(r)); + } + + private: +/// \cond DOXYGEN_HIDE + patIter pat_first, pat_last; + const difference_type k_pattern_length; + std::vector skip_; + + /// \fn operator ( corpusIter corpus_first, corpusIter corpus_last, Pred p ) + /// \brief Searches the corpus for the pattern that was passed into the constructor + /// + /// \param corpus_first The start of the data to search (Random Access Iterator) + /// \param corpus_last One past the end of the data to search + /// \param p A predicate used for the search comparisons. + /// + template + corpusIter do_search ( corpusIter corpus_first, corpusIter corpus_last, + difference_type k_corpus_length ) const { + difference_type match_start = 0; // position in the corpus that we're matching + +#ifdef NEW_KMP + int patternIdx = 0; + while ( match_start < k_corpus_length ) { + while ( patternIdx > -1 && pat_first[patternIdx] != corpus_first [match_start] ) + patternIdx = skip_ [patternIdx]; //<--- Shifting the pattern on mismatch + + patternIdx++; + match_start++; //<--- corpus is always increased by 1 + + if ( patternIdx >= (int) k_pattern_length ) + return corpus_first + match_start - patternIdx; + } + +#else +// At this point, we know: +// k_pattern_length <= k_corpus_length +// for all elements of skip, it holds -1 .. k_pattern_length +// +// In the loop, we have the following invariants +// idx is in the range 0 .. k_pattern_length +// match_start is in the range 0 .. k_corpus_length - k_pattern_length + 1 + + const difference_type last_match = k_corpus_length - k_pattern_length; + difference_type idx = 0; // position in the pattern we're comparing + + while ( match_start <= last_match ) { + while ( pat_first [ idx ] == corpus_first [ match_start + idx ] ) { + if ( ++idx == k_pattern_length ) + return corpus_first + match_start; + } + // Figure out where to start searching again + // assert ( idx - skip_ [ idx ] > 0 ); // we're always moving forward + match_start += idx - skip_ [ idx ]; + idx = skip_ [ idx ] >= 0 ? skip_ [ idx ] : 0; + // assert ( idx >= 0 && idx < k_pattern_length ); + } +#endif + + // We didn't find anything + return corpus_last; + } + + + void preKmp ( patIter first, patIter last ) { + const /*std::size_t*/ int count = std::distance ( first, last ); + + int i, j; + + i = 0; + j = skip_[0] = -1; + while (i < count) { + while (j > -1 && first[i] != first[j]) + j = skip_[j]; + i++; + j++; + if (first[i] == first[j]) + skip_[i] = skip_[j]; + else + skip_[i] = j; + } + } + + + void init_skip_table ( patIter first, patIter last ) { + const difference_type count = std::distance ( first, last ); + + int j; + skip_ [ 0 ] = -1; + for ( int i = 1; i <= count; ++i ) { + j = skip_ [ i - 1 ]; + while ( j >= 0 ) { + if ( first [ j ] == first [ i - 1 ] ) + break; + j = skip_ [ j ]; + } + skip_ [ i ] = j + 1; + } + } +// \endcond + }; + + +/* Two ranges as inputs gives us four possibilities; with 2,3,3,4 parameters + Use a bit of TMP to disambiguate the 3-argument templates */ + +/// \fn knuth_morris_pratt_search ( corpusIter corpus_first, corpusIter corpus_last, +/// patIter pat_first, patIter pat_last ) +/// \brief Searches the corpus for the pattern. +/// +/// \param corpus_first The start of the data to search (Random Access Iterator) +/// \param corpus_last One past the end of the data to search +/// \param pat_first The start of the pattern to search for (Random Access Iterator) +/// \param pat_last One past the end of the data to search for +/// + template + corpusIter knuth_morris_pratt_search ( + corpusIter corpus_first, corpusIter corpus_last, + patIter pat_first, patIter pat_last ) + { + knuth_morris_pratt kmp ( pat_first, pat_last ); + return kmp ( corpus_first, corpus_last ); + } + + template + corpusIter knuth_morris_pratt_search ( + corpusIter corpus_first, corpusIter corpus_last, const PatternRange &pattern ) + { + typedef typename boost::range_iterator::type pattern_iterator; + knuth_morris_pratt kmp ( boost::begin(pattern), boost::end (pattern)); + return kmp ( corpus_first, corpus_last ); + } + + template + typename boost::lazy_disable_if_c< + boost::is_same::value, typename boost::range_iterator > + ::type + knuth_morris_pratt_search ( CorpusRange &corpus, patIter pat_first, patIter pat_last ) + { + knuth_morris_pratt kmp ( pat_first, pat_last ); + return kmp (boost::begin (corpus), boost::end (corpus)); + } + + template + typename boost::range_iterator::type + knuth_morris_pratt_search ( CorpusRange &corpus, const PatternRange &pattern ) + { + typedef typename boost::range_iterator::type pattern_iterator; + knuth_morris_pratt kmp ( boost::begin(pattern), boost::end (pattern)); + return kmp (boost::begin (corpus), boost::end (corpus)); + } + + + // Creator functions -- take a pattern range, return an object + template + boost::algorithm::knuth_morris_pratt::type> + make_knuth_morris_pratt ( const Range &r ) { + return boost::algorithm::knuth_morris_pratt + ::type> (boost::begin(r), boost::end(r)); + } + + template + boost::algorithm::knuth_morris_pratt::type> + make_knuth_morris_pratt ( Range &r ) { + return boost::algorithm::knuth_morris_pratt + ::type> (boost::begin(r), boost::end(r)); + } +}} + +#endif // BOOST_ALGORITHM_KNUTH_MORRIS_PRATT_SEARCH_HPP diff --git a/3party/boost/boost/algorithm/string/detail/case_conv.hpp b/3party/boost/boost/algorithm/string/detail/case_conv.hpp index 5b0064fd13..42621c74f0 100644 --- a/3party/boost/boost/algorithm/string/detail/case_conv.hpp +++ b/3party/boost/boost/algorithm/string/detail/case_conv.hpp @@ -15,6 +15,8 @@ #include #include +#include + namespace boost { namespace algorithm { namespace detail { @@ -37,7 +39,7 @@ namespace boost { CharT operator ()( CharT Ch ) const { #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL) - return std::tolower( Ch); + return std::tolower( static_cast::type> ( Ch )); #else return std::tolower( Ch, *m_Loc ); #endif @@ -57,7 +59,7 @@ namespace boost { CharT operator ()( CharT Ch ) const { #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL) - return std::toupper( Ch); + return std::toupper( static_cast::type> ( Ch )); #else return std::toupper( Ch, *m_Loc ); #endif diff --git a/3party/boost/boost/algorithm/string/detail/classification.hpp b/3party/boost/boost/algorithm/string/detail/classification.hpp index fb4395573e..704d9d20ff 100644 --- a/3party/boost/boost/algorithm/string/detail/classification.hpp +++ b/3party/boost/boost/algorithm/string/detail/classification.hpp @@ -126,7 +126,7 @@ namespace boost { } // Use fixed storage - ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); + ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); } // Destructor @@ -206,7 +206,7 @@ namespace boost { } // Copy the data - ::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); + ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size); return *this; } diff --git a/3party/boost/boost/algorithm/string/find.hpp b/3party/boost/boost/algorithm/string/find.hpp index 304646d090..cc99ca1c93 100644 --- a/3party/boost/boost/algorithm/string/find.hpp +++ b/3party/boost/boost/algorithm/string/find.hpp @@ -228,13 +228,13 @@ namespace boost { //! Find head algorithm /*! Get the head of the input. Head is a prefix of the string of the - given size. If the input is shorter then required, whole input if considered + given size. If the input is shorter then required, whole input is considered to be the head. \param Input An input string \param N Length of the head For N>=0, at most N characters are extracted. - For N<0, size(Input)-|N| characters are extracted. + For N<0, at most size(Input)-|N| characters are extracted. \return An \c iterator_range delimiting the match. Returned iterator is either \c Range1T::iterator or @@ -258,13 +258,13 @@ namespace boost { //! Find tail algorithm /*! Get the tail of the input. Tail is a suffix of the string of the - given size. If the input is shorter then required, whole input if considered + given size. If the input is shorter then required, whole input is considered to be the tail. \param Input An input string \param N Length of the tail. For N>=0, at most N characters are extracted. - For N<0, size(Input)-|N| characters are extracted. + For N<0, at most size(Input)-|N| characters are extracted. \return An \c iterator_range delimiting the match. Returned iterator is either \c RangeT::iterator or diff --git a/3party/boost/boost/algorithm/string/iter_find.hpp b/3party/boost/boost/algorithm/string/iter_find.hpp index 9e0245f1a7..e10652834b 100644 --- a/3party/boost/boost/algorithm/string/iter_find.hpp +++ b/3party/boost/boost/algorithm/string/iter_find.hpp @@ -60,7 +60,7 @@ namespace boost { a match). \param Input A container which will be searched. \param Finder A Finder object used for searching - \return A reference the result + \return A reference to the result \note Prior content of the result will be overwritten. */ @@ -122,7 +122,7 @@ namespace boost { Each match is used as a separator of segments. These segments are then returned in the result. - \param Result A 'container container' to container the result of search. + \param Result A 'container container' to contain the result of search. Both outer and inner container must have constructor taking a pair of iterators as an argument. Typical type of the result is @@ -131,7 +131,7 @@ namespace boost { a match). \param Input A container which will be searched. \param Finder A finder object used for searching - \return A reference the result + \return A reference to the result \note Prior content of the result will be overwritten. */ diff --git a/3party/boost/boost/archive/basic_archive.hpp b/3party/boost/boost/archive/basic_archive.hpp index d408485206..c5ac8808e5 100644 --- a/3party/boost/boost/archive/basic_archive.hpp +++ b/3party/boost/boost/archive/basic_archive.hpp @@ -150,7 +150,8 @@ private: base_type t; public: object_id_type(): t(0) {}; - explicit object_id_type(const unsigned int & t_) : t(t_){ + // note: presumes that size_t >= unsigned int. + explicit object_id_type(const std::size_t & t_) : t(t_){ BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } object_id_type(const object_id_type & t_) : diff --git a/3party/boost/boost/archive/detail/basic_serializer_map.hpp b/3party/boost/boost/archive/detail/basic_serializer_map.hpp index 19defcb5be..a991ea1dc1 100644 --- a/3party/boost/boost/archive/detail/basic_serializer_map.hpp +++ b/3party/boost/boost/archive/detail/basic_serializer_map.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include // must be the last header diff --git a/3party/boost/boost/archive/detail/iserializer.hpp b/3party/boost/boost/archive/detail/iserializer.hpp index 46033fddf2..53765af315 100644 --- a/3party/boost/boost/archive/detail/iserializer.hpp +++ b/3party/boost/boost/archive/detail/iserializer.hpp @@ -61,7 +61,7 @@ namespace std{ #define DONT_USE_HAS_NEW_OPERATOR ( \ defined(__BORLANDC__) \ - || defined(__IBMCPP__) \ + || BOOST_WORKAROUND(__IBMCPP__, < 1210) \ || defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) \ || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590) \ ) diff --git a/3party/boost/boost/archive/iterators/binary_from_base64.hpp b/3party/boost/boost/archive/iterators/binary_from_base64.hpp index 47e9d0b19b..60f23f3971 100644 --- a/3party/boost/boost/archive/iterators/binary_from_base64.hpp +++ b/3party/boost/boost/archive/iterators/binary_from_base64.hpp @@ -39,7 +39,7 @@ template struct to_6_bit { typedef CharType result_type; CharType operator()(CharType t) const{ - const char lookup_table[] = { + const signed char lookup_table[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, diff --git a/3party/boost/boost/archive/iterators/head_iterator.hpp b/3party/boost/boost/archive/iterators/head_iterator.hpp index 7d39a35da0..2fdd475e11 100644 --- a/3party/boost/boost/archive/iterators/head_iterator.hpp +++ b/3party/boost/boost/archive/iterators/head_iterator.hpp @@ -42,8 +42,8 @@ private: > super_t; typedef head_iterator this_t; - typedef BOOST_DEDUCED_TYPENAME super_t::value_type value_type; - typedef BOOST_DEDUCED_TYPENAME super_t::reference reference_type; + typedef super_t::value_type value_type; + typedef super_t::reference reference_type; reference_type dereference_impl(){ if(! m_end){ diff --git a/3party/boost/boost/archive/iterators/remove_whitespace.hpp b/3party/boost/boost/archive/iterators/remove_whitespace.hpp index a8e1092983..a01049faf0 100644 --- a/3party/boost/boost/archive/iterators/remove_whitespace.hpp +++ b/3party/boost/boost/archive/iterators/remove_whitespace.hpp @@ -24,6 +24,7 @@ #include #include +#include //#include //#if ! BOOST_WORKAROUND(BOOST_MSVC, <=1300) @@ -140,13 +141,19 @@ public: template class remove_whitespace : public filter_iterator< - remove_whitespace_predicate, + remove_whitespace_predicate< + BOOST_DEDUCED_TYPENAME boost::iterator_value::type + //BOOST_DEDUCED_TYPENAME Base::value_type + >, Base > { friend class boost::iterator_core_access; typedef filter_iterator< - remove_whitespace_predicate, + remove_whitespace_predicate< + BOOST_DEDUCED_TYPENAME boost::iterator_value::type + //BOOST_DEDUCED_TYPENAME Base::value_type + >, Base > super_t; public: diff --git a/3party/boost/boost/archive/shared_ptr_helper.hpp b/3party/boost/boost/archive/shared_ptr_helper.hpp index 0e5f4f26bc..39e6eb82c8 100644 --- a/3party/boost/boost/archive/shared_ptr_helper.hpp +++ b/3party/boost/boost/archive/shared_ptr_helper.hpp @@ -127,7 +127,7 @@ public: template struct non_polymorphic { static const boost::serialization::extended_type_info * - get_object_identifier(T & t){ + get_object_identifier(T &){ return & boost::serialization::singleton< BOOST_DEDUCED_TYPENAME boost::serialization::type_info_implementation< T >::type diff --git a/3party/boost/boost/archive/xml_wiarchive.hpp b/3party/boost/boost/archive/xml_wiarchive.hpp index 09552cef76..59ebbb5e7c 100644 --- a/3party/boost/boost/archive/xml_wiarchive.hpp +++ b/3party/boost/boost/archive/xml_wiarchive.hpp @@ -126,8 +126,7 @@ public: } // namespace boost #ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable : 4511 4512) +# pragma warning(pop) #endif #include // pops abi_suffix.hpp pragmas diff --git a/3party/boost/boost/array.hpp b/3party/boost/boost/array.hpp index ffb504bdbb..fa06fa9a5f 100644 --- a/3party/boost/boost/array.hpp +++ b/3party/boost/boost/array.hpp @@ -13,6 +13,7 @@ * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * + * 14 Apr 2012 - (mtc) Added support for boost::hash * 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility. * 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group. * See or Trac issue #3168 @@ -46,6 +47,7 @@ // Handles broken standard libraries better than #include #include +#include #include // FIXES for broken compilers @@ -118,13 +120,13 @@ namespace boost { // operator[] reference operator[](size_type i) { - BOOST_ASSERT( i < N && "out of range" ); + BOOST_ASSERT_MSG( i < N, "out of range" ); return elems[i]; } const_reference operator[](size_type i) const { - BOOST_ASSERT( i < N && "out of range" ); + BOOST_ASSERT_MSG( i < N, "out of range" ); return elems[i]; } @@ -427,6 +429,13 @@ namespace boost { } #endif + + template + std::size_t hash_value(const array& arr) + { + return boost::hash_range(arr.begin(), arr.end()); + } + } /* namespace boost */ diff --git a/3party/boost/boost/asio.hpp b/3party/boost/boost/asio.hpp index fdfd7fa7b7..8205c5509a 100644 --- a/3party/boost/boost/asio.hpp +++ b/3party/boost/boost/asio.hpp @@ -2,7 +2,7 @@ // asio.hpp // ~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -92,9 +93,14 @@ #include #include #include +#include +#include #include +#include #include #include +#include +#include #include #include #include diff --git a/3party/boost/boost/asio/basic_datagram_socket.hpp b/3party/boost/boost/asio/basic_datagram_socket.hpp index bdbcec14e2..a773315cb2 100644 --- a/3party/boost/boost/asio/basic_datagram_socket.hpp +++ b/3party/boost/boost/asio/basic_datagram_socket.hpp @@ -2,7 +2,7 @@ // basic_datagram_socket.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_deadline_timer.hpp b/3party/boost/boost/asio/basic_deadline_timer.hpp index c90cbeebc6..6baeb7ad74 100644 --- a/3party/boost/boost/asio/basic_deadline_timer.hpp +++ b/3party/boost/boost/asio/basic_deadline_timer.hpp @@ -2,7 +2,7 @@ // basic_deadline_timer.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_io_object.hpp b/3party/boost/boost/asio/basic_io_object.hpp index 57a73971d6..0464335958 100644 --- a/3party/boost/boost/asio/basic_io_object.hpp +++ b/3party/boost/boost/asio/basic_io_object.hpp @@ -2,7 +2,7 @@ // basic_io_object.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_raw_socket.hpp b/3party/boost/boost/asio/basic_raw_socket.hpp index b29dd6288f..90f66c00c0 100644 --- a/3party/boost/boost/asio/basic_raw_socket.hpp +++ b/3party/boost/boost/asio/basic_raw_socket.hpp @@ -2,7 +2,7 @@ // basic_raw_socket.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_seq_packet_socket.hpp b/3party/boost/boost/asio/basic_seq_packet_socket.hpp index 17e15e7a3f..a638c71733 100644 --- a/3party/boost/boost/asio/basic_seq_packet_socket.hpp +++ b/3party/boost/boost/asio/basic_seq_packet_socket.hpp @@ -2,7 +2,7 @@ // basic_seq_packet_socket.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_serial_port.hpp b/3party/boost/boost/asio/basic_serial_port.hpp index a94b0e542b..31ee955249 100644 --- a/3party/boost/boost/asio/basic_serial_port.hpp +++ b/3party/boost/boost/asio/basic_serial_port.hpp @@ -2,7 +2,7 @@ // basic_serial_port.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/basic_signal_set.hpp b/3party/boost/boost/asio/basic_signal_set.hpp index 2f84a14fe1..ddbef87932 100644 --- a/3party/boost/boost/asio/basic_signal_set.hpp +++ b/3party/boost/boost/asio/basic_signal_set.hpp @@ -2,7 +2,7 @@ // basic_signal_set.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_socket.hpp b/3party/boost/boost/asio/basic_socket.hpp index 28c5be1cc5..c9e2045bf3 100644 --- a/3party/boost/boost/asio/basic_socket.hpp +++ b/3party/boost/boost/asio/basic_socket.hpp @@ -2,7 +2,7 @@ // basic_socket.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_socket_acceptor.hpp b/3party/boost/boost/asio/basic_socket_acceptor.hpp index 3203f59994..5a3b0f7e4f 100644 --- a/3party/boost/boost/asio/basic_socket_acceptor.hpp +++ b/3party/boost/boost/asio/basic_socket_acceptor.hpp @@ -2,7 +2,7 @@ // basic_socket_acceptor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_socket_iostream.hpp b/3party/boost/boost/asio/basic_socket_iostream.hpp index 4dcf20ec3c..6fae0854b2 100644 --- a/3party/boost/boost/asio/basic_socket_iostream.hpp +++ b/3party/boost/boost/asio/basic_socket_iostream.hpp @@ -2,7 +2,7 @@ // basic_socket_iostream.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -53,7 +53,7 @@ basic_socket_streambuf >::member) \ { \ - tie(this); \ + this->setf(std::ios_base::unitbuf); \ if (rdbuf()->connect(BOOST_PP_ENUM_PARAMS(n, x)) == 0) \ this->setstate(std::ios_base::failbit); \ } \ @@ -112,7 +112,7 @@ public: basic_socket_streambuf >::member) { - tie(this); + this->setf(std::ios_base::unitbuf); } #if defined(GENERATING_DOCUMENTATION) @@ -131,7 +131,7 @@ public: basic_socket_streambuf >::member) { - tie(this); + this->setf(std::ios_base::unitbuf); if (rdbuf()->connect(x...) == 0) this->setstate(std::ios_base::failbit); } diff --git a/3party/boost/boost/asio/basic_socket_streambuf.hpp b/3party/boost/boost/asio/basic_socket_streambuf.hpp index ff1e2682b4..fb047c63f6 100644 --- a/3party/boost/boost/asio/basic_socket_streambuf.hpp +++ b/3party/boost/boost/asio/basic_socket_streambuf.hpp @@ -2,7 +2,7 @@ // basic_socket_streambuf.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_stream_socket.hpp b/3party/boost/boost/asio/basic_stream_socket.hpp index 728e8dbd57..010f0aaa90 100644 --- a/3party/boost/boost/asio/basic_stream_socket.hpp +++ b/3party/boost/boost/asio/basic_stream_socket.hpp @@ -2,7 +2,7 @@ // basic_stream_socket.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_streambuf.hpp b/3party/boost/boost/asio/basic_streambuf.hpp index 6e642890f9..e77624b80e 100644 --- a/3party/boost/boost/asio/basic_streambuf.hpp +++ b/3party/boost/boost/asio/basic_streambuf.hpp @@ -2,7 +2,7 @@ // basic_streambuf.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_streambuf_fwd.hpp b/3party/boost/boost/asio/basic_streambuf_fwd.hpp index a7d82d3c59..ca806ea87e 100644 --- a/3party/boost/boost/asio/basic_streambuf_fwd.hpp +++ b/3party/boost/boost/asio/basic_streambuf_fwd.hpp @@ -2,7 +2,7 @@ // basic_streambuf_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/basic_waitable_timer.hpp b/3party/boost/boost/asio/basic_waitable_timer.hpp new file mode 100644 index 0000000000..d957bdebf4 --- /dev/null +++ b/3party/boost/boost/asio/basic_waitable_timer.hpp @@ -0,0 +1,518 @@ +// +// basic_waitable_timer.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_BASIC_WAITABLE_TIMER_HPP +#define BOOST_ASIO_BASIC_WAITABLE_TIMER_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +/// Provides waitable timer functionality. +/** + * The basic_waitable_timer class template provides the ability to perform a + * blocking or asynchronous wait for a timer to expire. + * + * A waitable timer is always in one of two states: "expired" or "not expired". + * If the wait() or async_wait() function is called on an expired timer, the + * wait operation will complete immediately. + * + * Most applications will use the boost::asio::waitable_timer typedef. + * + * @note This waitable timer functionality is for use with the C++11 standard + * library's @c <chrono> facility, or with the Boost.Chrono library. + * + * @par Thread Safety + * @e Distinct @e objects: Safe.@n + * @e Shared @e objects: Unsafe. + * + * @par Examples + * Performing a blocking wait: + * @code + * // Construct a timer without setting an expiry time. + * boost::asio::waitable_timer timer(io_service); + * + * // Set an expiry time relative to now. + * timer.expires_from_now(boost::posix_time::seconds(5)); + * + * // Wait for the timer to expire. + * timer.wait(); + * @endcode + * + * @par + * Performing an asynchronous wait: + * @code + * void handler(const boost::system::error_code& error) + * { + * if (!error) + * { + * // Timer expired. + * } + * } + * + * ... + * + * // Construct a timer with an absolute expiry time. + * boost::asio::waitable_timer timer(io_service, + * boost::posix_time::time_from_string("2005-12-07 23:59:59.000")); + * + * // Start an asynchronous wait. + * timer.async_wait(handler); + * @endcode + * + * @par Changing an active waitable_timer's expiry time + * + * Changing the expiry time of a timer while there are pending asynchronous + * waits causes those wait operations to be cancelled. To ensure that the action + * associated with the timer is performed only once, use something like this: + * used: + * + * @code + * void on_some_event() + * { + * if (my_timer.expires_from_now(seconds(5)) > 0) + * { + * // We managed to cancel the timer. Start new asynchronous wait. + * my_timer.async_wait(on_timeout); + * } + * else + * { + * // Too late, timer has already expired! + * } + * } + * + * void on_timeout(const boost::system::error_code& e) + * { + * if (e != boost::asio::error::operation_aborted) + * { + * // Timer was not cancelled, take necessary action. + * } + * } + * @endcode + * + * @li The boost::asio::basic_waitable_timer::expires_from_now() function + * cancels any pending asynchronous waits, and returns the number of + * asynchronous waits that were cancelled. If it returns 0 then you were too + * late and the wait handler has already been executed, or will soon be + * executed. If it returns 1 then the wait handler was successfully cancelled. + * + * @li If a wait handler is cancelled, the boost::system::error_code passed to + * it contains the value boost::asio::error::operation_aborted. + */ +template , + typename WaitableTimerService = waitable_timer_service > +class basic_waitable_timer + : public basic_io_object +{ +public: + /// The clock type. + typedef Clock clock_type; + + /// The duration type of the clock. + typedef typename clock_type::duration duration; + + /// The time point type of the clock. + typedef typename clock_type::time_point time_point; + + /// The wait traits type. + typedef WaitTraits traits_type; + + /// Constructor. + /** + * This constructor creates a timer without setting an expiry time. The + * expires_at() or expires_from_now() functions must be called to set an + * expiry time before the timer can be waited on. + * + * @param io_service The io_service object that the timer will use to dispatch + * handlers for any asynchronous operations performed on the timer. + */ + explicit basic_waitable_timer(boost::asio::io_service& io_service) + : basic_io_object(io_service) + { + } + + /// Constructor to set a particular expiry time as an absolute time. + /** + * This constructor creates a timer and sets the expiry time. + * + * @param io_service The io_service object that the timer will use to dispatch + * handlers for any asynchronous operations performed on the timer. + * + * @param expiry_time The expiry time to be used for the timer, expressed + * as an absolute time. + */ + basic_waitable_timer(boost::asio::io_service& io_service, + const time_point& expiry_time) + : basic_io_object(io_service) + { + boost::system::error_code ec; + this->service.expires_at(this->implementation, expiry_time, ec); + boost::asio::detail::throw_error(ec, "expires_at"); + } + + /// Constructor to set a particular expiry time relative to now. + /** + * This constructor creates a timer and sets the expiry time. + * + * @param io_service The io_service object that the timer will use to dispatch + * handlers for any asynchronous operations performed on the timer. + * + * @param expiry_time The expiry time to be used for the timer, relative to + * now. + */ + basic_waitable_timer(boost::asio::io_service& io_service, + const duration& expiry_time) + : basic_io_object(io_service) + { + boost::system::error_code ec; + this->service.expires_from_now(this->implementation, expiry_time, ec); + boost::asio::detail::throw_error(ec, "expires_from_now"); + } + + /// Cancel any asynchronous operations that are waiting on the timer. + /** + * This function forces the completion of any pending asynchronous wait + * operations against the timer. The handler for each cancelled operation will + * be invoked with the boost::asio::error::operation_aborted error code. + * + * Cancelling the timer does not change the expiry time. + * + * @return The number of asynchronous operations that were cancelled. + * + * @throws boost::system::system_error Thrown on failure. + * + * @note If the timer has already expired when cancel() is called, then the + * handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t cancel() + { + boost::system::error_code ec; + std::size_t s = this->service.cancel(this->implementation, ec); + boost::asio::detail::throw_error(ec, "cancel"); + return s; + } + + /// Cancel any asynchronous operations that are waiting on the timer. + /** + * This function forces the completion of any pending asynchronous wait + * operations against the timer. The handler for each cancelled operation will + * be invoked with the boost::asio::error::operation_aborted error code. + * + * Cancelling the timer does not change the expiry time. + * + * @param ec Set to indicate what error occurred, if any. + * + * @return The number of asynchronous operations that were cancelled. + * + * @note If the timer has already expired when cancel() is called, then the + * handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t cancel(boost::system::error_code& ec) + { + return this->service.cancel(this->implementation, ec); + } + + /// Cancels one asynchronous operation that is waiting on the timer. + /** + * This function forces the completion of one pending asynchronous wait + * operation against the timer. Handlers are cancelled in FIFO order. The + * handler for the cancelled operation will be invoked with the + * boost::asio::error::operation_aborted error code. + * + * Cancelling the timer does not change the expiry time. + * + * @return The number of asynchronous operations that were cancelled. That is, + * either 0 or 1. + * + * @throws boost::system::system_error Thrown on failure. + * + * @note If the timer has already expired when cancel_one() is called, then + * the handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t cancel_one() + { + boost::system::error_code ec; + std::size_t s = this->service.cancel_one(this->implementation, ec); + boost::asio::detail::throw_error(ec, "cancel_one"); + return s; + } + + /// Cancels one asynchronous operation that is waiting on the timer. + /** + * This function forces the completion of one pending asynchronous wait + * operation against the timer. Handlers are cancelled in FIFO order. The + * handler for the cancelled operation will be invoked with the + * boost::asio::error::operation_aborted error code. + * + * Cancelling the timer does not change the expiry time. + * + * @param ec Set to indicate what error occurred, if any. + * + * @return The number of asynchronous operations that were cancelled. That is, + * either 0 or 1. + * + * @note If the timer has already expired when cancel_one() is called, then + * the handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t cancel_one(boost::system::error_code& ec) + { + return this->service.cancel_one(this->implementation, ec); + } + + /// Get the timer's expiry time as an absolute time. + /** + * This function may be used to obtain the timer's current expiry time. + * Whether the timer has expired or not does not affect this value. + */ + time_point expires_at() const + { + return this->service.expires_at(this->implementation); + } + + /// Set the timer's expiry time as an absolute time. + /** + * This function sets the expiry time. Any pending asynchronous wait + * operations will be cancelled. The handler for each cancelled operation will + * be invoked with the boost::asio::error::operation_aborted error code. + * + * @param expiry_time The expiry time to be used for the timer. + * + * @return The number of asynchronous operations that were cancelled. + * + * @throws boost::system::system_error Thrown on failure. + * + * @note If the timer has already expired when expires_at() is called, then + * the handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t expires_at(const time_point& expiry_time) + { + boost::system::error_code ec; + std::size_t s = this->service.expires_at( + this->implementation, expiry_time, ec); + boost::asio::detail::throw_error(ec, "expires_at"); + return s; + } + + /// Set the timer's expiry time as an absolute time. + /** + * This function sets the expiry time. Any pending asynchronous wait + * operations will be cancelled. The handler for each cancelled operation will + * be invoked with the boost::asio::error::operation_aborted error code. + * + * @param expiry_time The expiry time to be used for the timer. + * + * @param ec Set to indicate what error occurred, if any. + * + * @return The number of asynchronous operations that were cancelled. + * + * @note If the timer has already expired when expires_at() is called, then + * the handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t expires_at(const time_point& expiry_time, + boost::system::error_code& ec) + { + return this->service.expires_at(this->implementation, expiry_time, ec); + } + + /// Get the timer's expiry time relative to now. + /** + * This function may be used to obtain the timer's current expiry time. + * Whether the timer has expired or not does not affect this value. + */ + duration expires_from_now() const + { + return this->service.expires_from_now(this->implementation); + } + + /// Set the timer's expiry time relative to now. + /** + * This function sets the expiry time. Any pending asynchronous wait + * operations will be cancelled. The handler for each cancelled operation will + * be invoked with the boost::asio::error::operation_aborted error code. + * + * @param expiry_time The expiry time to be used for the timer. + * + * @return The number of asynchronous operations that were cancelled. + * + * @throws boost::system::system_error Thrown on failure. + * + * @note If the timer has already expired when expires_from_now() is called, + * then the handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t expires_from_now(const duration& expiry_time) + { + boost::system::error_code ec; + std::size_t s = this->service.expires_from_now( + this->implementation, expiry_time, ec); + boost::asio::detail::throw_error(ec, "expires_from_now"); + return s; + } + + /// Set the timer's expiry time relative to now. + /** + * This function sets the expiry time. Any pending asynchronous wait + * operations will be cancelled. The handler for each cancelled operation will + * be invoked with the boost::asio::error::operation_aborted error code. + * + * @param expiry_time The expiry time to be used for the timer. + * + * @param ec Set to indicate what error occurred, if any. + * + * @return The number of asynchronous operations that were cancelled. + * + * @note If the timer has already expired when expires_from_now() is called, + * then the handlers for asynchronous wait operations will: + * + * @li have already been invoked; or + * + * @li have been queued for invocation in the near future. + * + * These handlers can no longer be cancelled, and therefore are passed an + * error code that indicates the successful completion of the wait operation. + */ + std::size_t expires_from_now(const duration& expiry_time, + boost::system::error_code& ec) + { + return this->service.expires_from_now( + this->implementation, expiry_time, ec); + } + + /// Perform a blocking wait on the timer. + /** + * This function is used to wait for the timer to expire. This function + * blocks and does not return until the timer has expired. + * + * @throws boost::system::system_error Thrown on failure. + */ + void wait() + { + boost::system::error_code ec; + this->service.wait(this->implementation, ec); + boost::asio::detail::throw_error(ec, "wait"); + } + + /// Perform a blocking wait on the timer. + /** + * This function is used to wait for the timer to expire. This function + * blocks and does not return until the timer has expired. + * + * @param ec Set to indicate what error occurred, if any. + */ + void wait(boost::system::error_code& ec) + { + this->service.wait(this->implementation, ec); + } + + /// Start an asynchronous wait on the timer. + /** + * This function may be used to initiate an asynchronous wait against the + * timer. It always returns immediately. + * + * For each call to async_wait(), the supplied handler will be called exactly + * once. The handler will be called when: + * + * @li The timer has expired. + * + * @li The timer was cancelled, in which case the handler is passed the error + * code boost::asio::error::operation_aborted. + * + * @param handler The handler to be called when the timer expires. Copies + * will be made of the handler as required. The function signature of the + * handler must be: + * @code void handler( + * const boost::system::error_code& error // Result of operation. + * ); @endcode + * Regardless of whether the asynchronous operation completes immediately or + * not, the handler will not be invoked from within this function. Invocation + * of the handler will be performed in a manner equivalent to using + * boost::asio::io_service::post(). + */ + template + void async_wait(BOOST_ASIO_MOVE_ARG(WaitHandler) handler) + { + // If you get an error on the following line it means that your handler does + // not meet the documented type requirements for a WaitHandler. + BOOST_ASIO_WAIT_HANDLER_CHECK(WaitHandler, handler) type_check; + + this->service.async_wait(this->implementation, + BOOST_ASIO_MOVE_CAST(WaitHandler)(handler)); + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_BASIC_WAITABLE_TIMER_HPP diff --git a/3party/boost/boost/asio/buffer.hpp b/3party/boost/boost/asio/buffer.hpp index 5f36570adc..532cfd1b59 100644 --- a/3party/boost/boost/asio/buffer.hpp +++ b/3party/boost/boost/asio/buffer.hpp @@ -2,7 +2,7 @@ // buffer.hpp // ~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/buffered_read_stream.hpp b/3party/boost/boost/asio/buffered_read_stream.hpp index b9a3f47b01..3072580059 100644 --- a/3party/boost/boost/asio/buffered_read_stream.hpp +++ b/3party/boost/boost/asio/buffered_read_stream.hpp @@ -2,7 +2,7 @@ // buffered_read_stream.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/buffered_read_stream_fwd.hpp b/3party/boost/boost/asio/buffered_read_stream_fwd.hpp index 9c8a1af41c..5c8c2951ce 100644 --- a/3party/boost/boost/asio/buffered_read_stream_fwd.hpp +++ b/3party/boost/boost/asio/buffered_read_stream_fwd.hpp @@ -2,7 +2,7 @@ // buffered_read_stream_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/buffered_stream.hpp b/3party/boost/boost/asio/buffered_stream.hpp index e9cb982c90..632e5ce71d 100644 --- a/3party/boost/boost/asio/buffered_stream.hpp +++ b/3party/boost/boost/asio/buffered_stream.hpp @@ -2,7 +2,7 @@ // buffered_stream.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/buffered_stream_fwd.hpp b/3party/boost/boost/asio/buffered_stream_fwd.hpp index 042b9903df..5241879d4b 100644 --- a/3party/boost/boost/asio/buffered_stream_fwd.hpp +++ b/3party/boost/boost/asio/buffered_stream_fwd.hpp @@ -2,7 +2,7 @@ // buffered_stream_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/buffered_write_stream.hpp b/3party/boost/boost/asio/buffered_write_stream.hpp index 38928c5380..11cb872558 100644 --- a/3party/boost/boost/asio/buffered_write_stream.hpp +++ b/3party/boost/boost/asio/buffered_write_stream.hpp @@ -2,7 +2,7 @@ // buffered_write_stream.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -232,7 +232,7 @@ public: ? bytes_avail : space_avail; storage_.resize(orig_size + length); std::size_t bytes_copied = boost::asio::buffer_copy( - storage_.data(), buffers_, length); + storage_.data() + orig_size, buffers_, length); io_service_.dispatch(detail::bind_handler(handler_, ec, bytes_copied)); } @@ -335,7 +335,8 @@ private: std::size_t bytes_avail = boost::asio::buffer_size(buffers); std::size_t length = bytes_avail < space_avail ? bytes_avail : space_avail; storage_.resize(orig_size + length); - return boost::asio::buffer_copy(storage_.data(), buffers, length); + return boost::asio::buffer_copy( + storage_.data() + orig_size, buffers, length); } /// The next layer. diff --git a/3party/boost/boost/asio/buffered_write_stream_fwd.hpp b/3party/boost/boost/asio/buffered_write_stream_fwd.hpp index 0590a96788..2da283fce7 100644 --- a/3party/boost/boost/asio/buffered_write_stream_fwd.hpp +++ b/3party/boost/boost/asio/buffered_write_stream_fwd.hpp @@ -2,7 +2,7 @@ // buffered_write_stream_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/buffers_iterator.hpp b/3party/boost/boost/asio/buffers_iterator.hpp index 51f5707643..c11e1469d6 100644 --- a/3party/boost/boost/asio/buffers_iterator.hpp +++ b/3party/boost/boost/asio/buffers_iterator.hpp @@ -2,7 +2,7 @@ // buffers_iterator.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -128,7 +128,7 @@ public: /// Construct an iterator representing the beginning of the buffers' data. static buffers_iterator begin(const BufferSequence& buffers) #if BOOST_WORKAROUND(__GNUC__, == 4) && BOOST_WORKAROUND(__GNUC_MINOR__, == 3) - __attribute__ ((noinline)) + __attribute__ ((__noinline__)) #endif { buffers_iterator new_iter; @@ -148,7 +148,7 @@ public: /// Construct an iterator representing the end of the buffers' data. static buffers_iterator end(const BufferSequence& buffers) #if BOOST_WORKAROUND(__GNUC__, == 4) && BOOST_WORKAROUND(__GNUC_MINOR__, == 3) - __attribute__ ((noinline)) + __attribute__ ((__noinline__)) #endif { buffers_iterator new_iter; diff --git a/3party/boost/boost/asio/completion_condition.hpp b/3party/boost/boost/asio/completion_condition.hpp index ee0579e06e..3d32c6555b 100644 --- a/3party/boost/boost/asio/completion_condition.hpp +++ b/3party/boost/boost/asio/completion_condition.hpp @@ -2,7 +2,7 @@ // completion_condition.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/connect.hpp b/3party/boost/boost/asio/connect.hpp index 760712acc2..e54ea0862e 100644 --- a/3party/boost/boost/asio/connect.hpp +++ b/3party/boost/boost/asio/connect.hpp @@ -2,7 +2,7 @@ // connect.hpp // ~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/datagram_socket_service.hpp b/3party/boost/boost/asio/datagram_socket_service.hpp index 63a1bf5e9f..6e60a4f7de 100644 --- a/3party/boost/boost/asio/datagram_socket_service.hpp +++ b/3party/boost/boost/asio/datagram_socket_service.hpp @@ -2,7 +2,7 @@ // datagram_socket_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/deadline_timer.hpp b/3party/boost/boost/asio/deadline_timer.hpp index 866588b3c8..82e65a77ab 100644 --- a/3party/boost/boost/asio/deadline_timer.hpp +++ b/3party/boost/boost/asio/deadline_timer.hpp @@ -2,7 +2,7 @@ // deadline_timer.hpp // ~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/deadline_timer_service.hpp b/3party/boost/boost/asio/deadline_timer_service.hpp index 80c24eee70..b53830734c 100644 --- a/3party/boost/boost/asio/deadline_timer_service.hpp +++ b/3party/boost/boost/asio/deadline_timer_service.hpp @@ -2,7 +2,7 @@ // deadline_timer_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -20,6 +20,7 @@ #include #include #include +#include #include diff --git a/3party/boost/boost/asio/detail/array.hpp b/3party/boost/boost/asio/detail/array.hpp index a9b6e4306c..be141b19ec 100644 --- a/3party/boost/boost/asio/detail/array.hpp +++ b/3party/boost/boost/asio/detail/array.hpp @@ -2,7 +2,7 @@ // detail/array.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/array_fwd.hpp b/3party/boost/boost/asio/detail/array_fwd.hpp index 3c8fe5fc1f..f97ed0be0c 100644 --- a/3party/boost/boost/asio/detail/array_fwd.hpp +++ b/3party/boost/boost/asio/detail/array_fwd.hpp @@ -2,7 +2,7 @@ // detail/array_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/atomic_count.hpp b/3party/boost/boost/asio/detail/atomic_count.hpp index 943e6904b9..5e0051a22c 100644 --- a/3party/boost/boost/asio/detail/atomic_count.hpp +++ b/3party/boost/boost/asio/detail/atomic_count.hpp @@ -2,7 +2,7 @@ // detail/atomic_count.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -17,7 +17,9 @@ #include -#if defined(BOOST_ASIO_HAS_STD_ATOMIC) +#if !defined(BOOST_HAS_THREADS) || defined(BOOST_ASIO_DISABLE_THREADS) +// Nothing to include. +#elif defined(BOOST_ASIO_HAS_STD_ATOMIC) # include #else // defined(BOOST_ASIO_HAS_STD_ATOMIC) # include @@ -27,10 +29,15 @@ namespace boost { namespace asio { namespace detail { -#if defined(BOOST_ASIO_HAS_STD_ATOMIC) +#if !defined(BOOST_HAS_THREADS) || defined(BOOST_ASIO_DISABLE_THREADS) +typedef long atomic_count; +inline void increment(atomic_count& a, long b) { a += b; } +#elif defined(BOOST_ASIO_HAS_STD_ATOMIC) typedef std::atomic atomic_count; +inline void increment(atomic_count& a, long b) { a += b; } #else // defined(BOOST_ASIO_HAS_STD_ATOMIC) typedef boost::detail::atomic_count atomic_count; +inline void increment(atomic_count& a, long b) { while (b > 0) ++a, --b; } #endif // defined(BOOST_ASIO_HAS_STD_ATOMIC) } // namespace detail diff --git a/3party/boost/boost/asio/detail/base_from_completion_cond.hpp b/3party/boost/boost/asio/detail/base_from_completion_cond.hpp index b2b76d66f9..635b9c19d9 100644 --- a/3party/boost/boost/asio/detail/base_from_completion_cond.hpp +++ b/3party/boost/boost/asio/detail/base_from_completion_cond.hpp @@ -2,7 +2,7 @@ // detail/base_from_completion_cond.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/bind_handler.hpp b/3party/boost/boost/asio/detail/bind_handler.hpp index 416712dd22..0bd7e531df 100644 --- a/3party/boost/boost/asio/detail/bind_handler.hpp +++ b/3party/boost/boost/asio/detail/bind_handler.hpp @@ -2,7 +2,7 @@ // detail/bind_handler.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/buffer_resize_guard.hpp b/3party/boost/boost/asio/detail/buffer_resize_guard.hpp index 7df4128a88..ea783306c4 100644 --- a/3party/boost/boost/asio/detail/buffer_resize_guard.hpp +++ b/3party/boost/boost/asio/detail/buffer_resize_guard.hpp @@ -2,7 +2,7 @@ // detail/buffer_resize_guard.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp b/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp index 061daf103b..562aa55a41 100644 --- a/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp +++ b/3party/boost/boost/asio/detail/buffer_sequence_adapter.hpp @@ -2,7 +2,7 @@ // detail/buffer_sequence_adapter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -247,6 +248,114 @@ private: std::size_t total_buffer_size_; }; +template +class buffer_sequence_adapter > + : buffer_sequence_adapter_base +{ +public: + explicit buffer_sequence_adapter( + const boost::array& buffer_sequence) + { + init_native_buffer(buffers_[0], Buffer(buffer_sequence[0])); + init_native_buffer(buffers_[1], Buffer(buffer_sequence[1])); + total_buffer_size_ = boost::asio::buffer_size(buffer_sequence[0]) + + boost::asio::buffer_size(buffer_sequence[1]); + } + + native_buffer_type* buffers() + { + return buffers_; + } + + std::size_t count() const + { + return 2; + } + + bool all_empty() const + { + return total_buffer_size_ == 0; + } + + static bool all_empty(const boost::array& buffer_sequence) + { + return boost::asio::buffer_size(buffer_sequence[0]) == 0 + && boost::asio::buffer_size(buffer_sequence[1]) == 0; + } + + static void validate(const boost::array& buffer_sequence) + { + boost::asio::buffer_cast(buffer_sequence[0]); + boost::asio::buffer_cast(buffer_sequence[1]); + } + + static Buffer first(const boost::array& buffer_sequence) + { + return Buffer(boost::asio::buffer_size(buffer_sequence[0]) != 0 + ? buffer_sequence[0] : buffer_sequence[1]); + } + +private: + native_buffer_type buffers_[2]; + std::size_t total_buffer_size_; +}; + +#if defined(BOOST_ASIO_HAS_STD_ARRAY) + +template +class buffer_sequence_adapter > + : buffer_sequence_adapter_base +{ +public: + explicit buffer_sequence_adapter( + const std::array& buffer_sequence) + { + init_native_buffer(buffers_[0], Buffer(buffer_sequence[0])); + init_native_buffer(buffers_[1], Buffer(buffer_sequence[1])); + total_buffer_size_ = boost::asio::buffer_size(buffer_sequence[0]) + + boost::asio::buffer_size(buffer_sequence[1]); + } + + native_buffer_type* buffers() + { + return buffers_; + } + + std::size_t count() const + { + return 2; + } + + bool all_empty() const + { + return total_buffer_size_ == 0; + } + + static bool all_empty(const std::array& buffer_sequence) + { + return boost::asio::buffer_size(buffer_sequence[0]) == 0 + && boost::asio::buffer_size(buffer_sequence[1]) == 0; + } + + static void validate(const std::array& buffer_sequence) + { + boost::asio::buffer_cast(buffer_sequence[0]); + boost::asio::buffer_cast(buffer_sequence[1]); + } + + static Buffer first(const std::array& buffer_sequence) + { + return Buffer(boost::asio::buffer_size(buffer_sequence[0]) != 0 + ? buffer_sequence[0] : buffer_sequence[1]); + } + +private: + native_buffer_type buffers_[2]; + std::size_t total_buffer_size_; +}; + +#endif // defined(BOOST_ASIO_HAS_STD_ARRAY) + } // namespace detail } // namespace asio } // namespace boost diff --git a/3party/boost/boost/asio/detail/buffered_stream_storage.hpp b/3party/boost/boost/asio/detail/buffered_stream_storage.hpp index dd2e93a4f4..3c7ba7132f 100644 --- a/3party/boost/boost/asio/detail/buffered_stream_storage.hpp +++ b/3party/boost/boost/asio/detail/buffered_stream_storage.hpp @@ -2,7 +2,7 @@ // detail/buffered_stream_storage.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/call_stack.hpp b/3party/boost/boost/asio/detail/call_stack.hpp index d5f9099a0f..db4cd1ed66 100644 --- a/3party/boost/boost/asio/detail/call_stack.hpp +++ b/3party/boost/boost/asio/detail/call_stack.hpp @@ -2,7 +2,7 @@ // detail/call_stack.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -27,34 +27,60 @@ namespace detail { // Helper class to determine whether or not the current thread is inside an // invocation of io_service::run() for a specified io_service object. -template +template class call_stack { public: - // Context class automatically pushes an owner on to the stack. + // Context class automatically pushes the key/value pair on to the stack. class context : private noncopyable { public: - // Push the owner on to the stack. - explicit context(Owner* d) - : owner_(d), - next_(call_stack::top_) + // Push the key on to the stack. + explicit context(Key* k) + : key_(k), + next_(call_stack::top_) { - call_stack::top_ = this; + value_ = reinterpret_cast(this); + call_stack::top_ = this; } - // Pop the owner from the stack. + // Push the key/value pair on to the stack. + context(Key* k, Value& v) + : key_(k), + value_(&v), + next_(call_stack::top_) + { + call_stack::top_ = this; + } + + // Pop the key/value pair from the stack. ~context() { - call_stack::top_ = next_; + call_stack::top_ = next_; + } + + // Find the next context with the same key. + Value* next_by_key() const + { + context* elem = next_; + while (elem) + { + if (elem->key_ == key_) + return elem->value_; + elem = elem->next_; + } + return 0; } private: - friend class call_stack; + friend class call_stack; - // The owner associated with the context. - Owner* owner_; + // The key associated with the context. + Key* key_; + + // The value associated with the context. + Value* value_; // The next element in the stack. context* next_; @@ -62,17 +88,18 @@ public: friend class context; - // Determine whether the specified owner is on the stack. - static bool contains(Owner* d) + // Determine whether the specified owner is on the stack. Returns address of + // key if present, 0 otherwise. + static Value* contains(Key* k) { context* elem = top_; while (elem) { - if (elem->owner_ == d) - return true; + if (elem->key_ == k) + return elem->value_; elem = elem->next_; } - return false; + return 0; } private: @@ -80,9 +107,9 @@ private: static tss_ptr top_; }; -template -tss_ptr::context> -call_stack::top_; +template +tss_ptr::context> +call_stack::top_; } // namespace detail } // namespace asio diff --git a/3party/boost/boost/asio/detail/chrono_time_traits.hpp b/3party/boost/boost/asio/detail/chrono_time_traits.hpp new file mode 100644 index 0000000000..e56c8c3220 --- /dev/null +++ b/3party/boost/boost/asio/detail/chrono_time_traits.hpp @@ -0,0 +1,129 @@ +// +// detail/chrono_time_traits.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_DETAIL_CHRONO_TIME_TRAITS_HPP +#define BOOST_ASIO_DETAIL_CHRONO_TIME_TRAITS_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +// Adapts std::chrono clocks for use with a deadline timer. +template +struct chrono_time_traits +{ + // The clock type. + typedef Clock clock_type; + + // The duration type of the clock. + typedef typename clock_type::duration duration_type; + + // The time point type of the clock. + typedef typename clock_type::time_point time_type; + + // The period of the clock. + typedef typename duration_type::period period_type; + + // Get the current time. + static time_type now() + { + return clock_type::now(); + } + + // Add a duration to a time. + static time_type add(const time_type& t, const duration_type& d) + { + return t + d; + } + + // Subtract one time from another. + static duration_type subtract(const time_type& t1, const time_type& t2) + { + return t1 - t2; + } + + // Test whether one time is less than another. + static bool less_than(const time_type& t1, const time_type& t2) + { + return t1 < t2; + } + + // Implement just enough of the posix_time::time_duration interface to supply + // what the timer_queue requires. + class posix_time_duration + { + public: + explicit posix_time_duration(const duration_type& d) + : d_(d) + { + } + + boost::int64_t ticks() const + { + return d_.count(); + } + + boost::int64_t total_seconds() const + { + return duration_cast<1, 1>(); + } + + boost::int64_t total_milliseconds() const + { + return duration_cast<1, 1000>(); + } + + boost::int64_t total_microseconds() const + { + return duration_cast<1, 1000000>(); + } + + private: + template + boost::int64_t duration_cast() const + { + const boost::int64_t num = period_type::num * Den; + const boost::int64_t den = period_type::den * Num; + + if (num == 1 && den == 1) + return ticks(); + else if (num != 1 && den == 1) + return ticks() * num; + else if (num == 1 && period_type::den != 1) + return ticks() / den; + else + return ticks() * num / den; + } + + duration_type d_; + }; + + // Convert to POSIX duration type. + static posix_time_duration to_posix_duration(const duration_type& d) + { + return posix_time_duration(WaitTraits::to_wait_duration(d)); + } +}; + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_DETAIL_CHRONO_TIME_TRAITS_HPP diff --git a/3party/boost/boost/asio/detail/completion_handler.hpp b/3party/boost/boost/asio/detail/completion_handler.hpp index 144ad7f050..19b4360c6a 100644 --- a/3party/boost/boost/asio/detail/completion_handler.hpp +++ b/3party/boost/boost/asio/detail/completion_handler.hpp @@ -2,7 +2,7 @@ // detail/completion_handler.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -40,7 +40,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. completion_handler* h(static_cast(base)); @@ -61,7 +62,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN(()); boost_asio_handler_invoke_helpers::invoke(handler, handler); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/config.hpp b/3party/boost/boost/asio/detail/config.hpp index 61430b61e3..c47c0070c1 100644 --- a/3party/boost/boost/asio/detail/config.hpp +++ b/3party/boost/boost/asio/detail/config.hpp @@ -2,7 +2,7 @@ // detail/config.hpp // ~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -12,6 +12,7 @@ #define BOOST_ASIO_DETAIL_CONFIG_HPP #include +#include // Default to a header-only implementation. The user must specifically request // separate compilation by defining either BOOST_ASIO_SEPARATE_COMPILATION or @@ -111,6 +112,20 @@ # endif // defined(__GNUC__) #endif // !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR) +// Compliant C++11 compilers put noexcept specifiers on error_category members. +#if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) +# if defined(__GNUC__) +# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) +# if defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true) +# endif // defined(__GXX_EXPERIMENTAL_CXX0X__) +# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4) +# endif // defined(__GNUC__) +# if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) +# define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT +# endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) +#endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT) + // Standard library support for arrays. #if !defined(BOOST_ASIO_DISABLE_STD_ARRAY) # if defined(__GNUC__) @@ -154,6 +169,29 @@ # endif // defined(__GNUC__) #endif // !defined(BOOST_ASIO_DISABLE_STD_ATOMIC) +// Standard library support for chrono. Some standard libraries (such as the +// libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x +// drafts, rather than the eventually standardised name of steady_clock. +#if !defined(BOOST_ASIO_DISABLE_STD_CHRONO) +# if defined(__GNUC__) +# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) +# if defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_ASIO_HAS_STD_CHRONO +# if ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) +# define BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK +# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) +# endif // defined(__GXX_EXPERIMENTAL_CXX0X__) +# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4) +# endif // defined(__GNUC__) +#endif // !defined(BOOST_ASIO_DISABLE_STD_CHRONO) + +// Boost support for chrono. +#if !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO) +# if (BOOST_VERSION >= 104700) +# define BOOST_ASIO_HAS_BOOST_CHRONO +# endif // (BOOST_VERSION >= 104700) +#endif // !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO) + // Windows: target OS version. #if defined(BOOST_WINDOWS) || defined(__CYGWIN__) # if !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS) @@ -289,6 +327,15 @@ # endif // defined(BOOST_ASIO_HAS_IOCP) #endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE) +// Windows: object handles. +#if !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE) +# if defined(BOOST_WINDOWS) || defined(__CYGWIN__) +# if !defined(UNDER_CE) +# define BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE 1 +# endif // !defined(UNDER_CE) +# endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__) +#endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE) + // Windows: OVERLAPPED wrapper. #if !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR) # if defined(BOOST_ASIO_HAS_IOCP) @@ -324,4 +371,19 @@ # endif // !defined(UNDER_CE) #endif // !defined(BOOST_ASIO_DISABLE_SIGNAL) +// Support for the __thread keyword extension. +#if !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION) +# if defined(__linux__) +# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +# if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3) +# if !defined(__INTEL_COMPILER) && !defined(__ICL) +# define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 +# elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) +# define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1 +# endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) +# endif // ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3) +# endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +# endif // defined(__linux__) +#endif // !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION) + #endif // BOOST_ASIO_DETAIL_CONFIG_HPP diff --git a/3party/boost/boost/asio/detail/consuming_buffers.hpp b/3party/boost/boost/asio/detail/consuming_buffers.hpp index f50d4e09bc..e13403f954 100644 --- a/3party/boost/boost/asio/detail/consuming_buffers.hpp +++ b/3party/boost/boost/asio/detail/consuming_buffers.hpp @@ -2,7 +2,7 @@ // detail/consuming_buffers.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/date_time_fwd.hpp b/3party/boost/boost/asio/detail/date_time_fwd.hpp new file mode 100644 index 0000000000..162ccdc5f0 --- /dev/null +++ b/3party/boost/boost/asio/detail/date_time_fwd.hpp @@ -0,0 +1,34 @@ +// +// detail/date_time_fwd.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_DETAIL_DATE_TIME_FWD_HPP +#define BOOST_ASIO_DETAIL_DATE_TIME_FWD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +namespace boost { +namespace date_time { + +template +class base_time; + +} // namespace date_time +namespace posix_time { + +class ptime; + +} // namespace posix_time +} // namespace boost + +#endif // BOOST_ASIO_DETAIL_DATE_TIME_FWD_HPP diff --git a/3party/boost/boost/asio/detail/deadline_timer_service.hpp b/3party/boost/boost/asio/detail/deadline_timer_service.hpp index 839a98e542..833815a80f 100644 --- a/3party/boost/boost/asio/detail/deadline_timer_service.hpp +++ b/3party/boost/boost/asio/detail/deadline_timer_service.hpp @@ -2,7 +2,7 @@ // detail/deadline_timer_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -24,14 +24,10 @@ #include #include #include -#include #include #include #include - -#include -#include -#include +#include #include @@ -166,12 +162,8 @@ public: ec = boost::system::error_code(); while (Time_Traits::less_than(now, impl.expiry) && !ec) { - boost::posix_time::time_duration timeout = - Time_Traits::to_posix_duration(Time_Traits::subtract(impl.expiry, now)); - ::timeval tv; - tv.tv_sec = timeout.total_seconds(); - tv.tv_usec = timeout.total_microseconds() % 1000000; - socket_ops::select(0, 0, 0, 0, &tv, ec); + this->do_wait(Time_Traits::to_posix_duration( + Time_Traits::subtract(impl.expiry, now)), ec); now = Time_Traits::now(); } } @@ -196,6 +188,18 @@ public: } private: + // Helper function to wait given a duration type. The duration type should + // either be of type boost::posix_time::time_duration, or implement the + // required subset of its interface. + template + void do_wait(const Duration& timeout, boost::system::error_code& ec) + { + ::timeval tv; + tv.tv_sec = timeout.total_seconds(); + tv.tv_usec = timeout.total_microseconds() % 1000000; + socket_ops::select(0, 0, 0, 0, &tv, ec); + } + // The queue of timers. timer_queue timer_queue_; diff --git a/3party/boost/boost/asio/detail/dependent_type.hpp b/3party/boost/boost/asio/detail/dependent_type.hpp new file mode 100644 index 0000000000..c7b1c1b468 --- /dev/null +++ b/3party/boost/boost/asio/detail/dependent_type.hpp @@ -0,0 +1,38 @@ +// +// detail/dependent_type.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_DETAIL_DEPENDENT_TYPE_HPP +#define BOOST_ASIO_DETAIL_DEPENDENT_TYPE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +template +struct dependent_type +{ + typedef T type; +}; + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_DETAIL_DEPENDENT_TYPE_HPP diff --git a/3party/boost/boost/asio/detail/descriptor_ops.hpp b/3party/boost/boost/asio/detail/descriptor_ops.hpp index 1eccf3a78a..72ea6e2f2d 100644 --- a/3party/boost/boost/asio/detail/descriptor_ops.hpp +++ b/3party/boost/boost/asio/detail/descriptor_ops.hpp @@ -2,7 +2,7 @@ // detail/descriptor_ops.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -93,9 +93,11 @@ BOOST_ASIO_DECL int fcntl(int d, long cmd, boost::system::error_code& ec); BOOST_ASIO_DECL int fcntl(int d, long cmd, long arg, boost::system::error_code& ec); -BOOST_ASIO_DECL int poll_read(int d, boost::system::error_code& ec); +BOOST_ASIO_DECL int poll_read(int d, + state_type state, boost::system::error_code& ec); -BOOST_ASIO_DECL int poll_write(int d, boost::system::error_code& ec); +BOOST_ASIO_DECL int poll_write(int d, + state_type state, boost::system::error_code& ec); } // namespace descriptor_ops } // namespace detail diff --git a/3party/boost/boost/asio/detail/descriptor_read_op.hpp b/3party/boost/boost/asio/detail/descriptor_read_op.hpp index 94861e089b..9f4adff7db 100644 --- a/3party/boost/boost/asio/detail/descriptor_read_op.hpp +++ b/3party/boost/boost/asio/detail/descriptor_read_op.hpp @@ -2,7 +2,7 @@ // detail/descriptor_read_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -76,7 +76,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. descriptor_read_op* o(static_cast(base)); @@ -98,7 +99,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/descriptor_write_op.hpp b/3party/boost/boost/asio/detail/descriptor_write_op.hpp index 60efb18cd4..88c80c8411 100644 --- a/3party/boost/boost/asio/detail/descriptor_write_op.hpp +++ b/3party/boost/boost/asio/detail/descriptor_write_op.hpp @@ -2,7 +2,7 @@ // detail/descriptor_write_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -76,7 +76,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. descriptor_write_op* o(static_cast(base)); @@ -98,7 +99,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/dev_poll_reactor.hpp b/3party/boost/boost/asio/detail/dev_poll_reactor.hpp index 66558c4baa..e6b6e124ed 100644 --- a/3party/boost/boost/asio/detail/dev_poll_reactor.hpp +++ b/3party/boost/boost/asio/detail/dev_poll_reactor.hpp @@ -2,7 +2,7 @@ // detail/dev_poll_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -31,10 +31,10 @@ #include #include #include -#include #include #include #include +#include #include #include @@ -125,7 +125,7 @@ public: template void schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op); + typename timer_queue::per_timer_data& timer, wait_op* op); // Cancel the timer operations associated with the given token. Returns the // number of operations that have been posted or dispatched. diff --git a/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp b/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp index c5ceab26bc..026f91af14 100644 --- a/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp +++ b/3party/boost/boost/asio/detail/dev_poll_reactor_fwd.hpp @@ -2,7 +2,7 @@ // detail/dev_poll_reactor_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/epoll_reactor.hpp b/3party/boost/boost/asio/detail/epoll_reactor.hpp index 0c3dcecc6f..8f66f74b1f 100644 --- a/3party/boost/boost/asio/detail/epoll_reactor.hpp +++ b/3party/boost/boost/asio/detail/epoll_reactor.hpp @@ -2,7 +2,7 @@ // detail/epoll_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -19,8 +19,10 @@ #if defined(BOOST_ASIO_HAS_EPOLL) +#include #include #include +#include #include #include #include @@ -28,10 +30,10 @@ #include #include #include -#include #include #include #include +#include #include @@ -47,16 +49,27 @@ public: connect_op = 1, except_op = 2, max_ops = 3 }; // Per-descriptor queues. - class descriptor_state + class descriptor_state : operation { friend class epoll_reactor; friend class object_pool_access; - mutex mutex_; - int descriptor_; - op_queue op_queue_[max_ops]; - bool shutdown_; + descriptor_state* next_; descriptor_state* prev_; + + mutex mutex_; + epoll_reactor* reactor_; + int descriptor_; + boost::uint32_t registered_events_; + op_queue op_queue_[max_ops]; + bool shutdown_; + + BOOST_ASIO_DECL descriptor_state(); + void set_ready_events(uint32_t events) { task_result_ = events; } + BOOST_ASIO_DECL operation* perform_io(uint32_t events); + BOOST_ASIO_DECL static void do_complete( + io_service_impl* owner, operation* base, + const boost::system::error_code& ec, std::size_t bytes_transferred); }; // Per-descriptor data. @@ -134,7 +147,7 @@ public: template void schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op); + typename timer_queue::per_timer_data& timer, wait_op* op); // Cancel the timer operations associated with the given token. Returns the // number of operations that have been posted or dispatched. @@ -160,6 +173,12 @@ private: // Create the timerfd file descriptor. Does not throw. BOOST_ASIO_DECL static int do_timerfd_create(); + // Allocate a new descriptor state object. + BOOST_ASIO_DECL descriptor_state* allocate_descriptor_state(); + + // Free an existing descriptor state object. + BOOST_ASIO_DECL void free_descriptor_state(descriptor_state* s); + // Helper function to add a new timer queue. BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue); @@ -186,15 +205,15 @@ private: // Mutex to protect access to internal data. mutex mutex_; + // The interrupter is used to break a blocking epoll_wait call. + select_interrupter interrupter_; + // The epoll file descriptor. int epoll_fd_; // The timer file descriptor. int timer_fd_; - // The interrupter is used to break a blocking epoll_wait call. - select_interrupter interrupter_; - // The timer queues. timer_queue_set timer_queues_; @@ -206,6 +225,10 @@ private: // Keep track of all registered descriptors. object_pool registered_descriptors_; + + // Helper class to do post-perform_io cleanup. + struct perform_io_cleanup_on_block_exit; + friend struct perform_io_cleanup_on_block_exit; }; } // namespace detail diff --git a/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp b/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp index 01ee84ce49..aa2827149d 100644 --- a/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp +++ b/3party/boost/boost/asio/detail/epoll_reactor_fwd.hpp @@ -2,7 +2,7 @@ // detail/epoll_reactor_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/event.hpp b/3party/boost/boost/asio/detail/event.hpp index c8109d1e0c..0ee6b6efcd 100644 --- a/3party/boost/boost/asio/detail/event.hpp +++ b/3party/boost/boost/asio/detail/event.hpp @@ -2,7 +2,7 @@ // detail/event.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp b/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp index 22926e8a28..cf40eee72f 100644 --- a/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp +++ b/3party/boost/boost/asio/detail/eventfd_select_interrupter.hpp @@ -2,7 +2,7 @@ // detail/eventfd_select_interrupter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/fd_set_adapter.hpp b/3party/boost/boost/asio/detail/fd_set_adapter.hpp index 8df0426665..51fe927fb1 100644 --- a/3party/boost/boost/asio/detail/fd_set_adapter.hpp +++ b/3party/boost/boost/asio/detail/fd_set_adapter.hpp @@ -2,7 +2,7 @@ // detail/fd_set_adapter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/fenced_block.hpp b/3party/boost/boost/asio/detail/fenced_block.hpp index 4cb27dc181..d9e8a04e8f 100644 --- a/3party/boost/boost/asio/detail/fenced_block.hpp +++ b/3party/boost/boost/asio/detail/fenced_block.hpp @@ -2,7 +2,7 @@ // detail/fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -25,17 +25,18 @@ # include #elif defined(__sun) # include -#elif defined(__GNUC__) && defined(__arm__) +#elif defined(__GNUC__) && defined(__arm__) \ + && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) # include #elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__)) # include +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +# include #elif defined(__GNUC__) \ && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)) \ && !defined(__INTEL_COMPILER) && !defined(__ICL) \ && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__) # include -#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) -# include #elif defined(BOOST_WINDOWS) && !defined(UNDER_CE) # include #else @@ -54,17 +55,18 @@ typedef null_fenced_block fenced_block; typedef macos_fenced_block fenced_block; #elif defined(__sun) typedef solaris_fenced_block fenced_block; -#elif defined(__GNUC__) && defined(__arm__) +#elif defined(__GNUC__) && defined(__arm__) \ + && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) typedef gcc_arm_fenced_block fenced_block; #elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__)) typedef gcc_hppa_fenced_block fenced_block; +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +typedef gcc_x86_fenced_block fenced_block; #elif defined(__GNUC__) \ && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)) \ && !defined(__INTEL_COMPILER) && !defined(__ICL) \ && !defined(__ICC) && !defined(__ECC) && !defined(__PATHSCALE__) typedef gcc_sync_fenced_block fenced_block; -#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) -typedef gcc_x86_fenced_block fenced_block; #elif defined(BOOST_WINDOWS) && !defined(UNDER_CE) typedef win_fenced_block fenced_block; #else diff --git a/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp index 4081f7f30c..1b3c764efe 100644 --- a/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/gcc_arm_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/gcc_arm_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -29,8 +29,16 @@ class gcc_arm_fenced_block : private noncopyable { public: - // Constructor. - gcc_arm_fenced_block() + enum half_t { half }; + enum full_t { full }; + + // Constructor for a half fenced block. + explicit gcc_arm_fenced_block(half_t) + { + } + + // Constructor for a full fenced block. + explicit gcc_arm_fenced_block(full_t) { barrier(); } diff --git a/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp index 6c5226b30f..421d3a6ad3 100644 --- a/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/gcc_hppa_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/gcc_hppa_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -29,8 +29,16 @@ class gcc_hppa_fenced_block : private noncopyable { public: - // Constructor. - gcc_hppa_fenced_block() + enum half_t { half }; + enum full_t { full }; + + // Constructor for a half fenced block. + explicit gcc_hppa_fenced_block(half_t) + { + } + + // Constructor for a full fenced block. + explicit gcc_hppa_fenced_block(full_t) { barrier(); } diff --git a/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp index 65472ccfc5..81aaeb035d 100644 --- a/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/gcc_sync_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/gcc_sync_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -32,8 +32,10 @@ class gcc_sync_fenced_block : private noncopyable { public: + enum half_or_full_t { half, full }; + // Constructor. - gcc_sync_fenced_block() + explicit gcc_sync_fenced_block(half_or_full_t) : value_(0) { __sync_lock_test_and_set(&value_, 1); diff --git a/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp b/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp index fb8473c7c0..973165ab1e 100644 --- a/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/gcc_x86_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/gcc_x86_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -29,25 +29,55 @@ class gcc_x86_fenced_block : private noncopyable { public: - // Constructor. - gcc_x86_fenced_block() + enum half_t { half }; + enum full_t { full }; + + // Constructor for a half fenced block. + explicit gcc_x86_fenced_block(half_t) { - barrier(); + } + + // Constructor for a full fenced block. + explicit gcc_x86_fenced_block(full_t) + { + lbarrier(); } // Destructor. ~gcc_x86_fenced_block() { - barrier(); + sbarrier(); } private: static int barrier() { - int r = 0; - __asm__ __volatile__ ("xchgl %%eax, %0" : "=m" (r) : : "memory", "cc"); + int r = 0, m = 1; + __asm__ __volatile__ ( + "xchgl %0, %1" : + "=r"(r), "=m"(m) : + "0"(1), "m"(m) : + "memory", "cc"); return r; } + + static void lbarrier() + { +#if defined(__SSE2__) + __asm__ __volatile__ ("lfence" ::: "memory"); +#else // defined(__SSE2__) + barrier(); +#endif // defined(__SSE2__) + } + + static void sbarrier() + { +#if defined(__SSE2__) + __asm__ __volatile__ ("sfence" ::: "memory"); +#else // defined(__SSE2__) + barrier(); +#endif // defined(__SSE2__) + } }; } // namespace detail diff --git a/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp b/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp index 609fb4b340..91e993c9cd 100644 --- a/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp +++ b/3party/boost/boost/asio/detail/handler_alloc_helpers.hpp @@ -2,7 +2,7 @@ // detail/handler_alloc_helpers.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp b/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp index 7c4320da5a..f6172a070b 100644 --- a/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp +++ b/3party/boost/boost/asio/detail/handler_invoke_helpers.hpp @@ -2,7 +2,7 @@ // detail/handler_invoke_helpers.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/handler_tracking.hpp b/3party/boost/boost/asio/detail/handler_tracking.hpp index 7f3dc846ea..9c96e18676 100644 --- a/3party/boost/boost/asio/detail/handler_tracking.hpp +++ b/3party/boost/boost/asio/detail/handler_tracking.hpp @@ -2,7 +2,7 @@ // detail/handler_tracking.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/handler_type_requirements.hpp b/3party/boost/boost/asio/detail/handler_type_requirements.hpp index 342af1e1a2..a7f47c2fe4 100644 --- a/3party/boost/boost/asio/detail/handler_type_requirements.hpp +++ b/3party/boost/boost/asio/detail/handler_type_requirements.hpp @@ -2,7 +2,7 @@ // detail/handler_type_requirements.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/hash_map.hpp b/3party/boost/boost/asio/detail/hash_map.hpp index da1a9f4cc8..339ab9d899 100644 --- a/3party/boost/boost/asio/detail/hash_map.hpp +++ b/3party/boost/boost/asio/detail/hash_map.hpp @@ -2,7 +2,7 @@ // detail/hash_map.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp b/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp index ca2222c44a..6c3528f309 100644 --- a/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp +++ b/3party/boost/boost/asio/detail/impl/descriptor_ops.ipp @@ -2,7 +2,7 @@ // detail/impl/descriptor_ops.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -203,7 +203,7 @@ std::size_t sync_read(int d, state_type state, buf* bufs, return 0; // Wait for descriptor to become ready. - if (descriptor_ops::poll_read(d, ec) < 0) + if (descriptor_ops::poll_read(d, 0, ec) < 0) return 0; } } @@ -280,7 +280,7 @@ std::size_t sync_write(int d, state_type state, const buf* bufs, return 0; // Wait for descriptor to become ready. - if (descriptor_ops::poll_write(d, ec) < 0) + if (descriptor_ops::poll_write(d, 0, ec) < 0) return 0; } } @@ -387,7 +387,7 @@ int fcntl(int d, long cmd, long arg, boost::system::error_code& ec) return result; } -int poll_read(int d, boost::system::error_code& ec) +int poll_read(int d, state_type state, boost::system::error_code& ec) { if (d == -1) { @@ -399,14 +399,18 @@ int poll_read(int d, boost::system::error_code& ec) fds.fd = d; fds.events = POLLIN; fds.revents = 0; + int timeout = (state & user_set_non_blocking) ? 0 : -1; errno = 0; - int result = error_wrapper(::poll(&fds, 1, -1), ec); - if (result >= 0) + int result = error_wrapper(::poll(&fds, 1, timeout), ec); + if (result == 0) + ec = (state & user_set_non_blocking) + ? boost::asio::error::would_block : boost::system::error_code(); + else if (result > 0) ec = boost::system::error_code(); return result; } -int poll_write(int d, boost::system::error_code& ec) +int poll_write(int d, state_type state, boost::system::error_code& ec) { if (d == -1) { @@ -418,9 +422,13 @@ int poll_write(int d, boost::system::error_code& ec) fds.fd = d; fds.events = POLLOUT; fds.revents = 0; + int timeout = (state & user_set_non_blocking) ? 0 : -1; errno = 0; - int result = error_wrapper(::poll(&fds, 1, -1), ec); - if (result >= 0) + int result = error_wrapper(::poll(&fds, 1, timeout), ec); + if (result == 0) + ec = (state & user_set_non_blocking) + ? boost::asio::error::would_block : boost::system::error_code(); + else if (result > 0) ec = boost::system::error_code(); return result; } diff --git a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp index 54b313fd3e..12860af93f 100644 --- a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp +++ b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.hpp @@ -2,7 +2,7 @@ // detail/impl/dev_poll_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -40,7 +40,7 @@ void dev_poll_reactor::remove_timer_queue(timer_queue& queue) template void dev_poll_reactor::schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op) + typename timer_queue::per_timer_data& timer, wait_op* op) { boost::asio::detail::mutex::scoped_lock lock(mutex_); diff --git a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp index a098256ea9..a648bf1532 100644 --- a/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp +++ b/3party/boost/boost/asio/detail/impl/dev_poll_reactor.ipp @@ -2,7 +2,7 @@ // detail/impl/dev_poll_reactor.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp b/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp index 0e8ae40bbf..215f484791 100644 --- a/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp +++ b/3party/boost/boost/asio/detail/impl/epoll_reactor.hpp @@ -2,7 +2,7 @@ // detail/impl/epoll_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -38,7 +38,7 @@ void epoll_reactor::remove_timer_queue(timer_queue& queue) template void epoll_reactor::schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op) + typename timer_queue::per_timer_data& timer, wait_op* op) { mutex::scoped_lock lock(mutex_); diff --git a/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp b/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp index 3be2426201..073bd08825 100644 --- a/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp +++ b/3party/boost/boost/asio/detail/impl/epoll_reactor.ipp @@ -2,7 +2,7 @@ // detail/impl/epoll_reactor.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -39,9 +39,9 @@ epoll_reactor::epoll_reactor(boost::asio::io_service& io_service) : boost::asio::detail::service_base(io_service), io_service_(use_service(io_service)), mutex_(), + interrupter_(), epoll_fd_(do_epoll_create()), timer_fd_(do_timerfd_create()), - interrupter_(), shutdown_(false) { // Add the interrupter's descriptor to epoll. @@ -127,7 +127,7 @@ void epoll_reactor::fork_service(boost::asio::io_service::fork_event fork_ev) for (descriptor_state* state = registered_descriptors_.first(); state != 0; state = state->next_) { - ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLOUT | EPOLLPRI | EPOLLET; + ev.events = state->registered_events_; ev.data.ptr = state; int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, state->descriptor_, &ev); if (result != 0) @@ -148,16 +148,19 @@ void epoll_reactor::init_task() int epoll_reactor::register_descriptor(socket_type descriptor, epoll_reactor::per_descriptor_data& descriptor_data) { - mutex::scoped_lock lock(registered_descriptors_mutex_); + descriptor_data = allocate_descriptor_state(); - descriptor_data = registered_descriptors_.alloc(); - descriptor_data->descriptor_ = descriptor; - descriptor_data->shutdown_ = false; + { + mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - lock.unlock(); + descriptor_data->reactor_ = this; + descriptor_data->descriptor_ = descriptor; + descriptor_data->shutdown_ = false; + } epoll_event ev = { 0, { 0 } }; - ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLOUT | EPOLLPRI | EPOLLET; + ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET; + descriptor_data->registered_events_ = ev.events; ev.data.ptr = descriptor_data; int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev); if (result != 0) @@ -170,17 +173,20 @@ int epoll_reactor::register_internal_descriptor( int op_type, socket_type descriptor, epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op) { - mutex::scoped_lock lock(registered_descriptors_mutex_); + descriptor_data = allocate_descriptor_state(); - descriptor_data = registered_descriptors_.alloc(); - descriptor_data->descriptor_ = descriptor; - descriptor_data->shutdown_ = false; - descriptor_data->op_queue_[op_type].push(op); + { + mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - lock.unlock(); + descriptor_data->reactor_ = this; + descriptor_data->descriptor_ = descriptor; + descriptor_data->shutdown_ = false; + descriptor_data->op_queue_[op_type].push(op); + } epoll_event ev = { 0, { 0 } }; - ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLOUT | EPOLLPRI | EPOLLET; + ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLPRI | EPOLLET; + descriptor_data->registered_events_ = ev.events; ev.data.ptr = descriptor_data; int result = epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, descriptor, &ev); if (result != 0) @@ -228,12 +234,37 @@ void epoll_reactor::start_op(int op_type, socket_type descriptor, io_service_.post_immediate_completion(op); return; } + + if (op_type == write_op) + { + if ((descriptor_data->registered_events_ & EPOLLOUT) == 0) + { + epoll_event ev = { 0, { 0 } }; + ev.events = descriptor_data->registered_events_ | EPOLLOUT; + ev.data.ptr = descriptor_data; + if (epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev) == 0) + { + descriptor_data->registered_events_ |= ev.events; + } + else + { + op->ec_ = boost::system::error_code(errno, + boost::asio::error::get_system_category()); + io_service_.post_immediate_completion(op); + return; + } + } + } } else { + if (op_type == write_op) + { + descriptor_data->registered_events_ |= EPOLLOUT; + } + epoll_event ev = { 0, { 0 } }; - ev.events = EPOLLIN | EPOLLERR | EPOLLHUP - | EPOLLOUT | EPOLLPRI | EPOLLET; + ev.events = descriptor_data->registered_events_; ev.data.ptr = descriptor_data; epoll_ctl(epoll_fd_, EPOLL_CTL_MOD, descriptor, &ev); } @@ -274,7 +305,6 @@ void epoll_reactor::deregister_descriptor(socket_type descriptor, return; mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); if (!descriptor_data->shutdown_) { @@ -305,11 +335,9 @@ void epoll_reactor::deregister_descriptor(socket_type descriptor, descriptor_lock.unlock(); - registered_descriptors_.free(descriptor_data); + free_descriptor_state(descriptor_data); descriptor_data = 0; - descriptors_lock.unlock(); - io_service_.post_deferred_completions(ops); } } @@ -321,7 +349,6 @@ void epoll_reactor::deregister_internal_descriptor(socket_type descriptor, return; mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); if (!descriptor_data->shutdown_) { @@ -337,15 +364,19 @@ void epoll_reactor::deregister_internal_descriptor(socket_type descriptor, descriptor_lock.unlock(); - registered_descriptors_.free(descriptor_data); + free_descriptor_state(descriptor_data); descriptor_data = 0; - - descriptors_lock.unlock(); } } void epoll_reactor::run(bool block, op_queue& ops) { + // This code relies on the fact that the task_io_service queues the reactor + // task behind all descriptor operations generated by this function. This + // means, that by the time we reach this point, any previously returned + // descriptor operations have already been dequeued. Therefore it is now safe + // for us to reuse and return them for the task_io_service to queue again. + // Calculate a timeout only if timerfd is not used. int timeout; if (timer_fd_ != -1) @@ -392,28 +423,12 @@ void epoll_reactor::run(bool block, op_queue& ops) #endif // defined(BOOST_ASIO_HAS_TIMERFD) else { + // The descriptor operation doesn't count as work in and of itself, so we + // don't call work_started() here. This still allows the io_service to + // stop if the only remaining operations are descriptor operations. descriptor_state* descriptor_data = static_cast(ptr); - mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - - // Exception operations must be processed first to ensure that any - // out-of-band data is read before normal data. - static const int flag[max_ops] = { EPOLLIN, EPOLLOUT, EPOLLPRI }; - for (int j = max_ops - 1; j >= 0; --j) - { - if (events[i].events & (flag[j] | EPOLLERR | EPOLLHUP)) - { - while (reactor_op* op = descriptor_data->op_queue_[j].front()) - { - if (op->perform()) - { - descriptor_data->op_queue_[j].pop(); - ops.push(op); - } - else - break; - } - } - } + descriptor_data->set_ready_events(events[i].events); + ops.push(descriptor_data); } } @@ -451,7 +466,7 @@ int epoll_reactor::do_epoll_create() errno = EINVAL; #endif // defined(EPOLL_CLOEXEC) - if (fd == -1 && errno == EINVAL) + if (fd == -1 && (errno == EINVAL || errno == ENOSYS)) { fd = epoll_create(epoll_size); if (fd != -1) @@ -491,6 +506,18 @@ int epoll_reactor::do_timerfd_create() #endif // defined(BOOST_ASIO_HAS_TIMERFD) } +epoll_reactor::descriptor_state* epoll_reactor::allocate_descriptor_state() +{ + mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); + return registered_descriptors_.alloc(); +} + +void epoll_reactor::free_descriptor_state(epoll_reactor::descriptor_state* s) +{ + mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); + registered_descriptors_.free(s); +} + void epoll_reactor::do_add_timer_queue(timer_queue_base& queue) { mutex::scoped_lock lock(mutex_); @@ -539,6 +566,92 @@ int epoll_reactor::get_timeout(itimerspec& ts) } #endif // defined(BOOST_ASIO_HAS_TIMERFD) +struct epoll_reactor::perform_io_cleanup_on_block_exit +{ + explicit perform_io_cleanup_on_block_exit(epoll_reactor* r) + : reactor_(r), first_op_(0) + { + } + + ~perform_io_cleanup_on_block_exit() + { + if (first_op_) + { + // Post the remaining completed operations for invocation. + if (!ops_.empty()) + reactor_->io_service_.post_deferred_completions(ops_); + + // A user-initiated operation has completed, but there's no need to + // explicitly call work_finished() here. Instead, we'll take advantage of + // the fact that the task_io_service will call work_finished() once we + // return. + } + else + { + // No user-initiated operations have completed, so we need to compensate + // for the work_finished() call that the task_io_service will make once + // this operation returns. + reactor_->io_service_.work_started(); + } + } + + epoll_reactor* reactor_; + op_queue ops_; + operation* first_op_; +}; + +epoll_reactor::descriptor_state::descriptor_state() + : operation(&epoll_reactor::descriptor_state::do_complete) +{ +} + +operation* epoll_reactor::descriptor_state::perform_io(uint32_t events) +{ + perform_io_cleanup_on_block_exit io_cleanup(reactor_); + mutex::scoped_lock descriptor_lock(mutex_); + + // Exception operations must be processed first to ensure that any + // out-of-band data is read before normal data. + static const int flag[max_ops] = { EPOLLIN, EPOLLOUT, EPOLLPRI }; + for (int j = max_ops - 1; j >= 0; --j) + { + if (events & (flag[j] | EPOLLERR | EPOLLHUP)) + { + while (reactor_op* op = op_queue_[j].front()) + { + if (op->perform()) + { + op_queue_[j].pop(); + io_cleanup.ops_.push(op); + } + else + break; + } + } + } + + // The first operation will be returned for completion now. The others will + // be posted for later by the io_cleanup object's destructor. + io_cleanup.first_op_ = io_cleanup.ops_.front(); + io_cleanup.ops_.pop(); + return io_cleanup.first_op_; +} + +void epoll_reactor::descriptor_state::do_complete( + io_service_impl* owner, operation* base, + const boost::system::error_code& ec, std::size_t bytes_transferred) +{ + if (owner) + { + descriptor_state* descriptor_data = static_cast(base); + uint32_t events = static_cast(bytes_transferred); + if (operation* op = descriptor_data->perform_io(events)) + { + op->complete(*owner, ec, 0); + } + } +} + } // namespace detail } // namespace asio } // namespace boost diff --git a/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp b/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp index e931efffb2..22154bb0c6 100644 --- a/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp +++ b/3party/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp @@ -2,7 +2,7 @@ // detail/impl/eventfd_select_interrupter.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/impl/handler_tracking.ipp b/3party/boost/boost/asio/detail/impl/handler_tracking.ipp index ec58195bc4..70342e3e69 100644 --- a/3party/boost/boost/asio/detail/impl/handler_tracking.ipp +++ b/3party/boost/boost/asio/detail/impl/handler_tracking.ipp @@ -2,7 +2,7 @@ // detail/impl/handler_tracking.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp b/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp index 411699740c..d3445cd006 100644 --- a/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp +++ b/3party/boost/boost/asio/detail/impl/kqueue_reactor.hpp @@ -2,7 +2,7 @@ // detail/impl/kqueue_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2005 Stefan Arentz (stefan at soze dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -42,7 +42,7 @@ void kqueue_reactor::remove_timer_queue(timer_queue& queue) template void kqueue_reactor::schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op) + typename timer_queue::per_timer_data& timer, wait_op* op) { boost::asio::detail::mutex::scoped_lock lock(mutex_); diff --git a/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp b/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp index f56c4c7c36..a819eb9b74 100644 --- a/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp +++ b/3party/boost/boost/asio/detail/impl/kqueue_reactor.ipp @@ -2,7 +2,7 @@ // detail/impl/kqueue_reactor.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2005 Stefan Arentz (stefan at soze dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -28,8 +28,8 @@ #if defined(__NetBSD__) # define BOOST_ASIO_KQUEUE_EV_SET(ev, ident, filt, flags, fflags, data, udata) \ - EV_SET(ev, ident, filt, flags, fflags, \ - data, reinterpret_cast(udata)) + EV_SET(ev, ident, filt, flags, fflags, data, \ + reinterpret_cast(static_cast(udata))) #else # define BOOST_ASIO_KQUEUE_EV_SET(ev, ident, filt, flags, fflags, data, udata) \ EV_SET(ev, ident, filt, flags, fflags, data, udata) @@ -126,9 +126,10 @@ void kqueue_reactor::init_task() int kqueue_reactor::register_descriptor(socket_type descriptor, kqueue_reactor::per_descriptor_data& descriptor_data) { - mutex::scoped_lock lock(registered_descriptors_mutex_); + descriptor_data = allocate_descriptor_state(); + + mutex::scoped_lock lock(descriptor_data->mutex_); - descriptor_data = registered_descriptors_.alloc(); descriptor_data->descriptor_ = descriptor; descriptor_data->shutdown_ = false; @@ -139,9 +140,10 @@ int kqueue_reactor::register_internal_descriptor( int op_type, socket_type descriptor, kqueue_reactor::per_descriptor_data& descriptor_data, reactor_op* op) { - mutex::scoped_lock lock(registered_descriptors_mutex_); + descriptor_data = allocate_descriptor_state(); + + mutex::scoped_lock lock(descriptor_data->mutex_); - descriptor_data = registered_descriptors_.alloc(); descriptor_data->descriptor_ = descriptor; descriptor_data->shutdown_ = false; descriptor_data->op_queue_[op_type].push(op); @@ -276,7 +278,6 @@ void kqueue_reactor::deregister_descriptor(socket_type descriptor, return; mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); if (!descriptor_data->shutdown_) { @@ -311,11 +312,9 @@ void kqueue_reactor::deregister_descriptor(socket_type descriptor, descriptor_lock.unlock(); - registered_descriptors_.free(descriptor_data); + free_descriptor_state(descriptor_data); descriptor_data = 0; - descriptors_lock.unlock(); - io_service_.post_deferred_completions(ops); } } @@ -327,7 +326,6 @@ void kqueue_reactor::deregister_internal_descriptor(socket_type descriptor, return; mutex::scoped_lock descriptor_lock(descriptor_data->mutex_); - mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); if (!descriptor_data->shutdown_) { @@ -347,10 +345,8 @@ void kqueue_reactor::deregister_internal_descriptor(socket_type descriptor, descriptor_lock.unlock(); - registered_descriptors_.free(descriptor_data); + free_descriptor_state(descriptor_data); descriptor_data = 0; - - descriptors_lock.unlock(); } } @@ -483,6 +479,18 @@ int kqueue_reactor::do_kqueue_create() return fd; } +kqueue_reactor::descriptor_state* kqueue_reactor::allocate_descriptor_state() +{ + mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); + return registered_descriptors_.alloc(); +} + +void kqueue_reactor::free_descriptor_state(kqueue_reactor::descriptor_state* s) +{ + mutex::scoped_lock descriptors_lock(registered_descriptors_mutex_); + registered_descriptors_.free(s); +} + void kqueue_reactor::do_add_timer_queue(timer_queue_base& queue) { mutex::scoped_lock lock(mutex_); diff --git a/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp b/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp index 59aa05372b..75a8d16a41 100644 --- a/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp +++ b/3party/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp @@ -2,7 +2,7 @@ // detail/impl/pipe_select_interrupter.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/posix_event.ipp b/3party/boost/boost/asio/detail/impl/posix_event.ipp index 893e8cc00b..08eae05c8a 100644 --- a/3party/boost/boost/asio/detail/impl/posix_event.ipp +++ b/3party/boost/boost/asio/detail/impl/posix_event.ipp @@ -2,7 +2,7 @@ // detail/impl/posix_event.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/posix_mutex.ipp b/3party/boost/boost/asio/detail/impl/posix_mutex.ipp index 908bfab323..94b9bf4a0b 100644 --- a/3party/boost/boost/asio/detail/impl/posix_mutex.ipp +++ b/3party/boost/boost/asio/detail/impl/posix_mutex.ipp @@ -2,7 +2,7 @@ // detail/impl/posix_mutex.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/posix_thread.ipp b/3party/boost/boost/asio/detail/impl/posix_thread.ipp index feb6dd16dd..0c529715d3 100644 --- a/3party/boost/boost/asio/detail/impl/posix_thread.ipp +++ b/3party/boost/boost/asio/detail/impl/posix_thread.ipp @@ -2,7 +2,7 @@ // detail/impl/posix_thread.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp b/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp index 89c1bf5c09..5124c5fb3b 100644 --- a/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp +++ b/3party/boost/boost/asio/detail/impl/posix_tss_ptr.ipp @@ -2,7 +2,7 @@ // detail/impl/posix_tss_ptr.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp b/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp index 38d42be3d4..dff0a82292 100644 --- a/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp +++ b/3party/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp @@ -2,7 +2,7 @@ // detail/impl/reactive_descriptor_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp b/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp index f97946fa4c..0f530d7b52 100644 --- a/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp +++ b/3party/boost/boost/asio/detail/impl/reactive_serial_port_service.ipp @@ -2,7 +2,7 @@ // detail/impl/reactive_serial_port_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp b/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp index 0936e92974..93277e0846 100644 --- a/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp +++ b/3party/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp @@ -2,7 +2,7 @@ // detail/reactive_socket_service_base.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp b/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp index 241880737a..6a384e4f8b 100644 --- a/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp +++ b/3party/boost/boost/asio/detail/impl/resolver_service_base.ipp @@ -2,7 +2,7 @@ // detail/impl/resolver_service_base.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/select_reactor.hpp b/3party/boost/boost/asio/detail/impl/select_reactor.hpp index 5ba1806735..0d4097ee03 100644 --- a/3party/boost/boost/asio/detail/impl/select_reactor.hpp +++ b/3party/boost/boost/asio/detail/impl/select_reactor.hpp @@ -2,7 +2,7 @@ // detail/impl/select_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -44,7 +44,7 @@ void select_reactor::remove_timer_queue(timer_queue& queue) template void select_reactor::schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op) + typename timer_queue::per_timer_data& timer, wait_op* op) { boost::asio::detail::mutex::scoped_lock lock(mutex_); diff --git a/3party/boost/boost/asio/detail/impl/select_reactor.ipp b/3party/boost/boost/asio/detail/impl/select_reactor.ipp index 7117353923..d11904e40d 100644 --- a/3party/boost/boost/asio/detail/impl/select_reactor.ipp +++ b/3party/boost/boost/asio/detail/impl/select_reactor.ipp @@ -2,7 +2,7 @@ // detail/impl/select_reactor.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -172,27 +172,28 @@ void select_reactor::run(bool block, op_queue& ops) #endif // defined(BOOST_ASIO_HAS_IOCP) // Set up the descriptor sets. - fd_set_adapter fds[max_select_ops]; - fds[read_op].set(interrupter_.read_descriptor()); + for (int i = 0; i < max_select_ops; ++i) + fd_sets_[i].reset(); + fd_sets_[read_op].set(interrupter_.read_descriptor()); socket_type max_fd = 0; bool have_work_to_do = !timer_queues_.all_empty(); for (int i = 0; i < max_select_ops; ++i) { have_work_to_do = have_work_to_do || !op_queue_[i].empty(); - op_queue_[i].get_descriptors(fds[i], ops); - if (fds[i].max_descriptor() > max_fd) - max_fd = fds[i].max_descriptor(); + op_queue_[i].get_descriptors(fd_sets_[i], ops); + if (fd_sets_[i].max_descriptor() > max_fd) + max_fd = fd_sets_[i].max_descriptor(); } #if defined(BOOST_WINDOWS) || defined(__CYGWIN__) // Connection operations on Windows use both except and write fd_sets. have_work_to_do = have_work_to_do || !op_queue_[connect_op].empty(); - op_queue_[connect_op].get_descriptors(fds[write_op], ops); - if (fds[write_op].max_descriptor() > max_fd) - max_fd = fds[write_op].max_descriptor(); - op_queue_[connect_op].get_descriptors(fds[except_op], ops); - if (fds[except_op].max_descriptor() > max_fd) - max_fd = fds[except_op].max_descriptor(); + op_queue_[connect_op].get_descriptors(fd_sets_[write_op], ops); + if (fd_sets_[write_op].max_descriptor() > max_fd) + max_fd = fd_sets_[write_op].max_descriptor(); + op_queue_[connect_op].get_descriptors(fd_sets_[except_op], ops); + if (fd_sets_[except_op].max_descriptor() > max_fd) + max_fd = fd_sets_[except_op].max_descriptor(); #endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__) // We can return immediately if there's no work to do and the reactor is @@ -209,11 +210,14 @@ void select_reactor::run(bool block, op_queue& ops) // Block on the select call until descriptors become ready. boost::system::error_code ec; int retval = socket_ops::select(static_cast(max_fd + 1), - fds[read_op], fds[write_op], fds[except_op], tv, ec); + fd_sets_[read_op], fd_sets_[write_op], fd_sets_[except_op], tv, ec); // Reset the interrupter. - if (retval > 0 && fds[read_op].is_set(interrupter_.read_descriptor())) + if (retval > 0 && fd_sets_[read_op].is_set(interrupter_.read_descriptor())) + { interrupter_.reset(); + --retval; + } lock.lock(); @@ -223,15 +227,15 @@ void select_reactor::run(bool block, op_queue& ops) #if defined(BOOST_WINDOWS) || defined(__CYGWIN__) // Connection operations on Windows use both except and write fd_sets. op_queue_[connect_op].perform_operations_for_descriptors( - fds[except_op], ops); + fd_sets_[except_op], ops); op_queue_[connect_op].perform_operations_for_descriptors( - fds[write_op], ops); + fd_sets_[write_op], ops); #endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__) // Exception operations must be processed first to ensure that any // out-of-band data is read before normal data. for (int i = max_select_ops - 1; i >= 0; --i) - op_queue_[i].perform_operations_for_descriptors(fds[i], ops); + op_queue_[i].perform_operations_for_descriptors(fd_sets_[i], ops); } timer_queues_.get_ready_timers(ops); } diff --git a/3party/boost/boost/asio/detail/impl/service_registry.hpp b/3party/boost/boost/asio/detail/impl/service_registry.hpp index 97f5771cbf..eef25ac73d 100644 --- a/3party/boost/boost/asio/detail/impl/service_registry.hpp +++ b/3party/boost/boost/asio/detail/impl/service_registry.hpp @@ -2,7 +2,7 @@ // detail/impl/service_registry.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -21,6 +21,24 @@ namespace boost { namespace asio { namespace detail { +template +service_registry::service_registry( + boost::asio::io_service& o, Service*, Arg arg) + : owner_(o), + first_service_(new Service(o, arg)) +{ + boost::asio::io_service::service::key key; + init_key(key, Service::id); + first_service_->key_ = key; + first_service_->next_ = 0; +} + +template +Service& service_registry::first_service() +{ + return *static_cast(first_service_); +} + template Service& service_registry::use_service() { diff --git a/3party/boost/boost/asio/detail/impl/service_registry.ipp b/3party/boost/boost/asio/detail/impl/service_registry.ipp index 8c80f6cc11..6715010504 100644 --- a/3party/boost/boost/asio/detail/impl/service_registry.ipp +++ b/3party/boost/boost/asio/detail/impl/service_registry.ipp @@ -2,7 +2,7 @@ // detail/impl/service_registry.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -26,12 +26,6 @@ namespace boost { namespace asio { namespace detail { -service_registry::service_registry(boost::asio::io_service& o) - : owner_(o), - first_service_(0) -{ -} - service_registry::~service_registry() { // Shutdown all services. This must be done in a separate loop before the diff --git a/3party/boost/boost/asio/detail/impl/signal_set_service.ipp b/3party/boost/boost/asio/detail/impl/signal_set_service.ipp index c1dedd4cce..0b57007a98 100644 --- a/3party/boost/boost/asio/detail/impl/signal_set_service.ipp +++ b/3party/boost/boost/asio/detail/impl/signal_set_service.ipp @@ -2,7 +2,7 @@ // detail/impl/signal_set_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -71,7 +71,7 @@ void asio_signal_handler(int signal_number) #endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__) #if defined(BOOST_ASIO_HAS_SIGNAL) && !defined(BOOST_ASIO_HAS_SIGACTION) - signal(signal_number, asio_signal_handler); + ::signal(signal_number, asio_signal_handler); #endif // defined(BOOST_ASIO_HAS_SIGNAL) && !defined(BOOST_ASIO_HAS_SIGACTION) } @@ -98,7 +98,8 @@ public: } static void do_complete(io_service_impl* /*owner*/, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { pipe_read_op* o(static_cast(base)); delete o; diff --git a/3party/boost/boost/asio/detail/impl/socket_ops.ipp b/3party/boost/boost/asio/detail/impl/socket_ops.ipp index 55b63481ac..16e95366e6 100644 --- a/3party/boost/boost/asio/detail/impl/socket_ops.ipp +++ b/3party/boost/boost/asio/detail/impl/socket_ops.ipp @@ -2,7 +2,7 @@ // detail/impl/socket_ops.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -148,7 +149,7 @@ socket_type sync_accept(socket_type s, state_type state, return invalid_socket; // Wait for socket to become ready. - if (socket_ops::poll_read(s, ec) < 0) + if (socket_ops::poll_read(s, 0, ec) < 0) return invalid_socket; } } @@ -465,6 +466,10 @@ int connect(socket_type s, const socket_addr_type* addr, &msghdr::msg_namelen, s, addr, addrlen), ec); if (result == 0) ec = boost::system::error_code(); +#if defined(__linux__) + else if (ec == boost::asio::error::try_again) + ec = boost::asio::error::no_buffer_space; +#endif // defined(__linux__) return result; } @@ -735,7 +740,7 @@ size_t sync_recv(socket_type s, state_type state, buf* bufs, return 0; // Wait for socket to become ready. - if (socket_ops::poll_read(s, ec) < 0) + if (socket_ops::poll_read(s, 0, ec) < 0) return 0; } } @@ -873,7 +878,7 @@ size_t sync_recvfrom(socket_type s, state_type state, buf* bufs, return 0; // Wait for socket to become ready. - if (socket_ops::poll_read(s, ec) < 0) + if (socket_ops::poll_read(s, 0, ec) < 0) return 0; } } @@ -984,7 +989,7 @@ size_t sync_recvmsg(socket_type s, state_type state, return 0; // Wait for socket to become ready. - if (socket_ops::poll_read(s, ec) < 0) + if (socket_ops::poll_read(s, 0, ec) < 0) return 0; } } @@ -1110,7 +1115,7 @@ size_t sync_send(socket_type s, state_type state, const buf* bufs, return 0; // Wait for socket to become ready. - if (socket_ops::poll_write(s, ec) < 0) + if (socket_ops::poll_write(s, 0, ec) < 0) return 0; } } @@ -1233,7 +1238,7 @@ size_t sync_sendto(socket_type s, state_type state, const buf* bufs, return 0; // Wait for socket to become ready. - if (socket_ops::poll_write(s, ec) < 0) + if (socket_ops::poll_write(s, 0, ec) < 0) return 0; } } @@ -1683,7 +1688,7 @@ int select(int nfds, fd_set* readfds, fd_set* writefds, #endif } -int poll_read(socket_type s, boost::system::error_code& ec) +int poll_read(socket_type s, state_type state, boost::system::error_code& ec) { if (s == invalid_socket) { @@ -1697,11 +1702,12 @@ int poll_read(socket_type s, boost::system::error_code& ec) fd_set fds; FD_ZERO(&fds); FD_SET(s, &fds); + timeval zero_timeout; + zero_timeout.tv_sec = 0; + zero_timeout.tv_usec = 0; + timeval* timeout = (state & user_set_non_blocking) ? &zero_timeout : 0; clear_last_error(); - int result = error_wrapper(::select(s, &fds, 0, 0, 0), ec); - if (result >= 0) - ec = boost::system::error_code(); - return result; + int result = error_wrapper(::select(s, &fds, 0, 0, timeout), ec); #else // defined(BOOST_WINDOWS) // || defined(__CYGWIN__) // || defined(__SYMBIAN32__) @@ -1709,17 +1715,21 @@ int poll_read(socket_type s, boost::system::error_code& ec) fds.fd = s; fds.events = POLLIN; fds.revents = 0; + int timeout = (state & user_set_non_blocking) ? 0 : -1; clear_last_error(); - int result = error_wrapper(::poll(&fds, 1, -1), ec); - if (result >= 0) - ec = boost::system::error_code(); - return result; + int result = error_wrapper(::poll(&fds, 1, timeout), ec); #endif // defined(BOOST_WINDOWS) // || defined(__CYGWIN__) // || defined(__SYMBIAN32__) + if (result == 0) + ec = (state & user_set_non_blocking) + ? boost::asio::error::would_block : boost::system::error_code(); + else if (result > 0) + ec = boost::system::error_code(); + return result; } -int poll_write(socket_type s, boost::system::error_code& ec) +int poll_write(socket_type s, state_type state, boost::system::error_code& ec) { if (s == invalid_socket) { @@ -1733,11 +1743,12 @@ int poll_write(socket_type s, boost::system::error_code& ec) fd_set fds; FD_ZERO(&fds); FD_SET(s, &fds); + timeval zero_timeout; + zero_timeout.tv_sec = 0; + zero_timeout.tv_usec = 0; + timeval* timeout = (state & user_set_non_blocking) ? &zero_timeout : 0; clear_last_error(); - int result = error_wrapper(::select(s, 0, &fds, 0, 0), ec); - if (result >= 0) - ec = boost::system::error_code(); - return result; + int result = error_wrapper(::select(s, 0, &fds, 0, timeout), ec); #else // defined(BOOST_WINDOWS) // || defined(__CYGWIN__) // || defined(__SYMBIAN32__) @@ -1745,14 +1756,18 @@ int poll_write(socket_type s, boost::system::error_code& ec) fds.fd = s; fds.events = POLLOUT; fds.revents = 0; + int timeout = (state & user_set_non_blocking) ? 0 : -1; clear_last_error(); - int result = error_wrapper(::poll(&fds, 1, -1), ec); - if (result >= 0) - ec = boost::system::error_code(); - return result; + int result = error_wrapper(::poll(&fds, 1, timeout), ec); #endif // defined(BOOST_WINDOWS) // || defined(__CYGWIN__) // || defined(__SYMBIAN32__) + if (result == 0) + ec = (state & user_set_non_blocking) + ? boost::asio::error::would_block : boost::system::error_code(); + else if (result > 0) + ec = boost::system::error_code(); + return result; } int poll_connect(socket_type s, boost::system::error_code& ec) diff --git a/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp b/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp index 533bafd853..6005f12eae 100644 --- a/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp +++ b/3party/boost/boost/asio/detail/impl/socket_select_interrupter.ipp @@ -2,7 +2,7 @@ // detail/impl/socket_select_interrupter.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/strand_service.hpp b/3party/boost/boost/asio/detail/impl/strand_service.hpp index bb3698a2e7..7581852ff5 100644 --- a/3party/boost/boost/asio/detail/impl/strand_service.hpp +++ b/3party/boost/boost/asio/detail/impl/strand_service.hpp @@ -2,7 +2,7 @@ // detail/impl/strand_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -29,7 +29,7 @@ namespace detail { inline strand_service::strand_impl::strand_impl() : operation(&strand_service::do_complete), - count_(0) + locked_(false) { } @@ -41,7 +41,8 @@ struct strand_service::on_dispatch_exit ~on_dispatch_exit() { impl_->mutex_.lock(); - bool more_handlers = (--impl_->count_ > 0); + impl_->ready_queue_.push(impl_->waiting_queue_); + bool more_handlers = impl_->locked_ = !impl_->ready_queue_.empty(); impl_->mutex_.unlock(); if (more_handlers) @@ -49,11 +50,6 @@ struct strand_service::on_dispatch_exit } }; -inline void strand_service::destroy(strand_service::implementation_type& impl) -{ - impl = 0; -} - template void strand_service::dispatch(strand_service::implementation_type& impl, Handler handler) @@ -61,7 +57,7 @@ void strand_service::dispatch(strand_service::implementation_type& impl, // If we are already in the strand then the handler can run immediately. if (call_stack::contains(impl)) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::full); boost_asio_handler_invoke_helpers::invoke(handler, handler); return; } diff --git a/3party/boost/boost/asio/detail/impl/strand_service.ipp b/3party/boost/boost/asio/detail/impl/strand_service.ipp index 62a8d5c03d..1912d80f72 100644 --- a/3party/boost/boost/asio/detail/impl/strand_service.ipp +++ b/3party/boost/boost/asio/detail/impl/strand_service.ipp @@ -2,7 +2,7 @@ // detail/impl/strand_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -33,11 +33,12 @@ struct strand_service::on_do_complete_exit ~on_do_complete_exit() { impl_->mutex_.lock(); - bool more_handlers = (--impl_->count_ > 0); + impl_->ready_queue_.push(impl_->waiting_queue_); + bool more_handlers = impl_->locked_ = !impl_->ready_queue_.empty(); impl_->mutex_.unlock(); if (more_handlers) - owner_->post_immediate_completion(impl_); + owner_->post_private_immediate_completion(impl_); } }; @@ -56,20 +57,29 @@ void strand_service::shutdown_service() boost::asio::detail::mutex::scoped_lock lock(mutex_); for (std::size_t i = 0; i < num_implementations; ++i) + { if (strand_impl* impl = implementations_[i].get()) - ops.push(impl->queue_); + { + ops.push(impl->waiting_queue_); + ops.push(impl->ready_queue_); + } + } } void strand_service::construct(strand_service::implementation_type& impl) { + boost::asio::detail::mutex::scoped_lock lock(mutex_); + std::size_t salt = salt_++; +#if defined(BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION) + std::size_t index = salt; +#else // defined(BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION) std::size_t index = reinterpret_cast(&impl); index += (reinterpret_cast(&impl) >> 3); index ^= salt + 0x9e3779b9 + (index << 6) + (index >> 2); +#endif // defined(BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION) index = index % num_implementations; - boost::asio::detail::mutex::scoped_lock lock(mutex_); - if (!implementations_[index].get()) implementations_[index].reset(new strand_impl); impl = implementations_[index].get(); @@ -77,56 +87,64 @@ void strand_service::construct(strand_service::implementation_type& impl) bool strand_service::do_dispatch(implementation_type& impl, operation* op) { - // If we are running inside the io_service, and no other handler is queued - // or running, then the handler can run immediately. - bool can_dispatch = call_stack::contains(&io_service_); + // If we are running inside the io_service, and no other handler already + // holds the strand lock, then the handler can run immediately. + bool can_dispatch = io_service_.can_dispatch(); impl->mutex_.lock(); - bool first = (++impl->count_ == 1); - if (can_dispatch && first) + if (can_dispatch && !impl->locked_) { // Immediate invocation is allowed. + impl->locked_ = true; impl->mutex_.unlock(); return true; } - // Immediate invocation is not allowed, so enqueue for later. - impl->queue_.push(op); - impl->mutex_.unlock(); - - // The first handler to be enqueued is responsible for scheduling the - // strand. - if (first) + if (impl->locked_) + { + // Some other handler already holds the strand lock. Enqueue for later. + impl->waiting_queue_.push(op); + impl->mutex_.unlock(); + } + else + { + // The handler is acquiring the strand lock and so is responsible for + // scheduling the strand. + impl->locked_ = true; + impl->mutex_.unlock(); + impl->ready_queue_.push(op); io_service_.post_immediate_completion(impl); + } return false; } void strand_service::do_post(implementation_type& impl, operation* op) { - // Add the handler to the queue. impl->mutex_.lock(); - bool first = (++impl->count_ == 1); - impl->queue_.push(op); - impl->mutex_.unlock(); - - // The first handler to be enqueue is responsible for scheduling the strand. - if (first) + if (impl->locked_) + { + // Some other handler already holds the strand lock. Enqueue for later. + impl->waiting_queue_.push(op); + impl->mutex_.unlock(); + } + else + { + // The handler is acquiring the strand lock and so is responsible for + // scheduling the strand. + impl->locked_ = true; + impl->mutex_.unlock(); + impl->ready_queue_.push(op); io_service_.post_immediate_completion(impl); + } } void strand_service::do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& ec, std::size_t /*bytes_transferred*/) { if (owner) { strand_impl* impl = static_cast(base); - // Get the next handler to be executed. - impl->mutex_.lock(); - operation* o = impl->queue_.front(); - impl->queue_.pop(); - impl->mutex_.unlock(); - // Indicate that this strand is executing on the current thread. call_stack::context ctx(impl); @@ -134,7 +152,13 @@ void strand_service::do_complete(io_service_impl* owner, operation* base, on_do_complete_exit on_exit = { owner, impl }; (void)on_exit; - o->complete(*owner); + // Run all ready handlers. No lock is required since the ready queue is + // accessed only within the strand. + while (operation* o = impl->ready_queue_.front()) + { + impl->ready_queue_.pop(); + o->complete(*owner, ec, 0); + } } } diff --git a/3party/boost/boost/asio/detail/impl/task_io_service.hpp b/3party/boost/boost/asio/detail/impl/task_io_service.hpp index ee23cb90a0..2cc7b7eea1 100644 --- a/3party/boost/boost/asio/detail/impl/task_io_service.hpp +++ b/3party/boost/boost/asio/detail/impl/task_io_service.hpp @@ -2,7 +2,7 @@ // detail/impl/task_io_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -15,7 +15,6 @@ # pragma once #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) -#include #include #include #include @@ -30,9 +29,9 @@ namespace detail { template void task_io_service::dispatch(Handler handler) { - if (call_stack::contains(this)) + if (thread_call_stack::contains(this)) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::full); boost_asio_handler_invoke_helpers::invoke(handler, handler); } else @@ -46,7 +45,7 @@ void task_io_service::dispatch(Handler handler) BOOST_ASIO_HANDLER_CREATION((p.p, "io_service", this, "dispatch")); - post_immediate_completion(p.p); + post_non_private_immediate_completion(p.p); p.v = p.p = 0; } } diff --git a/3party/boost/boost/asio/detail/impl/task_io_service.ipp b/3party/boost/boost/asio/detail/impl/task_io_service.ipp index 5b1d069727..674df638fe 100644 --- a/3party/boost/boost/asio/detail/impl/task_io_service.ipp +++ b/3party/boost/boost/asio/detail/impl/task_io_service.ipp @@ -2,7 +2,7 @@ // detail/impl/task_io_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -20,7 +20,6 @@ #if !defined(BOOST_ASIO_HAS_IOCP) #include -#include #include #include #include @@ -31,41 +30,73 @@ namespace boost { namespace asio { namespace detail { +struct task_io_service::thread_info +{ + event* wakeup_event; + op_queue private_op_queue; + long private_outstanding_work; + thread_info* next; +}; + struct task_io_service::task_cleanup { ~task_cleanup() { + if (this_thread_->private_outstanding_work > 0) + { + boost::asio::detail::increment( + task_io_service_->outstanding_work_, + this_thread_->private_outstanding_work); + } + this_thread_->private_outstanding_work = 0; + // Enqueue the completed operations and reinsert the task at the end of // the operation queue. lock_->lock(); task_io_service_->task_interrupted_ = true; - task_io_service_->op_queue_.push(*ops_); + task_io_service_->op_queue_.push(this_thread_->private_op_queue); task_io_service_->op_queue_.push(&task_io_service_->task_operation_); } task_io_service* task_io_service_; mutex::scoped_lock* lock_; - op_queue* ops_; + thread_info* this_thread_; }; -struct task_io_service::work_finished_on_block_exit +struct task_io_service::work_cleanup { - ~work_finished_on_block_exit() + ~work_cleanup() { - task_io_service_->work_finished(); + if (this_thread_->private_outstanding_work > 1) + { + boost::asio::detail::increment( + task_io_service_->outstanding_work_, + this_thread_->private_outstanding_work - 1); + } + else if (this_thread_->private_outstanding_work < 1) + { + task_io_service_->work_finished(); + } + this_thread_->private_outstanding_work = 0; + +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + if (!this_thread_->private_op_queue.empty()) + { + lock_->lock(); + task_io_service_->op_queue_.push(this_thread_->private_op_queue); + } +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) } task_io_service* task_io_service_; + mutex::scoped_lock* lock_; + thread_info* this_thread_; }; -struct task_io_service::idle_thread_info -{ - event wakeup_event; - idle_thread_info* next; -}; - -task_io_service::task_io_service(boost::asio::io_service& io_service) +task_io_service::task_io_service( + boost::asio::io_service& io_service, std::size_t concurrency_hint) : boost::asio::detail::service_base(io_service), + one_thread_(concurrency_hint == 1), mutex_(), task_(0), task_interrupted_(true), @@ -77,10 +108,6 @@ task_io_service::task_io_service(boost::asio::io_service& io_service) BOOST_ASIO_HANDLER_TRACKING_INIT; } -void task_io_service::init(std::size_t /*concurrency_hint*/) -{ -} - void task_io_service::shutdown_service() { mutex::scoped_lock lock(mutex_); @@ -120,15 +147,17 @@ std::size_t task_io_service::run(boost::system::error_code& ec) return 0; } - call_stack::context ctx(this); - - idle_thread_info this_idle_thread; - this_idle_thread.next = 0; + thread_info this_thread; + event wakeup_event; + this_thread.wakeup_event = &wakeup_event; + this_thread.private_outstanding_work = 0; + this_thread.next = 0; + thread_call_stack::context ctx(this, this_thread); mutex::scoped_lock lock(mutex_); std::size_t n = 0; - for (; do_one(lock, &this_idle_thread); lock.lock()) + for (; do_run_one(lock, this_thread, ec); lock.lock()) if (n != (std::numeric_limits::max)()) ++n; return n; @@ -143,31 +172,46 @@ std::size_t task_io_service::run_one(boost::system::error_code& ec) return 0; } - call_stack::context ctx(this); - - idle_thread_info this_idle_thread; - this_idle_thread.next = 0; + thread_info this_thread; + event wakeup_event; + this_thread.wakeup_event = &wakeup_event; + this_thread.private_outstanding_work = 0; + this_thread.next = 0; + thread_call_stack::context ctx(this, this_thread); mutex::scoped_lock lock(mutex_); - return do_one(lock, &this_idle_thread); + return do_run_one(lock, this_thread, ec); } std::size_t task_io_service::poll(boost::system::error_code& ec) { + ec = boost::system::error_code(); if (outstanding_work_ == 0) { stop(); - ec = boost::system::error_code(); return 0; } - call_stack::context ctx(this); + thread_info this_thread; + this_thread.wakeup_event = 0; + this_thread.private_outstanding_work = 0; + this_thread.next = 0; + thread_call_stack::context ctx(this, this_thread); mutex::scoped_lock lock(mutex_); +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + // We want to support nested calls to poll() and poll_one(), so any handlers + // that are already on a thread-private queue need to be put on to the main + // queue now. + if (one_thread_) + if (thread_info* outer_thread_info = ctx.next_by_key()) + op_queue_.push(outer_thread_info->private_op_queue); +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + std::size_t n = 0; - for (; do_one(lock, 0); lock.lock()) + for (; do_poll_one(lock, this_thread, ec); lock.lock()) if (n != (std::numeric_limits::max)()) ++n; return n; @@ -182,11 +226,24 @@ std::size_t task_io_service::poll_one(boost::system::error_code& ec) return 0; } - call_stack::context ctx(this); + thread_info this_thread; + this_thread.wakeup_event = 0; + this_thread.private_outstanding_work = 0; + this_thread.next = 0; + thread_call_stack::context ctx(this, this_thread); mutex::scoped_lock lock(mutex_); - return do_one(lock, 0); +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + // We want to support nested calls to poll() and poll_one(), so any handlers + // that are already on a thread-private queue need to be put on to the main + // queue now. + if (one_thread_) + if (thread_info* outer_thread_info = ctx.next_by_key()) + op_queue_.push(outer_thread_info->private_op_queue); +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + + return do_poll_one(lock, this_thread, ec); } void task_io_service::stop() @@ -209,12 +266,37 @@ void task_io_service::reset() void task_io_service::post_immediate_completion(task_io_service::operation* op) { +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + if (one_thread_) + { + if (thread_info* this_thread = thread_call_stack::contains(this)) + { + ++this_thread->private_outstanding_work; + this_thread->private_op_queue.push(op); + return; + } + } +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + work_started(); - post_deferred_completion(op); + mutex::scoped_lock lock(mutex_); + op_queue_.push(op); + wake_one_thread_and_unlock(lock); } void task_io_service::post_deferred_completion(task_io_service::operation* op) { +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + if (one_thread_) + { + if (thread_info* this_thread = thread_call_stack::contains(this)) + { + this_thread->private_op_queue.push(op); + return; + } + } +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + mutex::scoped_lock lock(mutex_); op_queue_.push(op); wake_one_thread_and_unlock(lock); @@ -225,12 +307,61 @@ void task_io_service::post_deferred_completions( { if (!ops.empty()) { +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + if (one_thread_) + { + if (thread_info* this_thread = thread_call_stack::contains(this)) + { + this_thread->private_op_queue.push(ops); + return; + } + } +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + mutex::scoped_lock lock(mutex_); op_queue_.push(ops); wake_one_thread_and_unlock(lock); } } +void task_io_service::post_private_immediate_completion( + task_io_service::operation* op) +{ + work_started(); + post_private_deferred_completion(op); +} + +void task_io_service::post_private_deferred_completion( + task_io_service::operation* op) +{ +#if defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + if (thread_info* this_thread = thread_call_stack::contains(this)) + { + this_thread->private_op_queue.push(op); + return; + } +#endif // defined(BOOST_HAS_THREADS) && !defined(BOOST_ASIO_DISABLE_THREADS) + + mutex::scoped_lock lock(mutex_); + op_queue_.push(op); + wake_one_thread_and_unlock(lock); +} + +void task_io_service::post_non_private_immediate_completion( + task_io_service::operation* op) +{ + work_started(); + post_non_private_deferred_completion(op); +} + +void task_io_service::post_non_private_deferred_completion( + task_io_service::operation* op) +{ + mutex::scoped_lock lock(mutex_); + op_queue_.push(op); + wake_one_thread_and_unlock(lock); +} + void task_io_service::abandon_operations( op_queue& ops) { @@ -238,11 +369,10 @@ void task_io_service::abandon_operations( ops2.push(ops); } -std::size_t task_io_service::do_one(mutex::scoped_lock& lock, - task_io_service::idle_thread_info* this_idle_thread) +std::size_t task_io_service::do_run_one(mutex::scoped_lock& lock, + task_io_service::thread_info& this_thread, + const boost::system::error_code& ec) { - bool polling = !this_idle_thread; - bool task_has_run = false; while (!stopped_) { if (!op_queue_.empty()) @@ -254,63 +384,107 @@ std::size_t task_io_service::do_one(mutex::scoped_lock& lock, if (o == &task_operation_) { - task_interrupted_ = more_handlers || polling; + task_interrupted_ = more_handlers; - // If the task has already run and we're polling then we're done. - if (task_has_run && polling) + if (more_handlers && !one_thread_) { - task_interrupted_ = true; - op_queue_.push(&task_operation_); - return 0; + if (!wake_one_idle_thread_and_unlock(lock)) + lock.unlock(); } - task_has_run = true; - - if (!more_handlers || !wake_one_idle_thread_and_unlock(lock)) + else lock.unlock(); - op_queue completed_ops; - task_cleanup c = { this, &lock, &completed_ops }; - (void)c; + task_cleanup on_exit = { this, &lock, &this_thread }; + (void)on_exit; // Run the task. May throw an exception. Only block if the operation // queue is empty and we're not polling, otherwise we want to return // as soon as possible. - task_->run(!more_handlers && !polling, completed_ops); + task_->run(!more_handlers, this_thread.private_op_queue); } else { - if (more_handlers) + std::size_t task_result = o->task_result_; + + if (more_handlers && !one_thread_) wake_one_thread_and_unlock(lock); else lock.unlock(); // Ensure the count of outstanding work is decremented on block exit. - work_finished_on_block_exit on_exit = { this }; + work_cleanup on_exit = { this, &lock, &this_thread }; (void)on_exit; - // Complete the operation. May throw an exception. - o->complete(*this); // deletes the operation object + // Complete the operation. May throw an exception. Deletes the object. + o->complete(*this, ec, task_result); return 1; } } - else if (this_idle_thread) - { - // Nothing to run right now, so just wait for work to do. - this_idle_thread->next = first_idle_thread_; - first_idle_thread_ = this_idle_thread; - this_idle_thread->wakeup_event.clear(lock); - this_idle_thread->wakeup_event.wait(lock); - } else { - return 0; + // Nothing to run right now, so just wait for work to do. + this_thread.next = first_idle_thread_; + first_idle_thread_ = &this_thread; + this_thread.wakeup_event->clear(lock); + this_thread.wakeup_event->wait(lock); } } return 0; } +std::size_t task_io_service::do_poll_one(mutex::scoped_lock& lock, + task_io_service::thread_info& this_thread, + const boost::system::error_code& ec) +{ + if (stopped_) + return 0; + + operation* o = op_queue_.front(); + if (o == &task_operation_) + { + op_queue_.pop(); + lock.unlock(); + + { + task_cleanup c = { this, &lock, &this_thread }; + (void)c; + + // Run the task. May throw an exception. Only block if the operation + // queue is empty and we're not polling, otherwise we want to return + // as soon as possible. + task_->run(false, this_thread.private_op_queue); + } + + o = op_queue_.front(); + if (o == &task_operation_) + return 0; + } + + if (o == 0) + return 0; + + op_queue_.pop(); + bool more_handlers = (!op_queue_.empty()); + + std::size_t task_result = o->task_result_; + + if (more_handlers && !one_thread_) + wake_one_thread_and_unlock(lock); + else + lock.unlock(); + + // Ensure the count of outstanding work is decremented on block exit. + work_cleanup on_exit = { this, &lock, &this_thread }; + (void)on_exit; + + // Complete the operation. May throw an exception. Deletes the object. + o->complete(*this, ec, task_result); + + return 1; +} + void task_io_service::stop_all_threads( mutex::scoped_lock& lock) { @@ -318,10 +492,10 @@ void task_io_service::stop_all_threads( while (first_idle_thread_) { - idle_thread_info* idle_thread = first_idle_thread_; + thread_info* idle_thread = first_idle_thread_; first_idle_thread_ = idle_thread->next; idle_thread->next = 0; - idle_thread->wakeup_event.signal(lock); + idle_thread->wakeup_event->signal(lock); } if (!task_interrupted_ && task_) @@ -336,10 +510,10 @@ bool task_io_service::wake_one_idle_thread_and_unlock( { if (first_idle_thread_) { - idle_thread_info* idle_thread = first_idle_thread_; + thread_info* idle_thread = first_idle_thread_; first_idle_thread_ = idle_thread->next; idle_thread->next = 0; - idle_thread->wakeup_event.signal_and_unlock(lock); + idle_thread->wakeup_event->signal_and_unlock(lock); return true; } return false; diff --git a/3party/boost/boost/asio/detail/impl/throw_error.ipp b/3party/boost/boost/asio/detail/impl/throw_error.ipp index 5ba6b9c570..dbe6112852 100644 --- a/3party/boost/boost/asio/detail/impl/throw_error.ipp +++ b/3party/boost/boost/asio/detail/impl/throw_error.ipp @@ -2,7 +2,7 @@ // detail/impl/throw_error.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp b/3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp new file mode 100644 index 0000000000..c72d8854ca --- /dev/null +++ b/3party/boost/boost/asio/detail/impl/timer_queue_ptime.ipp @@ -0,0 +1,82 @@ +// +// detail/impl/timer_queue_ptime.ipp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_PTIME_IPP +#define BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_PTIME_IPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +timer_queue >::timer_queue() +{ +} + +timer_queue >::~timer_queue() +{ +} + +bool timer_queue >::enqueue_timer( + const time_type& time, per_timer_data& timer, wait_op* op) +{ + return impl_.enqueue_timer(time, timer, op); +} + +bool timer_queue >::empty() const +{ + return impl_.empty(); +} + +long timer_queue >::wait_duration_msec( + long max_duration) const +{ + return impl_.wait_duration_msec(max_duration); +} + +long timer_queue >::wait_duration_usec( + long max_duration) const +{ + return impl_.wait_duration_usec(max_duration); +} + +void timer_queue >::get_ready_timers( + op_queue& ops) +{ + impl_.get_ready_timers(ops); +} + +void timer_queue >::get_all_timers( + op_queue& ops) +{ + impl_.get_all_timers(ops); +} + +std::size_t timer_queue >::cancel_timer( + per_timer_data& timer, op_queue& ops, std::size_t max_cancelled) +{ + return impl_.cancel_timer(timer, ops, max_cancelled); +} + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_DETAIL_IMPL_TIMER_QUEUE_PTIME_IPP diff --git a/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp b/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp index d1027e6f3d..7f9a662dcb 100644 --- a/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp +++ b/3party/boost/boost/asio/detail/impl/timer_queue_set.ipp @@ -2,7 +2,7 @@ // detail/impl/timer_queue_set.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/win_event.ipp b/3party/boost/boost/asio/detail/impl/win_event.ipp index fe904fb982..252242ce56 100644 --- a/3party/boost/boost/asio/detail/impl/win_event.ipp +++ b/3party/boost/boost/asio/detail/impl/win_event.ipp @@ -2,7 +2,7 @@ // detail/win_event.ipp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp index b525e06b7c..ecd45c0398 100644 --- a/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp +++ b/3party/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp @@ -2,7 +2,7 @@ // detail/impl/win_iocp_handle_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp index f174dc70d0..871f6fa2e4 100644 --- a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp +++ b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.hpp @@ -2,7 +2,7 @@ // detail/impl/win_iocp_io_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -19,7 +19,6 @@ #if defined(BOOST_ASIO_HAS_IOCP) -#include #include #include #include @@ -36,7 +35,7 @@ void win_iocp_io_service::dispatch(Handler handler) { if (call_stack::contains(this)) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::full); boost_asio_handler_invoke_helpers::invoke(handler, handler); } else @@ -88,7 +87,7 @@ void win_iocp_io_service::remove_timer_queue( template void win_iocp_io_service::schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op) + typename timer_queue::per_timer_data& timer, wait_op* op) { // If the service has been shut down we silently discard the timer. if (::InterlockedExchangeAdd(&shutdown_, 0) != 0) diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp index 4607669048..72f4af7524 100644 --- a/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp +++ b/3party/boost/boost/asio/detail/impl/win_iocp_io_service.ipp @@ -2,7 +2,7 @@ // detail/impl/win_iocp_io_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -62,7 +62,8 @@ struct win_iocp_io_service::timer_thread_function win_iocp_io_service* io_service_; }; -win_iocp_io_service::win_iocp_io_service(boost::asio::io_service& io_service) +win_iocp_io_service::win_iocp_io_service( + boost::asio::io_service& io_service, size_t concurrency_hint) : boost::asio::detail::service_base(io_service), iocp_(), outstanding_work_(0), @@ -71,10 +72,7 @@ win_iocp_io_service::win_iocp_io_service(boost::asio::io_service& io_service) dispatch_required_(0) { BOOST_ASIO_HANDLER_TRACKING_INIT; -} -void win_iocp_io_service::init(size_t concurrency_hint) -{ iocp_.handle = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0, static_cast((std::min)(concurrency_hint, DWORD(~0)))); if (!iocp_.handle) @@ -150,7 +148,7 @@ size_t win_iocp_io_service::run(boost::system::error_code& ec) { if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0) { - stop(); + InterlockedExchange(&stopped_, 1); ec = boost::system::error_code(); return 0; } @@ -168,7 +166,7 @@ size_t win_iocp_io_service::run_one(boost::system::error_code& ec) { if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0) { - stop(); + InterlockedExchange(&stopped_, 1); ec = boost::system::error_code(); return 0; } @@ -182,7 +180,7 @@ size_t win_iocp_io_service::poll(boost::system::error_code& ec) { if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0) { - stop(); + InterlockedExchange(&stopped_, 1); ec = boost::system::error_code(); return 0; } @@ -200,7 +198,7 @@ size_t win_iocp_io_service::poll_one(boost::system::error_code& ec) { if (::InterlockedExchangeAdd(&outstanding_work_, 0) == 0) { - stop(); + InterlockedExchange(&stopped_, 1); ec = boost::system::error_code(); return 0; } diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp index 0c641fcbb2..e98ad87361 100644 --- a/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp +++ b/3party/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp @@ -2,7 +2,7 @@ // detail/impl/win_iocp_serial_port_service.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp b/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp index 2b8d0cb84a..0466e33cb6 100644 --- a/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp +++ b/3party/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp @@ -2,7 +2,7 @@ // detail/impl/win_iocp_socket_service_base.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/win_mutex.ipp b/3party/boost/boost/asio/detail/impl/win_mutex.ipp index af0d20e160..05a7492178 100644 --- a/3party/boost/boost/asio/detail/impl/win_mutex.ipp +++ b/3party/boost/boost/asio/detail/impl/win_mutex.ipp @@ -2,7 +2,7 @@ // detail/impl/win_mutex.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp b/3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp new file mode 100644 index 0000000000..d91ccac10d --- /dev/null +++ b/3party/boost/boost/asio/detail/impl/win_object_handle_service.ipp @@ -0,0 +1,446 @@ +// +// detail/impl/win_object_handle_service.ipp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2011 Boris Schaeling (boris@highscore.de) +// +// 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 BOOST_ASIO_DETAIL_IMPL_WIN_OBJECT_HANDLE_SERVICE_IPP +#define BOOST_ASIO_DETAIL_IMPL_WIN_OBJECT_HANDLE_SERVICE_IPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +win_object_handle_service::win_object_handle_service( + boost::asio::io_service& io_service) + : io_service_(boost::asio::use_service(io_service)), + mutex_(), + impl_list_(0), + shutdown_(false) +{ +} + +void win_object_handle_service::shutdown_service() +{ + mutex::scoped_lock lock(mutex_); + + // Setting this flag to true prevents new objects from being registered, and + // new asynchronous wait operations from being started. We only need to worry + // about cleaning up the operations that are currently in progress. + shutdown_ = true; + + op_queue ops; + for (implementation_type* impl = impl_list_; impl; impl = impl->next_) + ops.push(impl->op_queue_); + + lock.unlock(); + + io_service_.abandon_operations(ops); +} + +void win_object_handle_service::construct( + win_object_handle_service::implementation_type& impl) +{ + impl.handle_ = INVALID_HANDLE_VALUE; + impl.wait_handle_ = INVALID_HANDLE_VALUE; + impl.owner_ = this; + + // Insert implementation into linked list of all implementations. + mutex::scoped_lock lock(mutex_); + if (!shutdown_) + { + impl.next_ = impl_list_; + impl.prev_ = 0; + if (impl_list_) + impl_list_->prev_ = &impl; + impl_list_ = &impl; + } +} + +void win_object_handle_service::move_construct( + win_object_handle_service::implementation_type& impl, + win_object_handle_service::implementation_type& other_impl) +{ + mutex::scoped_lock lock(mutex_); + + // Insert implementation into linked list of all implementations. + if (!shutdown_) + { + impl.next_ = impl_list_; + impl.prev_ = 0; + if (impl_list_) + impl_list_->prev_ = &impl; + impl_list_ = &impl; + } + + impl.handle_ = other_impl.handle_; + other_impl.handle_ = INVALID_HANDLE_VALUE; + impl.wait_handle_ = other_impl.wait_handle_; + other_impl.wait_handle_ = INVALID_HANDLE_VALUE; + impl.op_queue_.push(other_impl.op_queue_); + impl.owner_ = this; + + // We must not hold the lock while calling UnregisterWaitEx. This is because + // the registered callback function might be invoked while we are waiting for + // UnregisterWaitEx to complete. + lock.unlock(); + + if (impl.wait_handle_ != INVALID_HANDLE_VALUE) + ::UnregisterWaitEx(impl.wait_handle_, INVALID_HANDLE_VALUE); + + if (!impl.op_queue_.empty()) + register_wait_callback(impl, lock); +} + +void win_object_handle_service::move_assign( + win_object_handle_service::implementation_type& impl, + win_object_handle_service& other_service, + win_object_handle_service::implementation_type& other_impl) +{ + boost::system::error_code ignored_ec; + close(impl, ignored_ec); + + mutex::scoped_lock lock(mutex_); + + if (this != &other_service) + { + // Remove implementation from linked list of all implementations. + if (impl_list_ == &impl) + impl_list_ = impl.next_; + if (impl.prev_) + impl.prev_->next_ = impl.next_; + if (impl.next_) + impl.next_->prev_= impl.prev_; + impl.next_ = 0; + impl.prev_ = 0; + } + + impl.handle_ = other_impl.handle_; + other_impl.handle_ = INVALID_HANDLE_VALUE; + impl.wait_handle_ = other_impl.wait_handle_; + other_impl.wait_handle_ = INVALID_HANDLE_VALUE; + impl.op_queue_.push(other_impl.op_queue_); + impl.owner_ = this; + + if (this != &other_service) + { + // Insert implementation into linked list of all implementations. + impl.next_ = other_service.impl_list_; + impl.prev_ = 0; + if (other_service.impl_list_) + other_service.impl_list_->prev_ = &impl; + other_service.impl_list_ = &impl; + } + + // We must not hold the lock while calling UnregisterWaitEx. This is because + // the registered callback function might be invoked while we are waiting for + // UnregisterWaitEx to complete. + lock.unlock(); + + if (impl.wait_handle_ != INVALID_HANDLE_VALUE) + ::UnregisterWaitEx(impl.wait_handle_, INVALID_HANDLE_VALUE); + + if (!impl.op_queue_.empty()) + register_wait_callback(impl, lock); +} + +void win_object_handle_service::destroy( + win_object_handle_service::implementation_type& impl) +{ + mutex::scoped_lock lock(mutex_); + + // Remove implementation from linked list of all implementations. + if (impl_list_ == &impl) + impl_list_ = impl.next_; + if (impl.prev_) + impl.prev_->next_ = impl.next_; + if (impl.next_) + impl.next_->prev_= impl.prev_; + impl.next_ = 0; + impl.prev_ = 0; + + if (is_open(impl)) + { + BOOST_ASIO_HANDLER_OPERATION(("object_handle", &impl, "close")); + + HANDLE wait_handle = impl.wait_handle_; + impl.wait_handle_ = INVALID_HANDLE_VALUE; + + op_queue ops; + while (wait_op* op = impl.op_queue_.front()) + { + op->ec_ = boost::asio::error::operation_aborted; + impl.op_queue_.pop(); + ops.push(op); + } + + // We must not hold the lock while calling UnregisterWaitEx. This is + // because the registered callback function might be invoked while we are + // waiting for UnregisterWaitEx to complete. + lock.unlock(); + + if (wait_handle != INVALID_HANDLE_VALUE) + ::UnregisterWaitEx(wait_handle, INVALID_HANDLE_VALUE); + + ::CloseHandle(impl.handle_); + impl.handle_ = INVALID_HANDLE_VALUE; + + io_service_.post_deferred_completions(ops); + } +} + +boost::system::error_code win_object_handle_service::assign( + win_object_handle_service::implementation_type& impl, + const native_handle_type& handle, boost::system::error_code& ec) +{ + if (is_open(impl)) + { + ec = boost::asio::error::already_open; + return ec; + } + + impl.handle_ = handle; + ec = boost::system::error_code(); + return ec; +} + +boost::system::error_code win_object_handle_service::close( + win_object_handle_service::implementation_type& impl, + boost::system::error_code& ec) +{ + if (is_open(impl)) + { + BOOST_ASIO_HANDLER_OPERATION(("object_handle", &impl, "close")); + + mutex::scoped_lock lock(mutex_); + + HANDLE wait_handle = impl.wait_handle_; + impl.wait_handle_ = INVALID_HANDLE_VALUE; + + op_queue completed_ops; + while (wait_op* op = impl.op_queue_.front()) + { + impl.op_queue_.pop(); + op->ec_ = boost::asio::error::operation_aborted; + completed_ops.push(op); + } + + // We must not hold the lock while calling UnregisterWaitEx. This is + // because the registered callback function might be invoked while we are + // waiting for UnregisterWaitEx to complete. + lock.unlock(); + + if (wait_handle != INVALID_HANDLE_VALUE) + ::UnregisterWaitEx(wait_handle, INVALID_HANDLE_VALUE); + + if (::CloseHandle(impl.handle_)) + { + impl.handle_ = INVALID_HANDLE_VALUE; + ec = boost::system::error_code(); + } + else + { + DWORD last_error = ::GetLastError(); + ec = boost::system::error_code(last_error, + boost::asio::error::get_system_category()); + } + + io_service_.post_deferred_completions(completed_ops); + } + else + { + ec = boost::system::error_code(); + } + + return ec; +} + +boost::system::error_code win_object_handle_service::cancel( + win_object_handle_service::implementation_type& impl, + boost::system::error_code& ec) +{ + if (is_open(impl)) + { + BOOST_ASIO_HANDLER_OPERATION(("object_handle", &impl, "cancel")); + + mutex::scoped_lock lock(mutex_); + + HANDLE wait_handle = impl.wait_handle_; + impl.wait_handle_ = INVALID_HANDLE_VALUE; + + op_queue completed_ops; + while (wait_op* op = impl.op_queue_.front()) + { + op->ec_ = boost::asio::error::operation_aborted; + impl.op_queue_.pop(); + completed_ops.push(op); + } + + // We must not hold the lock while calling UnregisterWaitEx. This is + // because the registered callback function might be invoked while we are + // waiting for UnregisterWaitEx to complete. + lock.unlock(); + + if (wait_handle != INVALID_HANDLE_VALUE) + ::UnregisterWaitEx(wait_handle, INVALID_HANDLE_VALUE); + + ec = boost::system::error_code(); + + io_service_.post_deferred_completions(completed_ops); + } + else + { + ec = boost::asio::error::bad_descriptor; + } + + return ec; +} + +void win_object_handle_service::wait( + win_object_handle_service::implementation_type& impl, + boost::system::error_code& ec) +{ + switch (::WaitForSingleObject(impl.handle_, INFINITE)) + { + case WAIT_FAILED: + { + DWORD last_error = ::GetLastError(); + ec = boost::system::error_code(last_error, + boost::asio::error::get_system_category()); + break; + } + case WAIT_OBJECT_0: + case WAIT_ABANDONED: + default: + ec = boost::system::error_code(); + break; + } +} + +void win_object_handle_service::start_wait_op( + win_object_handle_service::implementation_type& impl, wait_op* op) +{ + io_service_.work_started(); + + if (is_open(impl)) + { + mutex::scoped_lock lock(mutex_); + + if (!shutdown_) + { + impl.op_queue_.push(op); + + // Only the first operation to be queued gets to register a wait callback. + // Subsequent operations have to wait for the first to finish. + if (impl.op_queue_.front() == op) + register_wait_callback(impl, lock); + } + else + { + lock.unlock(); + io_service_.post_deferred_completion(op); + } + } + else + { + op->ec_ = boost::asio::error::bad_descriptor; + io_service_.post_deferred_completion(op); + } +} + +void win_object_handle_service::register_wait_callback( + win_object_handle_service::implementation_type& impl, + mutex::scoped_lock& lock) +{ + lock.lock(); + + if (!RegisterWaitForSingleObject(&impl.wait_handle_, + impl.handle_, &win_object_handle_service::wait_callback, + &impl, INFINITE, WT_EXECUTEONLYONCE)) + { + DWORD last_error = ::GetLastError(); + boost::system::error_code ec(last_error, + boost::asio::error::get_system_category()); + + op_queue completed_ops; + while (wait_op* op = impl.op_queue_.front()) + { + op->ec_ = ec; + impl.op_queue_.pop(); + completed_ops.push(op); + } + + lock.unlock(); + io_service_.post_deferred_completions(completed_ops); + } +} + +void win_object_handle_service::wait_callback(PVOID param, BOOLEAN) +{ + implementation_type* impl = static_cast(param); + mutex::scoped_lock lock(impl->owner_->mutex_); + + if (impl->wait_handle_ != INVALID_HANDLE_VALUE) + { + ::UnregisterWaitEx(impl->wait_handle_, NULL); + impl->wait_handle_ = INVALID_HANDLE_VALUE; + } + + if (wait_op* op = impl->op_queue_.front()) + { + op_queue completed_ops; + + op->ec_ = boost::system::error_code(); + impl->op_queue_.pop(); + completed_ops.push(op); + + if (!impl->op_queue_.empty()) + { + if (!RegisterWaitForSingleObject(&impl->wait_handle_, + impl->handle_, &win_object_handle_service::wait_callback, + param, INFINITE, WT_EXECUTEONLYONCE)) + { + DWORD last_error = ::GetLastError(); + boost::system::error_code ec(last_error, + boost::asio::error::get_system_category()); + + while (wait_op* op = impl->op_queue_.front()) + { + op->ec_ = ec; + impl->op_queue_.pop(); + completed_ops.push(op); + } + } + } + + lock.unlock(); + impl->owner_->io_service_.post_deferred_completions(completed_ops); + } +} + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + +#endif // BOOST_ASIO_DETAIL_IMPL_WIN_OBJECT_HANDLE_SERVICE_IPP diff --git a/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp b/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp index bf3193a4f5..3ec104da2b 100644 --- a/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp +++ b/3party/boost/boost/asio/detail/impl/win_static_mutex.ipp @@ -2,7 +2,7 @@ // detail/impl/win_static_mutex.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/win_thread.ipp b/3party/boost/boost/asio/detail/impl/win_thread.ipp index c9a3fa7734..744990d73e 100644 --- a/3party/boost/boost/asio/detail/impl/win_thread.ipp +++ b/3party/boost/boost/asio/detail/impl/win_thread.ipp @@ -2,7 +2,7 @@ // detail/impl/win_thread.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp b/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp index 02abd55088..9da761c46c 100644 --- a/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp +++ b/3party/boost/boost/asio/detail/impl/win_tss_ptr.ipp @@ -2,7 +2,7 @@ // detail/impl/win_tss_ptr.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/impl/winsock_init.ipp b/3party/boost/boost/asio/detail/impl/winsock_init.ipp index e8fd647c34..8916934134 100644 --- a/3party/boost/boost/asio/detail/impl/winsock_init.ipp +++ b/3party/boost/boost/asio/detail/impl/winsock_init.ipp @@ -2,7 +2,7 @@ // detail/impl/winsock_init.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/io_control.hpp b/3party/boost/boost/asio/detail/io_control.hpp index a68603f002..e08a4fc449 100644 --- a/3party/boost/boost/asio/detail/io_control.hpp +++ b/3party/boost/boost/asio/detail/io_control.hpp @@ -2,7 +2,7 @@ // detail/io_control.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp b/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp new file mode 100644 index 0000000000..10dd01a1f0 --- /dev/null +++ b/3party/boost/boost/asio/detail/keyword_tss_ptr.hpp @@ -0,0 +1,72 @@ +// +// detail/keyword_tss_ptr.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_DETAIL_KEYWORD_TSS_PTR_HPP +#define BOOST_ASIO_DETAIL_KEYWORD_TSS_PTR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION) + +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +template +class keyword_tss_ptr + : private noncopyable +{ +public: + // Constructor. + keyword_tss_ptr() + { + } + + // Destructor. + ~keyword_tss_ptr() + { + } + + // Get the value. + operator T*() const + { + return value_; + } + + // Set the value. + void operator=(T* value) + { + value_ = value; + } + +private: + static __thread T* value_; +}; + +template +__thread T* keyword_tss_ptr::value_; + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#endif // defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION) + +#endif // BOOST_ASIO_DETAIL_KEYWORD_TSS_PTR_HPP diff --git a/3party/boost/boost/asio/detail/kqueue_reactor.hpp b/3party/boost/boost/asio/detail/kqueue_reactor.hpp index 707c2e52f6..b3e111d93b 100644 --- a/3party/boost/boost/asio/detail/kqueue_reactor.hpp +++ b/3party/boost/boost/asio/detail/kqueue_reactor.hpp @@ -2,7 +2,7 @@ // detail/kqueue_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2005 Stefan Arentz (stefan at soze dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -32,10 +32,10 @@ #include #include #include -#include #include #include #include +#include #include #include @@ -62,12 +62,14 @@ public: { friend class kqueue_reactor; friend class object_pool_access; + + descriptor_state* next_; + descriptor_state* prev_; + mutex mutex_; int descriptor_; op_queue op_queue_[max_ops]; bool shutdown_; - descriptor_state* next_; - descriptor_state* prev_; }; // Per-descriptor data. @@ -145,7 +147,7 @@ public: template void schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op); + typename timer_queue::per_timer_data& timer, wait_op* op); // Cancel the timer operations associated with the given token. Returns the // number of operations that have been posted or dispatched. @@ -165,6 +167,12 @@ private: // cannot be created. BOOST_ASIO_DECL static int do_kqueue_create(); + // Allocate a new descriptor state object. + BOOST_ASIO_DECL descriptor_state* allocate_descriptor_state(); + + // Free an existing descriptor state object. + BOOST_ASIO_DECL void free_descriptor_state(descriptor_state* s); + // Helper function to add a new timer queue. BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue); diff --git a/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp b/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp index 1bceb30963..517a307772 100644 --- a/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp +++ b/3party/boost/boost/asio/detail/kqueue_reactor_fwd.hpp @@ -2,7 +2,7 @@ // detail/kqueue_reactor_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2005 Stefan Arentz (stefan at soze dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp b/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp index 576e656749..bfa80b0f9f 100644 --- a/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp +++ b/3party/boost/boost/asio/detail/local_free_on_block_exit.hpp @@ -2,7 +2,7 @@ // detail/local_free_on_block_exit.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/macos_fenced_block.hpp b/3party/boost/boost/asio/detail/macos_fenced_block.hpp index d37eea6143..dc3b47dfef 100644 --- a/3party/boost/boost/asio/detail/macos_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/macos_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/macos_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -31,8 +31,16 @@ class macos_fenced_block : private noncopyable { public: - // Constructor. - macos_fenced_block() + enum half_t { half }; + enum full_t { full }; + + // Constructor for a half fenced block. + explicit macos_fenced_block(half_t) + { + } + + // Constructor for a full fenced block. + explicit macos_fenced_block(full_t) { OSMemoryBarrier(); } diff --git a/3party/boost/boost/asio/detail/mutex.hpp b/3party/boost/boost/asio/detail/mutex.hpp index 988dd3a003..bd3e0c6d78 100644 --- a/3party/boost/boost/asio/detail/mutex.hpp +++ b/3party/boost/boost/asio/detail/mutex.hpp @@ -2,7 +2,7 @@ // detail/mutex.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/noncopyable.hpp b/3party/boost/boost/asio/detail/noncopyable.hpp index 234ce93978..5f7e8cc177 100644 --- a/3party/boost/boost/asio/detail/noncopyable.hpp +++ b/3party/boost/boost/asio/detail/noncopyable.hpp @@ -2,7 +2,7 @@ // detail/noncopyable.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/null_event.hpp b/3party/boost/boost/asio/detail/null_event.hpp index 7f079aef0f..1130d18eec 100644 --- a/3party/boost/boost/asio/detail/null_event.hpp +++ b/3party/boost/boost/asio/detail/null_event.hpp @@ -2,7 +2,7 @@ // detail/null_event.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/null_fenced_block.hpp b/3party/boost/boost/asio/detail/null_fenced_block.hpp index 70680c5ce7..64bedec4f6 100644 --- a/3party/boost/boost/asio/detail/null_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/null_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/null_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -25,8 +25,10 @@ class null_fenced_block : private noncopyable { public: + enum half_or_full_t { half, full }; + // Constructor. - null_fenced_block() + explicit null_fenced_block(half_or_full_t) { } diff --git a/3party/boost/boost/asio/detail/null_mutex.hpp b/3party/boost/boost/asio/detail/null_mutex.hpp index e095e01e38..5d810bb1f5 100644 --- a/3party/boost/boost/asio/detail/null_mutex.hpp +++ b/3party/boost/boost/asio/detail/null_mutex.hpp @@ -2,7 +2,7 @@ // detail/null_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/null_signal_blocker.hpp b/3party/boost/boost/asio/detail/null_signal_blocker.hpp index bcf813b319..5eeb293165 100644 --- a/3party/boost/boost/asio/detail/null_signal_blocker.hpp +++ b/3party/boost/boost/asio/detail/null_signal_blocker.hpp @@ -2,7 +2,7 @@ // detail/null_signal_blocker.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/null_static_mutex.hpp b/3party/boost/boost/asio/detail/null_static_mutex.hpp index 4bb85178f8..30328963c4 100644 --- a/3party/boost/boost/asio/detail/null_static_mutex.hpp +++ b/3party/boost/boost/asio/detail/null_static_mutex.hpp @@ -2,7 +2,7 @@ // detail/null_static_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/null_thread.hpp b/3party/boost/boost/asio/detail/null_thread.hpp index ae32014304..0212dbe8c6 100644 --- a/3party/boost/boost/asio/detail/null_thread.hpp +++ b/3party/boost/boost/asio/detail/null_thread.hpp @@ -2,7 +2,7 @@ // detail/null_thread.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/null_tss_ptr.hpp b/3party/boost/boost/asio/detail/null_tss_ptr.hpp index c44b4deef3..07be3e6bf8 100644 --- a/3party/boost/boost/asio/detail/null_tss_ptr.hpp +++ b/3party/boost/boost/asio/detail/null_tss_ptr.hpp @@ -2,7 +2,7 @@ // detail/null_tss_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/object_pool.hpp b/3party/boost/boost/asio/detail/object_pool.hpp index 69790a05e2..d315236c9a 100644 --- a/3party/boost/boost/asio/detail/object_pool.hpp +++ b/3party/boost/boost/asio/detail/object_pool.hpp @@ -2,7 +2,7 @@ // detail/object_pool.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp b/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp index 719975242c..fcc27cf260 100644 --- a/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp +++ b/3party/boost/boost/asio/detail/old_win_sdk_compat.hpp @@ -2,7 +2,7 @@ // detail/old_win_sdk_compat.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/op_queue.hpp b/3party/boost/boost/asio/detail/op_queue.hpp index d508e9dc12..ad61910878 100644 --- a/3party/boost/boost/asio/detail/op_queue.hpp +++ b/3party/boost/boost/asio/detail/op_queue.hpp @@ -2,7 +2,7 @@ // detail/op_queue.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/operation.hpp b/3party/boost/boost/asio/detail/operation.hpp index d2015e712f..99371a9ea4 100644 --- a/3party/boost/boost/asio/detail/operation.hpp +++ b/3party/boost/boost/asio/detail/operation.hpp @@ -2,7 +2,7 @@ // detail/operation.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp b/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp index 56321246aa..0aee2a22d4 100644 --- a/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp +++ b/3party/boost/boost/asio/detail/pipe_select_interrupter.hpp @@ -2,7 +2,7 @@ // detail/pipe_select_interrupter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/pop_options.hpp b/3party/boost/boost/asio/detail/pop_options.hpp index 75afc2b18e..6e78ddfde7 100644 --- a/3party/boost/boost/asio/detail/pop_options.hpp +++ b/3party/boost/boost/asio/detail/pop_options.hpp @@ -2,7 +2,7 @@ // detail/pop_options.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/posix_event.hpp b/3party/boost/boost/asio/detail/posix_event.hpp index dc2ed317f3..b77f384383 100644 --- a/3party/boost/boost/asio/detail/posix_event.hpp +++ b/3party/boost/boost/asio/detail/posix_event.hpp @@ -2,7 +2,7 @@ // detail/posix_event.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp b/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp index b8be59602e..f6476e6c3a 100644 --- a/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp +++ b/3party/boost/boost/asio/detail/posix_fd_set_adapter.hpp @@ -2,7 +2,7 @@ // detail/posix_fd_set_adapter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -20,6 +20,7 @@ #if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) #include +#include #include #include @@ -29,7 +30,7 @@ namespace asio { namespace detail { // Adapts the FD_SET type to meet the Descriptor_Set concept's requirements. -class posix_fd_set_adapter +class posix_fd_set_adapter : noncopyable { public: posix_fd_set_adapter() @@ -39,6 +40,12 @@ public: FD_ZERO(&fd_set_); } + void reset() + { + using namespace std; // Needed for memset on Solaris. + FD_ZERO(&fd_set_); + } + bool set(socket_type descriptor) { if (descriptor < (socket_type)FD_SETSIZE) diff --git a/3party/boost/boost/asio/detail/posix_mutex.hpp b/3party/boost/boost/asio/detail/posix_mutex.hpp index 5f5fd83d83..a456c2a10b 100644 --- a/3party/boost/boost/asio/detail/posix_mutex.hpp +++ b/3party/boost/boost/asio/detail/posix_mutex.hpp @@ -2,7 +2,7 @@ // detail/posix_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/posix_signal_blocker.hpp b/3party/boost/boost/asio/detail/posix_signal_blocker.hpp index 88fa330d69..03477780e2 100644 --- a/3party/boost/boost/asio/detail/posix_signal_blocker.hpp +++ b/3party/boost/boost/asio/detail/posix_signal_blocker.hpp @@ -2,7 +2,7 @@ // detail/posix_signal_blocker.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/posix_static_mutex.hpp b/3party/boost/boost/asio/detail/posix_static_mutex.hpp index 0ec16a1869..a27d9d8834 100644 --- a/3party/boost/boost/asio/detail/posix_static_mutex.hpp +++ b/3party/boost/boost/asio/detail/posix_static_mutex.hpp @@ -2,7 +2,7 @@ // detail/posix_static_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/posix_thread.hpp b/3party/boost/boost/asio/detail/posix_thread.hpp index f53c319c57..44bf62c5c7 100644 --- a/3party/boost/boost/asio/detail/posix_thread.hpp +++ b/3party/boost/boost/asio/detail/posix_thread.hpp @@ -2,7 +2,7 @@ // detail/posix_thread.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/posix_tss_ptr.hpp b/3party/boost/boost/asio/detail/posix_tss_ptr.hpp index 2edcbc17ca..33ac502281 100644 --- a/3party/boost/boost/asio/detail/posix_tss_ptr.hpp +++ b/3party/boost/boost/asio/detail/posix_tss_ptr.hpp @@ -2,7 +2,7 @@ // detail/posix_tss_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/push_options.hpp b/3party/boost/boost/asio/detail/push_options.hpp index 050549d49b..fef517dbd5 100644 --- a/3party/boost/boost/asio/detail/push_options.hpp +++ b/3party/boost/boost/asio/detail/push_options.hpp @@ -2,7 +2,7 @@ // detail/push_options.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -100,6 +100,7 @@ # pragma warning (disable:4103) # pragma warning (push) # pragma warning (disable:4127) +# pragma warning (disable:4180) # pragma warning (disable:4244) # pragma warning (disable:4355) # pragma warning (disable:4512) diff --git a/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp b/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp index 551ecaa125..5efb24be8d 100644 --- a/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp +++ b/3party/boost/boost/asio/detail/reactive_descriptor_service.hpp @@ -2,7 +2,7 @@ // detail/reactive_descriptor_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -177,7 +177,7 @@ public: const null_buffers&, boost::system::error_code& ec) { // Wait for descriptor to become ready. - descriptor_ops::poll_write(impl.descriptor_, ec); + descriptor_ops::poll_write(impl.descriptor_, impl.state_, ec); return 0; } @@ -239,7 +239,7 @@ public: const null_buffers&, boost::system::error_code& ec) { // Wait for descriptor to become ready. - descriptor_ops::poll_read(impl.descriptor_, ec); + descriptor_ops::poll_read(impl.descriptor_, impl.state_, ec); return 0; } diff --git a/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp b/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp index cf939b23ed..3881e96898 100644 --- a/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_null_buffers_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_null_buffers_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -47,7 +47,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_null_buffers_op* o(static_cast(base)); @@ -69,7 +70,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp b/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp index 9d750626ea..a32088f44c 100644 --- a/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp +++ b/3party/boost/boost/asio/detail/reactive_serial_port_service.hpp @@ -2,7 +2,7 @@ // detail/reactive_serial_port_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp index 3957f3ae06..d80bdea956 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_accept_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_accept_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -95,7 +95,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_accept_op* o(static_cast(base)); @@ -117,7 +118,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp index 66dddad81d..6463a037fe 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_connect_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_connect_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -64,7 +64,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_connect_op* o @@ -87,7 +88,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_)); boost_asio_handler_invoke_helpers::invoke(handler, handler); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp index 255b0ee03a..8814c1e934 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_recv_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_recv_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -82,7 +82,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_recv_op* o(static_cast(base)); @@ -104,7 +105,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp index 601bcc46a5..a6b37e49e4 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_recvfrom_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -91,7 +91,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_recvfrom_op* o( @@ -114,7 +115,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp index 56de631d0a..e9c24830f8 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_recvmsg_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -83,7 +83,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_recvmsg_op* o( @@ -106,7 +107,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp index 691a2205d9..b1c3f6532c 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_send_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_send_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -79,7 +79,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_send_op* o(static_cast(base)); @@ -101,7 +102,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp b/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp index 712d4b7190..08396a0bcd 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_sendto_op.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_sendto_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -82,7 +82,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. reactive_socket_sendto_op* o(static_cast(base)); @@ -104,7 +105,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/reactive_socket_service.hpp b/3party/boost/boost/asio/detail/reactive_socket_service.hpp index 76e9cbf74b..f66e25f98e 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_service.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_service.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -204,7 +204,7 @@ public: boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_write(impl.socket_, ec); + socket_ops::poll_write(impl.socket_, impl.state_, ec); return 0; } @@ -278,7 +278,7 @@ public: boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_read(impl.socket_, ec); + socket_ops::poll_read(impl.socket_, impl.state_, ec); // Reset endpoint since it can be given no sensible value at this time. sender_endpoint = endpoint_type(); diff --git a/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp b/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp index 52aa4e3834..0180435f24 100644 --- a/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp +++ b/3party/boost/boost/asio/detail/reactive_socket_service_base.hpp @@ -2,7 +2,7 @@ // detail/reactive_socket_service_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -188,7 +188,7 @@ public: socket_base::message_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_write(impl.socket_, ec); + socket_ops::poll_write(impl.socket_, impl.state_, ec); return 0; } @@ -253,7 +253,7 @@ public: socket_base::message_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_read(impl.socket_, ec); + socket_ops::poll_read(impl.socket_, impl.state_, ec); return 0; } @@ -327,7 +327,7 @@ public: socket_base::message_flags& out_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_read(impl.socket_, ec); + socket_ops::poll_read(impl.socket_, impl.state_, ec); // Clear out_flags, since we cannot give it any other sensible value when // performing a null_buffers operation. diff --git a/3party/boost/boost/asio/detail/reactor.hpp b/3party/boost/boost/asio/detail/reactor.hpp index f225ea0a5d..7e28679dd6 100644 --- a/3party/boost/boost/asio/detail/reactor.hpp +++ b/3party/boost/boost/asio/detail/reactor.hpp @@ -2,7 +2,7 @@ // detail/reactor.hpp // ~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/reactor_fwd.hpp b/3party/boost/boost/asio/detail/reactor_fwd.hpp index a4ff94a96a..7ea119ecb5 100644 --- a/3party/boost/boost/asio/detail/reactor_fwd.hpp +++ b/3party/boost/boost/asio/detail/reactor_fwd.hpp @@ -2,7 +2,7 @@ // detail/reactor_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/reactor_op.hpp b/3party/boost/boost/asio/detail/reactor_op.hpp index 0c8271c1a1..3b8e7f9f79 100644 --- a/3party/boost/boost/asio/detail/reactor_op.hpp +++ b/3party/boost/boost/asio/detail/reactor_op.hpp @@ -2,7 +2,7 @@ // detail/reactor_op.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/reactor_op_queue.hpp b/3party/boost/boost/asio/detail/reactor_op_queue.hpp index 02b8ea25dd..692a2eef80 100644 --- a/3party/boost/boost/asio/detail/reactor_op_queue.hpp +++ b/3party/boost/boost/asio/detail/reactor_op_queue.hpp @@ -2,7 +2,7 @@ // detail/reactor_op_queue.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/regex_fwd.hpp b/3party/boost/boost/asio/detail/regex_fwd.hpp index d61ad61a5e..679146ec57 100644 --- a/3party/boost/boost/asio/detail/regex_fwd.hpp +++ b/3party/boost/boost/asio/detail/regex_fwd.hpp @@ -2,7 +2,7 @@ // detail/regex_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp b/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp index 102c62c73a..e6c901a702 100644 --- a/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp +++ b/3party/boost/boost/asio/detail/resolve_endpoint_op.hpp @@ -2,7 +2,7 @@ // detail/resolve_endpoint_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -53,7 +53,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the operation object. resolve_endpoint_op* o(static_cast(base)); @@ -96,7 +97,7 @@ public: if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, "...")); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/resolve_op.hpp b/3party/boost/boost/asio/detail/resolve_op.hpp index 7eb70b8468..b64097982e 100644 --- a/3party/boost/boost/asio/detail/resolve_op.hpp +++ b/3party/boost/boost/asio/detail/resolve_op.hpp @@ -2,7 +2,7 @@ // detail/resolve_op.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -61,7 +61,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the operation object. resolve_op* o(static_cast(base)); @@ -106,7 +107,7 @@ public: if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, "...")); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/resolver_service.hpp b/3party/boost/boost/asio/detail/resolver_service.hpp index c5ff8f6cf1..8225844168 100644 --- a/3party/boost/boost/asio/detail/resolver_service.hpp +++ b/3party/boost/boost/asio/detail/resolver_service.hpp @@ -2,7 +2,7 @@ // detail/resolver_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/resolver_service_base.hpp b/3party/boost/boost/asio/detail/resolver_service_base.hpp index 73a8efaf6a..3a48d06c09 100644 --- a/3party/boost/boost/asio/detail/resolver_service_base.hpp +++ b/3party/boost/boost/asio/detail/resolver_service_base.hpp @@ -2,7 +2,7 @@ // detail/resolver_service_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/scoped_lock.hpp b/3party/boost/boost/asio/detail/scoped_lock.hpp index b523ae54d1..a2e6fd406d 100644 --- a/3party/boost/boost/asio/detail/scoped_lock.hpp +++ b/3party/boost/boost/asio/detail/scoped_lock.hpp @@ -2,7 +2,7 @@ // detail/scoped_lock.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/scoped_ptr.hpp b/3party/boost/boost/asio/detail/scoped_ptr.hpp index 23a10074b6..16436dd8fa 100644 --- a/3party/boost/boost/asio/detail/scoped_ptr.hpp +++ b/3party/boost/boost/asio/detail/scoped_ptr.hpp @@ -2,7 +2,7 @@ // detail/scoped_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/select_interrupter.hpp b/3party/boost/boost/asio/detail/select_interrupter.hpp index f0a1275b70..11a4967723 100644 --- a/3party/boost/boost/asio/detail/select_interrupter.hpp +++ b/3party/boost/boost/asio/detail/select_interrupter.hpp @@ -2,7 +2,7 @@ // detail/select_interrupter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/select_reactor.hpp b/3party/boost/boost/asio/detail/select_reactor.hpp index 6cefe502a0..a434546cb1 100644 --- a/3party/boost/boost/asio/detail/select_reactor.hpp +++ b/3party/boost/boost/asio/detail/select_reactor.hpp @@ -2,7 +2,7 @@ // detail/select_reactor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -31,10 +32,10 @@ #include #include #include -#include #include #include #include +#include #include #if defined(BOOST_ASIO_HAS_IOCP) @@ -133,7 +134,7 @@ public: template void schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op); + typename timer_queue::per_timer_data& timer, wait_op* op); // Cancel the timer operations associated with the given token. Returns the // number of operations that have been posted or dispatched. @@ -183,6 +184,9 @@ private: // The queues of read, write and except operations. reactor_op_queue op_queue_[max_ops]; + // The file descriptor sets to be passed to the select system call. + fd_set_adapter fd_sets_[max_select_ops]; + // The timer queues. timer_queue_set timer_queues_; diff --git a/3party/boost/boost/asio/detail/select_reactor_fwd.hpp b/3party/boost/boost/asio/detail/select_reactor_fwd.hpp index 78ff61b8cb..13379690d2 100644 --- a/3party/boost/boost/asio/detail/select_reactor_fwd.hpp +++ b/3party/boost/boost/asio/detail/select_reactor_fwd.hpp @@ -2,7 +2,7 @@ // detail/select_reactor_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/service_registry.hpp b/3party/boost/boost/asio/detail/service_registry.hpp index ab97fdb624..458f2711b5 100644 --- a/3party/boost/boost/asio/detail/service_registry.hpp +++ b/3party/boost/boost/asio/detail/service_registry.hpp @@ -2,7 +2,7 @@ // detail/service_registry.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -52,8 +52,10 @@ class service_registry : private noncopyable { public: - // Constructor. - BOOST_ASIO_DECL service_registry(boost::asio::io_service& o); + // Constructor. Adds the initial service. + template + service_registry(boost::asio::io_service& o, + Service* initial_service, Arg arg); // Destructor. BOOST_ASIO_DECL ~service_registry(); @@ -61,6 +63,11 @@ public: // Notify all services of a fork event. BOOST_ASIO_DECL void notify_fork(boost::asio::io_service::fork_event fork_ev); + // Get the first service object cast to the specified type. Called during + // io_service construction and so performs no locking or type checking. + template + Service& first_service(); + // Get the service object corresponding to the specified service type. Will // create a new service object automatically if no such object already // exists. Ownership of the service object is not transferred to the caller. @@ -123,8 +130,8 @@ private: const boost::asio::io_service::service::key& key, factory_type factory); - // Add a service object. Returns false on error, in which case ownership of - // the object is retained by the caller. + // Add a service object. Throws on error, in which case ownership of the + // object is retained by the caller. BOOST_ASIO_DECL void do_add_service( const boost::asio::io_service::service::key& key, boost::asio::io_service::service* new_service); diff --git a/3party/boost/boost/asio/detail/service_registry_fwd.hpp b/3party/boost/boost/asio/detail/service_registry_fwd.hpp index a6bb25e0ea..31575743d7 100644 --- a/3party/boost/boost/asio/detail/service_registry_fwd.hpp +++ b/3party/boost/boost/asio/detail/service_registry_fwd.hpp @@ -2,7 +2,7 @@ // detail/service_registry_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/shared_ptr.hpp b/3party/boost/boost/asio/detail/shared_ptr.hpp index 8f181d853f..5f0da22ea0 100644 --- a/3party/boost/boost/asio/detail/shared_ptr.hpp +++ b/3party/boost/boost/asio/detail/shared_ptr.hpp @@ -2,7 +2,7 @@ // detail/shared_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/signal_blocker.hpp b/3party/boost/boost/asio/detail/signal_blocker.hpp index cc00482c24..fe859b46e8 100644 --- a/3party/boost/boost/asio/detail/signal_blocker.hpp +++ b/3party/boost/boost/asio/detail/signal_blocker.hpp @@ -2,7 +2,7 @@ // detail/signal_blocker.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/signal_handler.hpp b/3party/boost/boost/asio/detail/signal_handler.hpp index 31480a1283..bd1c727ea7 100644 --- a/3party/boost/boost/asio/detail/signal_handler.hpp +++ b/3party/boost/boost/asio/detail/signal_handler.hpp @@ -2,7 +2,7 @@ // detail/signal_handler.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -40,7 +40,8 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. signal_handler* h(static_cast(base)); @@ -62,7 +63,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/signal_init.hpp b/3party/boost/boost/asio/detail/signal_init.hpp index f346956103..e038a881aa 100644 --- a/3party/boost/boost/asio/detail/signal_init.hpp +++ b/3party/boost/boost/asio/detail/signal_init.hpp @@ -2,7 +2,7 @@ // detail/signal_init.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/signal_op.hpp b/3party/boost/boost/asio/detail/signal_op.hpp index f7b49781fd..706691ba76 100644 --- a/3party/boost/boost/asio/detail/signal_op.hpp +++ b/3party/boost/boost/asio/detail/signal_op.hpp @@ -2,7 +2,7 @@ // detail/signal_op.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/signal_set_service.hpp b/3party/boost/boost/asio/detail/signal_set_service.hpp index d91650f3eb..afa67fe2ab 100644 --- a/3party/boost/boost/asio/detail/signal_set_service.hpp +++ b/3party/boost/boost/asio/detail/signal_set_service.hpp @@ -2,7 +2,7 @@ // detail/signal_set_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -17,8 +17,8 @@ #include -#include #include +#include #include #include #include diff --git a/3party/boost/boost/asio/detail/socket_holder.hpp b/3party/boost/boost/asio/detail/socket_holder.hpp index 52d2e4df4d..d29985909b 100644 --- a/3party/boost/boost/asio/detail/socket_holder.hpp +++ b/3party/boost/boost/asio/detail/socket_holder.hpp @@ -2,7 +2,7 @@ // detail/socket_holder.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/socket_ops.hpp b/3party/boost/boost/asio/detail/socket_ops.hpp index 9d1644cd74..b353316fe8 100644 --- a/3party/boost/boost/asio/detail/socket_ops.hpp +++ b/3party/boost/boost/asio/detail/socket_ops.hpp @@ -2,7 +2,7 @@ // detail/socket_ops.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -254,9 +254,11 @@ BOOST_ASIO_DECL int ioctl(socket_type s, state_type& state, BOOST_ASIO_DECL int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, timeval* timeout, boost::system::error_code& ec); -BOOST_ASIO_DECL int poll_read(socket_type s, boost::system::error_code& ec); +BOOST_ASIO_DECL int poll_read(socket_type s, + state_type state, boost::system::error_code& ec); -BOOST_ASIO_DECL int poll_write(socket_type s, boost::system::error_code& ec); +BOOST_ASIO_DECL int poll_write(socket_type s, + state_type state, boost::system::error_code& ec); BOOST_ASIO_DECL int poll_connect(socket_type s, boost::system::error_code& ec); diff --git a/3party/boost/boost/asio/detail/socket_option.hpp b/3party/boost/boost/asio/detail/socket_option.hpp index c841033c0b..5d3a51461a 100644 --- a/3party/boost/boost/asio/detail/socket_option.hpp +++ b/3party/boost/boost/asio/detail/socket_option.hpp @@ -2,7 +2,7 @@ // detail/socket_option.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/socket_select_interrupter.hpp b/3party/boost/boost/asio/detail/socket_select_interrupter.hpp index 70e6084735..eb8c7d0553 100644 --- a/3party/boost/boost/asio/detail/socket_select_interrupter.hpp +++ b/3party/boost/boost/asio/detail/socket_select_interrupter.hpp @@ -2,7 +2,7 @@ // detail/socket_select_interrupter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/socket_types.hpp b/3party/boost/boost/asio/detail/socket_types.hpp index 76e8ee999c..3754592ff0 100644 --- a/3party/boost/boost/asio/detail/socket_types.hpp +++ b/3party/boost/boost/asio/detail/socket_types.hpp @@ -2,7 +2,7 @@ // detail/socket_types.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/solaris_fenced_block.hpp b/3party/boost/boost/asio/detail/solaris_fenced_block.hpp index 0b117ad6aa..ab6f730e4a 100644 --- a/3party/boost/boost/asio/detail/solaris_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/solaris_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/solaris_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -31,8 +31,16 @@ class solaris_fenced_block : private noncopyable { public: - // Constructor. - solaris_fenced_block() + enum half_t { half }; + enum full_t { full }; + + // Constructor for a half fenced block. + explicit solaris_fenced_block(half_t) + { + } + + // Constructor for a full fenced block. + explicit solaris_fenced_block(full_t) { membar_consumer(); } diff --git a/3party/boost/boost/asio/detail/static_mutex.hpp b/3party/boost/boost/asio/detail/static_mutex.hpp index e77a7131a2..fbac3ed2dc 100644 --- a/3party/boost/boost/asio/detail/static_mutex.hpp +++ b/3party/boost/boost/asio/detail/static_mutex.hpp @@ -2,7 +2,7 @@ // detail/static_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/strand_service.hpp b/3party/boost/boost/asio/detail/strand_service.hpp index ae1118450e..3a271b50d5 100644 --- a/3party/boost/boost/asio/detail/strand_service.hpp +++ b/3party/boost/boost/asio/detail/strand_service.hpp @@ -2,7 +2,7 @@ // detail/strand_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -57,11 +57,20 @@ public: // Mutex to protect access to internal data. boost::asio::detail::mutex mutex_; - // The count of handlers in the strand, including the upcall (if any). - std::size_t count_; + // Indicates whether the strand is currently "locked" by a handler. This + // means that there is a handler upcall in progress, or that the strand + // itself has been scheduled in order to invoke some pending handlers. + bool locked_; - // The handlers waiting on the strand. - op_queue queue_; + // The handlers that are waiting on the strand but should not be run until + // after the next time the strand is scheduled. This queue must only be + // modified while the mutex is locked. + op_queue waiting_queue_; + + // The handlers that are ready to be run. Logically speaking, these are the + // handlers that hold the strand's lock. The ready queue is only modified + // from within the strand and so may be accessed without locking the mutex. + op_queue ready_queue_; }; typedef strand_impl* implementation_type; @@ -75,9 +84,6 @@ public: // Construct a new strand implementation. BOOST_ASIO_DECL void construct(implementation_type& impl); - // Destroy a strand implementation. - void destroy(implementation_type& impl); - // Request the io_service to invoke the given handler. template void dispatch(implementation_type& impl, Handler handler); @@ -95,7 +101,7 @@ private: BOOST_ASIO_DECL void do_post(implementation_type& impl, operation* op); BOOST_ASIO_DECL static void do_complete(io_service_impl* owner, - operation* base, boost::system::error_code ec, + operation* base, const boost::system::error_code& ec, std::size_t bytes_transferred); // The io_service implementation used to post completions. @@ -105,7 +111,11 @@ private: boost::asio::detail::mutex mutex_; // Number of implementations shared between all strand objects. +#if defined(BOOST_ASIO_STRAND_IMPLEMENTATIONS) + enum { num_implementations = BOOST_ASIO_STRAND_IMPLEMENTATIONS }; +#else // defined(BOOST_ASIO_STRAND_IMPLEMENTATIONS) enum { num_implementations = 193 }; +#endif // defined(BOOST_ASIO_STRAND_IMPLEMENTATIONS) // Pool of implementations. scoped_ptr implementations_[num_implementations]; diff --git a/3party/boost/boost/asio/detail/task_io_service.hpp b/3party/boost/boost/asio/detail/task_io_service.hpp index 08e7a572d4..e05c3a7419 100644 --- a/3party/boost/boost/asio/detail/task_io_service.hpp +++ b/3party/boost/boost/asio/detail/task_io_service.hpp @@ -2,7 +2,7 @@ // detail/task_io_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -40,11 +41,10 @@ class task_io_service public: typedef task_io_service_operation operation; - // Constructor. - BOOST_ASIO_DECL task_io_service(boost::asio::io_service& io_service); - - // How many concurrent threads are likely to run the io_service. - BOOST_ASIO_DECL void init(std::size_t concurrency_hint); + // Constructor. Specifies the number of concurrent threads that are likely to + // run the io_service. If set to 1 certain optimisation are performed. + BOOST_ASIO_DECL task_io_service(boost::asio::io_service& io_service, + std::size_t concurrency_hint = 0); // Destroy all user-defined handler objects owned by the service. BOOST_ASIO_DECL void shutdown_service(); @@ -86,6 +86,12 @@ public: stop(); } + // Return whether a handler can be dispatched immediately. + bool can_dispatch() + { + return thread_call_stack::contains(this) != 0; + } + // Request invocation of the given handler. template void dispatch(Handler handler); @@ -106,17 +112,41 @@ public: // that work_started() was previously called for each operation. BOOST_ASIO_DECL void post_deferred_completions(op_queue& ops); + // Request invocation of the given operation, preferring the thread-private + // queue if available, and return immediately. Assumes that work_started() + // has not yet been called for the operation. + BOOST_ASIO_DECL void post_private_immediate_completion(operation* op); + + // Request invocation of the given operation, preferring the thread-private + // queue if available, and return immediately. Assumes that work_started() + // was previously called for the operation. + BOOST_ASIO_DECL void post_private_deferred_completion(operation* op); + // Process unfinished operations as part of a shutdown_service operation. // Assumes that work_started() was previously called for the operations. BOOST_ASIO_DECL void abandon_operations(op_queue& ops); private: // Structure containing information about an idle thread. - struct idle_thread_info; + struct thread_info; - // Run at most one operation. Blocks only if this_idle_thread is non-null. - BOOST_ASIO_DECL std::size_t do_one(mutex::scoped_lock& lock, - idle_thread_info* this_idle_thread); + // Request invocation of the given operation, avoiding the thread-private + // queue, and return immediately. Assumes that work_started() has not yet + // been called for the operation. + BOOST_ASIO_DECL void post_non_private_immediate_completion(operation* op); + + // Request invocation of the given operation, avoiding the thread-private + // queue, and return immediately. Assumes that work_started() was previously + // called for the operation. + BOOST_ASIO_DECL void post_non_private_deferred_completion(operation* op); + + // Run at most one operation. May block. + BOOST_ASIO_DECL std::size_t do_run_one(mutex::scoped_lock& lock, + thread_info& this_thread, const boost::system::error_code& ec); + + // Poll for at most one operation. + BOOST_ASIO_DECL std::size_t do_poll_one(mutex::scoped_lock& lock, + thread_info& this_thread, const boost::system::error_code& ec); // Stop the task and all idle threads. BOOST_ASIO_DECL void stop_all_threads(mutex::scoped_lock& lock); @@ -135,8 +165,12 @@ private: struct task_cleanup; friend struct task_cleanup; - // Helper class to call work_finished() on block exit. - struct work_finished_on_block_exit; + // Helper class to call work-related operations on block exit. + struct work_cleanup; + friend struct work_cleanup; + + // Whether to optimise for single-threaded use cases. + const bool one_thread_; // Mutex to protect access to internal data. mutable mutex mutex_; @@ -165,8 +199,11 @@ private: // Flag to indicate that the dispatcher has been shut down. bool shutdown_; + // Per-thread call stack to track the state of each thread in the io_service. + typedef call_stack thread_call_stack; + // The threads that are currently idle. - idle_thread_info* first_idle_thread_; + thread_info* first_idle_thread_; }; } // namespace detail diff --git a/3party/boost/boost/asio/detail/task_io_service_fwd.hpp b/3party/boost/boost/asio/detail/task_io_service_fwd.hpp index b3243b7c65..4aa0ec364d 100644 --- a/3party/boost/boost/asio/detail/task_io_service_fwd.hpp +++ b/3party/boost/boost/asio/detail/task_io_service_fwd.hpp @@ -2,7 +2,7 @@ // detail/task_io_service_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/task_io_service_operation.hpp b/3party/boost/boost/asio/detail/task_io_service_operation.hpp index 72cbefd69a..1bf1301efc 100644 --- a/3party/boost/boost/asio/detail/task_io_service_operation.hpp +++ b/3party/boost/boost/asio/detail/task_io_service_operation.hpp @@ -2,7 +2,7 @@ // detail/task_io_service_operation.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -31,9 +31,10 @@ namespace detail { class task_io_service_operation BOOST_ASIO_INHERIT_TRACKED_HANDLER { public: - void complete(task_io_service& owner) + void complete(task_io_service& owner, + const boost::system::error_code& ec, std::size_t bytes_transferred) { - func_(&owner, this, boost::system::error_code(), 0); + func_(&owner, this, ec, bytes_transferred); } void destroy() @@ -44,11 +45,12 @@ public: protected: typedef void (*func_type)(task_io_service*, task_io_service_operation*, - boost::system::error_code, std::size_t); + const boost::system::error_code&, std::size_t); task_io_service_operation(func_type func) : next_(0), - func_(func) + func_(func), + task_result_(0) { } @@ -61,6 +63,9 @@ private: friend class op_queue_access; task_io_service_operation* next_; func_type func_; +protected: + friend class task_io_service; + unsigned int task_result_; // Passed into bytes transferred. }; } // namespace detail diff --git a/3party/boost/boost/asio/detail/thread.hpp b/3party/boost/boost/asio/detail/thread.hpp index 48cffb156a..5b452cf2b7 100644 --- a/3party/boost/boost/asio/detail/thread.hpp +++ b/3party/boost/boost/asio/detail/thread.hpp @@ -2,7 +2,7 @@ // detail/thread.hpp // ~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/throw_error.hpp b/3party/boost/boost/asio/detail/throw_error.hpp index 43bc9c3d64..bfb545aead 100644 --- a/3party/boost/boost/asio/detail/throw_error.hpp +++ b/3party/boost/boost/asio/detail/throw_error.hpp @@ -2,7 +2,7 @@ // detail/throw_error.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/timer_queue.hpp b/3party/boost/boost/asio/detail/timer_queue.hpp index 78974a4594..d14ba7caec 100644 --- a/3party/boost/boost/asio/detail/timer_queue.hpp +++ b/3party/boost/boost/asio/detail/timer_queue.hpp @@ -2,7 +2,7 @@ // detail/timer_queue.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -20,15 +20,12 @@ #include #include #include +#include +#include #include -#include #include +#include #include -#include - -#include -#include -#include #include @@ -57,7 +54,7 @@ public: friend class timer_queue; // The operations waiting on the timer. - op_queue op_queue_; + op_queue op_queue_; // The index of the timer in the heap. std::size_t heap_index_; @@ -77,7 +74,7 @@ public: // Add a new timer to the queue. Returns true if this is the timer that is // earliest in the queue, in which case the reactor's event demultiplexing // function call may need to be interrupted and restarted. - bool enqueue_timer(const time_type& time, per_timer_data& timer, timer_op* op) + bool enqueue_timer(const time_type& time, per_timer_data& timer, wait_op* op) { // Enqueue the timer object. if (timer.prev_ == 0 && &timer != timers_) @@ -124,17 +121,10 @@ public: if (heap_.empty()) return max_duration; - boost::posix_time::time_duration duration = Time_Traits::to_posix_duration( - Time_Traits::subtract(heap_[0].time_, Time_Traits::now())); - - if (duration > boost::posix_time::milliseconds(max_duration)) - duration = boost::posix_time::milliseconds(max_duration); - else if (duration <= boost::posix_time::milliseconds(0)) - duration = boost::posix_time::milliseconds(0); - else if (duration < boost::posix_time::milliseconds(1)) - duration = boost::posix_time::milliseconds(1); - - return duration.total_milliseconds(); + return this->to_msec( + Time_Traits::to_posix_duration( + Time_Traits::subtract(heap_[0].time_, Time_Traits::now())), + max_duration); } // Get the time for the timer that is earliest in the queue. @@ -143,28 +133,24 @@ public: if (heap_.empty()) return max_duration; - boost::posix_time::time_duration duration = Time_Traits::to_posix_duration( - Time_Traits::subtract(heap_[0].time_, Time_Traits::now())); - - if (duration > boost::posix_time::microseconds(max_duration)) - duration = boost::posix_time::microseconds(max_duration); - else if (duration <= boost::posix_time::microseconds(0)) - duration = boost::posix_time::microseconds(0); - else if (duration < boost::posix_time::microseconds(1)) - duration = boost::posix_time::microseconds(1); - - return duration.total_microseconds(); + return this->to_usec( + Time_Traits::to_posix_duration( + Time_Traits::subtract(heap_[0].time_, Time_Traits::now())), + max_duration); } // Dequeue all timers not later than the current time. virtual void get_ready_timers(op_queue& ops) { - const time_type now = Time_Traits::now(); - while (!heap_.empty() && !Time_Traits::less_than(now, heap_[0].time_)) + if (!heap_.empty()) { - per_timer_data* timer = heap_[0].timer_; - ops.push(timer->op_queue_); - remove_timer(*timer); + const time_type now = Time_Traits::now(); + while (!heap_.empty() && !Time_Traits::less_than(now, heap_[0].time_)) + { + per_timer_data* timer = heap_[0].timer_; + ops.push(timer->op_queue_); + remove_timer(*timer); + } } } @@ -190,7 +176,7 @@ public: std::size_t num_cancelled = 0; if (timer.prev_ != 0 || &timer == timers_) { - while (timer_op* op = (num_cancelled != max_cancelled) + while (wait_op* op = (num_cancelled != max_cancelled) ? timer.op_queue_.front() : 0) { op->ec_ = boost::asio::error::operation_aborted; @@ -289,9 +275,39 @@ private: } // Determine if the specified absolute time is positive infinity. - static bool is_positive_infinity(const boost::posix_time::ptime& time) + template + static bool is_positive_infinity( + const boost::date_time::base_time& time) { - return time == boost::posix_time::pos_infin; + return time.is_pos_infinity(); + } + + // Helper function to convert a duration into milliseconds. + template + long to_msec(const Duration& d, long max_duration) const + { + if (d.ticks() <= 0) + return 0; + boost::int64_t msec = d.total_milliseconds(); + if (msec == 0) + return 1; + if (msec > max_duration) + return max_duration; + return static_cast(msec); + } + + // Helper function to convert a duration into microseconds. + template + long to_usec(const Duration& d, long max_duration) const + { + if (d.ticks() <= 0) + return 0; + boost::int64_t usec = d.total_microseconds(); + if (usec == 0) + return 1; + if (usec > max_duration) + return max_duration; + return static_cast(usec); } // The head of a linked list of all active timers. @@ -310,64 +326,6 @@ private: std::vector heap_; }; -#if !defined(BOOST_ASIO_HEADER_ONLY) - -struct forwarding_posix_time_traits : time_traits {}; - -// Template specialisation for the commonly used instantation. -template <> -class timer_queue > - : public timer_queue_base -{ -public: - // The time type. - typedef boost::posix_time::ptime time_type; - - // The duration type. - typedef boost::posix_time::time_duration duration_type; - - // Per-timer data. - typedef timer_queue::per_timer_data - per_timer_data; - - // Constructor. - BOOST_ASIO_DECL timer_queue(); - - // Destructor. - BOOST_ASIO_DECL virtual ~timer_queue(); - - // Add a new timer to the queue. Returns true if this is the timer that is - // earliest in the queue, in which case the reactor's event demultiplexing - // function call may need to be interrupted and restarted. - BOOST_ASIO_DECL bool enqueue_timer(const time_type& time, - per_timer_data& timer, timer_op* op); - - // Whether there are no timers in the queue. - BOOST_ASIO_DECL virtual bool empty() const; - - // Get the time for the timer that is earliest in the queue. - BOOST_ASIO_DECL virtual long wait_duration_msec(long max_duration) const; - - // Get the time for the timer that is earliest in the queue. - BOOST_ASIO_DECL virtual long wait_duration_usec(long max_duration) const; - - // Dequeue all timers not later than the current time. - BOOST_ASIO_DECL virtual void get_ready_timers(op_queue& ops); - - // Dequeue all timers. - BOOST_ASIO_DECL virtual void get_all_timers(op_queue& ops); - - // Cancel and dequeue operations for the given timer. - BOOST_ASIO_DECL std::size_t cancel_timer( - per_timer_data& timer, op_queue& ops, - std::size_t max_cancelled = (std::numeric_limits::max)()); - -private: - timer_queue impl_; -}; - -#endif // !defined(BOOST_ASIO_HEADER_ONLY) - } // namespace detail } // namespace asio } // namespace boost diff --git a/3party/boost/boost/asio/detail/timer_queue_base.hpp b/3party/boost/boost/asio/detail/timer_queue_base.hpp index d4938711f5..cc7ef3493a 100644 --- a/3party/boost/boost/asio/detail/timer_queue_base.hpp +++ b/3party/boost/boost/asio/detail/timer_queue_base.hpp @@ -2,7 +2,7 @@ // detail/timer_queue_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/timer_queue_fwd.hpp b/3party/boost/boost/asio/detail/timer_queue_fwd.hpp index 14c63199a9..c97753f380 100644 --- a/3party/boost/boost/asio/detail/timer_queue_fwd.hpp +++ b/3party/boost/boost/asio/detail/timer_queue_fwd.hpp @@ -2,7 +2,7 @@ // detail/timer_queue_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/timer_queue_ptime.hpp b/3party/boost/boost/asio/detail/timer_queue_ptime.hpp new file mode 100644 index 0000000000..4c32ecef30 --- /dev/null +++ b/3party/boost/boost/asio/detail/timer_queue_ptime.hpp @@ -0,0 +1,91 @@ +// +// detail/timer_queue_ptime.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_DETAIL_TIMER_QUEUE_PTIME_HPP +#define BOOST_ASIO_DETAIL_TIMER_QUEUE_PTIME_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +struct forwarding_posix_time_traits : time_traits {}; + +// Template specialisation for the commonly used instantation. +template <> +class timer_queue > + : public timer_queue_base +{ +public: + // The time type. + typedef boost::posix_time::ptime time_type; + + // The duration type. + typedef boost::posix_time::time_duration duration_type; + + // Per-timer data. + typedef timer_queue::per_timer_data + per_timer_data; + + // Constructor. + BOOST_ASIO_DECL timer_queue(); + + // Destructor. + BOOST_ASIO_DECL virtual ~timer_queue(); + + // Add a new timer to the queue. Returns true if this is the timer that is + // earliest in the queue, in which case the reactor's event demultiplexing + // function call may need to be interrupted and restarted. + BOOST_ASIO_DECL bool enqueue_timer(const time_type& time, + per_timer_data& timer, wait_op* op); + + // Whether there are no timers in the queue. + BOOST_ASIO_DECL virtual bool empty() const; + + // Get the time for the timer that is earliest in the queue. + BOOST_ASIO_DECL virtual long wait_duration_msec(long max_duration) const; + + // Get the time for the timer that is earliest in the queue. + BOOST_ASIO_DECL virtual long wait_duration_usec(long max_duration) const; + + // Dequeue all timers not later than the current time. + BOOST_ASIO_DECL virtual void get_ready_timers(op_queue& ops); + + // Dequeue all timers. + BOOST_ASIO_DECL virtual void get_all_timers(op_queue& ops); + + // Cancel and dequeue operations for the given timer. + BOOST_ASIO_DECL std::size_t cancel_timer( + per_timer_data& timer, op_queue& ops, + std::size_t max_cancelled = (std::numeric_limits::max)()); + +private: + timer_queue impl_; +}; + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#if defined(BOOST_ASIO_HEADER_ONLY) +# include +#endif // defined(BOOST_ASIO_HEADER_ONLY) + +#endif // BOOST_ASIO_DETAIL_TIMER_QUEUE_PTIME_HPP diff --git a/3party/boost/boost/asio/detail/timer_queue_set.hpp b/3party/boost/boost/asio/detail/timer_queue_set.hpp index 549d7e6b43..028925909d 100644 --- a/3party/boost/boost/asio/detail/timer_queue_set.hpp +++ b/3party/boost/boost/asio/detail/timer_queue_set.hpp @@ -2,7 +2,7 @@ // detail/timer_queue_set.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/timer_scheduler.hpp b/3party/boost/boost/asio/detail/timer_scheduler.hpp index 2edc0c8e5e..8feea78e5e 100644 --- a/3party/boost/boost/asio/detail/timer_scheduler.hpp +++ b/3party/boost/boost/asio/detail/timer_scheduler.hpp @@ -2,7 +2,7 @@ // detail/timer_scheduler.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp b/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp index e01b657f6e..a72e2569e7 100644 --- a/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp +++ b/3party/boost/boost/asio/detail/timer_scheduler_fwd.hpp @@ -2,7 +2,7 @@ // detail/timer_scheduler_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/tss_ptr.hpp b/3party/boost/boost/asio/detail/tss_ptr.hpp index 35ed8e2ad9..d14a959447 100644 --- a/3party/boost/boost/asio/detail/tss_ptr.hpp +++ b/3party/boost/boost/asio/detail/tss_ptr.hpp @@ -2,7 +2,7 @@ // detail/tss_ptr.hpp // ~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -19,6 +19,8 @@ #if !defined(BOOST_HAS_THREADS) || defined(BOOST_ASIO_DISABLE_THREADS) # include +#elif defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION) +# include #elif defined(BOOST_WINDOWS) # include #elif defined(BOOST_HAS_PTHREADS) @@ -37,6 +39,8 @@ template class tss_ptr #if !defined(BOOST_HAS_THREADS) || defined(BOOST_ASIO_DISABLE_THREADS) : public null_tss_ptr +#elif defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION) + : public keyword_tss_ptr #elif defined(BOOST_WINDOWS) : public win_tss_ptr #elif defined(BOOST_HAS_PTHREADS) @@ -48,6 +52,8 @@ public: { #if !defined(BOOST_HAS_THREADS) || defined(BOOST_ASIO_DISABLE_THREADS) null_tss_ptr::operator=(value); +#elif defined(BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION) + keyword_tss_ptr::operator=(value); #elif defined(BOOST_WINDOWS) win_tss_ptr::operator=(value); #elif defined(BOOST_HAS_PTHREADS) diff --git a/3party/boost/boost/asio/detail/wait_handler.hpp b/3party/boost/boost/asio/detail/wait_handler.hpp index 77fedf7014..b511be80ce 100644 --- a/3party/boost/boost/asio/detail/wait_handler.hpp +++ b/3party/boost/boost/asio/detail/wait_handler.hpp @@ -2,7 +2,7 @@ // detail/wait_handler.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -19,7 +19,8 @@ #include #include #include -#include +#include +#include #include @@ -28,19 +29,20 @@ namespace asio { namespace detail { template -class wait_handler : public timer_op +class wait_handler : public wait_op { public: BOOST_ASIO_DEFINE_HANDLER_PTR(wait_handler); wait_handler(Handler& h) - : timer_op(&wait_handler::do_complete), + : wait_op(&wait_handler::do_complete), handler_(BOOST_ASIO_MOVE_CAST(Handler)(h)) { } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code /*ec*/, std::size_t /*bytes_transferred*/) + const boost::system::error_code& /*ec*/, + std::size_t /*bytes_transferred*/) { // Take ownership of the handler object. wait_handler* h(static_cast(base)); @@ -62,7 +64,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/timer_op.hpp b/3party/boost/boost/asio/detail/wait_op.hpp similarity index 73% rename from 3party/boost/boost/asio/detail/timer_op.hpp rename to 3party/boost/boost/asio/detail/wait_op.hpp index 24a536c6c9..0209eb07f9 100644 --- a/3party/boost/boost/asio/detail/timer_op.hpp +++ b/3party/boost/boost/asio/detail/wait_op.hpp @@ -1,15 +1,15 @@ // -// detail/timer_op.hpp -// ~~~~~~~~~~~~~~~~~~~ +// detail/wait_op.hpp +// ~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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 BOOST_ASIO_DETAIL_TIMER_OP_HPP -#define BOOST_ASIO_DETAIL_TIMER_OP_HPP +#ifndef BOOST_ASIO_DETAIL_WAIT_OP_HPP +#define BOOST_ASIO_DETAIL_WAIT_OP_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -24,7 +24,7 @@ namespace boost { namespace asio { namespace detail { -class timer_op +class wait_op : public operation { public: @@ -32,7 +32,7 @@ public: boost::system::error_code ec_; protected: - timer_op(func_type func) + wait_op(func_type func) : operation(func) { } @@ -44,4 +44,4 @@ protected: #include -#endif // BOOST_ASIO_DETAIL_TIMER_OP_HPP +#endif // BOOST_ASIO_DETAIL_WAIT_OP_HPP diff --git a/3party/boost/boost/asio/detail/weak_ptr.hpp b/3party/boost/boost/asio/detail/weak_ptr.hpp index 4ca617d7ba..af9a08d356 100644 --- a/3party/boost/boost/asio/detail/weak_ptr.hpp +++ b/3party/boost/boost/asio/detail/weak_ptr.hpp @@ -2,7 +2,7 @@ // detail/weak_ptr.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_event.hpp b/3party/boost/boost/asio/detail/win_event.hpp index 63c25c43f5..63140482ba 100644 --- a/3party/boost/boost/asio/detail/win_event.hpp +++ b/3party/boost/boost/asio/detail/win_event.hpp @@ -2,7 +2,7 @@ // detail/win_event.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp b/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp index 8636a91cb3..afb40d0115 100644 --- a/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp +++ b/3party/boost/boost/asio/detail/win_fd_set_adapter.hpp @@ -2,7 +2,7 @@ // detail/win_fd_set_adapter.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -19,6 +19,7 @@ #if defined(BOOST_WINDOWS) || defined(__CYGWIN__) +#include #include #include @@ -28,39 +29,67 @@ namespace asio { namespace detail { // Adapts the FD_SET type to meet the Descriptor_Set concept's requirements. -class win_fd_set_adapter +class win_fd_set_adapter : noncopyable { public: - enum { win_fd_set_size = 1024 }; + enum { default_fd_set_size = 1024 }; win_fd_set_adapter() - : max_descriptor_(invalid_socket) + : capacity_(default_fd_set_size), + max_descriptor_(invalid_socket) { - fd_set_.fd_count = 0; + fd_set_ = static_cast(::operator new( + sizeof(win_fd_set) - sizeof(SOCKET) + + sizeof(SOCKET) * (capacity_))); + fd_set_->fd_count = 0; + } + + ~win_fd_set_adapter() + { + ::operator delete(fd_set_); + } + + void reset() + { + fd_set_->fd_count = 0; + max_descriptor_ = invalid_socket; } bool set(socket_type descriptor) { - for (u_int i = 0; i < fd_set_.fd_count; ++i) - if (fd_set_.fd_array[i] == descriptor) + for (u_int i = 0; i < fd_set_->fd_count; ++i) + if (fd_set_->fd_array[i] == descriptor) return true; - if (fd_set_.fd_count < win_fd_set_size) + + if (fd_set_->fd_count == capacity_) { - fd_set_.fd_array[fd_set_.fd_count++] = descriptor; - return true; + u_int new_capacity = capacity_ + capacity_ / 2; + win_fd_set* new_fd_set = static_cast(::operator new( + sizeof(win_fd_set) - sizeof(SOCKET) + + sizeof(SOCKET) * (new_capacity))); + + new_fd_set->fd_count = fd_set_->fd_count; + for (u_int i = 0; i < fd_set_->fd_count; ++i) + new_fd_set->fd_array[i] = fd_set_->fd_array[i]; + + ::operator delete(fd_set_); + fd_set_ = new_fd_set; + capacity_ = new_capacity; } - return false; + + fd_set_->fd_array[fd_set_->fd_count++] = descriptor; + return true; } bool is_set(socket_type descriptor) const { return !!__WSAFDIsSet(descriptor, - const_cast(reinterpret_cast(&fd_set_))); + const_cast(reinterpret_cast(fd_set_))); } operator fd_set*() { - return reinterpret_cast(&fd_set_); + return reinterpret_cast(fd_set_); } socket_type max_descriptor() const @@ -69,15 +98,19 @@ public: } private: + // This structure is defined to be compatible with the Windows API fd_set - // structure, but without being dependent on the value of FD_SETSIZE. + // structure, but without being dependent on the value of FD_SETSIZE. We use + // the "struct hack" to allow the number of descriptors to be varied at + // runtime. struct win_fd_set { u_int fd_count; - SOCKET fd_array[win_fd_set_size]; + SOCKET fd_array[1]; }; - win_fd_set fd_set_; + win_fd_set* fd_set_; + u_int capacity_; socket_type max_descriptor_; }; diff --git a/3party/boost/boost/asio/detail/win_fenced_block.hpp b/3party/boost/boost/asio/detail/win_fenced_block.hpp index 769db2eb99..5e56aa316c 100644 --- a/3party/boost/boost/asio/detail/win_fenced_block.hpp +++ b/3party/boost/boost/asio/detail/win_fenced_block.hpp @@ -2,7 +2,7 @@ // detail/win_fenced_block.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -31,8 +31,16 @@ class win_fenced_block : private noncopyable { public: - // Constructor. - win_fenced_block() + enum half_t { half }; + enum full_t { full }; + + // Constructor for a half fenced block. + explicit win_fenced_block(half_t) + { + } + + // Constructor for a full fenced block. + explicit win_fenced_block(full_t) { #if defined(__BORLANDC__) LONG barrier = 0; diff --git a/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp b/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp index c7c2456951..8b41ab4a44 100644 --- a/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_handle_read_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_handle_read_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -50,8 +50,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& result_ec, + std::size_t bytes_transferred) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_handle_read_op* o(static_cast(base)); ptr p = { boost::addressof(o->handler_), o, o }; @@ -85,7 +88,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp b/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp index 444838d3ed..68a9f90e3a 100644 --- a/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_handle_service.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_handle_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp b/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp index 510b0924e1..c87cd60a86 100644 --- a/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_handle_write_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_handle_write_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -49,7 +49,7 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& ec, std::size_t bytes_transferred) { // Take ownership of the operation object. win_iocp_handle_write_op* o(static_cast(base)); @@ -80,7 +80,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_io_service.hpp b/3party/boost/boost/asio/detail/win_iocp_io_service.hpp index 09ee612316..0e3bb0b8e6 100644 --- a/3party/boost/boost/asio/detail/win_iocp_io_service.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_io_service.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_io_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -21,17 +21,18 @@ #include #include +#include #include #include #include #include -#include +#include #include #include #include +#include #include #include -#include #include @@ -39,16 +40,17 @@ namespace boost { namespace asio { namespace detail { -class timer_op; +class wait_op; class win_iocp_io_service : public boost::asio::detail::service_base { public: - // Constructor. - BOOST_ASIO_DECL win_iocp_io_service(boost::asio::io_service& io_service); - BOOST_ASIO_DECL void init(size_t concurrency_hint); + // Constructor. Specifies a concurrency hint that is passed through to the + // underlying I/O completion port. + BOOST_ASIO_DECL win_iocp_io_service(boost::asio::io_service& io_service, + size_t concurrency_hint = 0); // Destroy all user-defined handler objects owned by the service. BOOST_ASIO_DECL void shutdown_service(); @@ -102,6 +104,12 @@ public: stop(); } + // Return whether a handler can be dispatched immediately. + bool can_dispatch() + { + return call_stack::contains(this) != 0; + } + // Request invocation of the given handler. template void dispatch(Handler handler); @@ -127,6 +135,22 @@ public: BOOST_ASIO_DECL void post_deferred_completions( op_queue& ops); + // Request invocation of the given operation using the thread-private queue + // and return immediately. Assumes that work_started() has not yet been + // called for the operation. + void post_private_immediate_completion(win_iocp_operation* op) + { + post_immediate_completion(op); + } + + // Request invocation of the given operation using the thread-private queue + // and return immediately. Assumes that work_started() was previously called + // for the operation. + void post_private_deferred_completion(win_iocp_operation* op) + { + post_deferred_completion(op); + } + // Process unfinished operations as part of a shutdown_service operation. // Assumes that work_started() was previously called for the operations. BOOST_ASIO_DECL void abandon_operations(op_queue& ops); @@ -161,7 +185,7 @@ public: template void schedule_timer(timer_queue& queue, const typename Time_Traits::time_type& time, - typename timer_queue::per_timer_data& timer, timer_op* op); + typename timer_queue::per_timer_data& timer, wait_op* op); // Cancel the timer associated with the given token. Returns the number of // handlers that have been posted or dispatched. diff --git a/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp b/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp index b6da9ec6c7..ec31fa1623 100644 --- a/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_io_service_fwd.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_io_service_fwd.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp b/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp index ee0646ae93..021dfdbae8 100644 --- a/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_null_buffers_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -56,8 +56,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& result_ec, + std::size_t bytes_transferred) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_null_buffers_op* o(static_cast(base)); ptr p = { boost::addressof(o->handler_), o, o }; @@ -95,7 +98,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_operation.hpp b/3party/boost/boost/asio/detail/win_iocp_operation.hpp index 2893d897ea..67b546653e 100644 --- a/3party/boost/boost/asio/detail/win_iocp_operation.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_operation.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_operation.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -38,8 +39,8 @@ class win_iocp_operation { public: void complete(win_iocp_io_service& owner, - const boost::system::error_code& ec = boost::system::error_code(), - std::size_t bytes_transferred = 0) + const boost::system::error_code& ec, + std::size_t bytes_transferred) { func_(&owner, this, ec, bytes_transferred); } @@ -50,8 +51,9 @@ public: } protected: - typedef void (*func_type)(win_iocp_io_service*, - win_iocp_operation*, boost::system::error_code, std::size_t); + typedef void (*func_type)( + win_iocp_io_service*, win_iocp_operation*, + const boost::system::error_code&, std::size_t); win_iocp_operation(func_type func) : next_(0), diff --git a/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp b/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp index f22c382054..235f48e33c 100644 --- a/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_overlapped_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_overlapped_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -46,7 +46,7 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& ec, std::size_t bytes_transferred) { // Take ownership of the operation object. win_iocp_overlapped_op* o(static_cast(base)); @@ -68,7 +68,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp b/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp index db6c852ae9..a6df25433d 100644 --- a/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_overlapped_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp b/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp index bf7099a0bb..7d96f6d2a6 100644 --- a/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_serial_port_service.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_serial_port_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp index c15d06fa50..18db3b4aec 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_accept_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -73,8 +73,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t /*bytes_transferred*/) + const boost::system::error_code& result_ec, + std::size_t /*bytes_transferred*/) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_socket_accept_op* o(static_cast(base)); ptr p = { boost::addressof(o->handler_), o, o }; @@ -134,7 +137,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp index cae85fdad7..b50b7428a8 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_recv_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -53,8 +53,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& result_ec, + std::size_t bytes_transferred) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_socket_recv_op* o(static_cast(base)); ptr p = { boost::addressof(o->handler_), o, o }; @@ -89,7 +92,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp index f2c38fa470..798921d2a6 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_recvfrom_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -59,8 +59,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& result_ec, + std::size_t bytes_transferred) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_socket_recvfrom_op* o( static_cast(base)); @@ -96,7 +99,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp index 6ee6113257..db13fb82d5 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_recvmsg_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -55,8 +55,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& result_ec, + std::size_t bytes_transferred) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_socket_recvmsg_op* o( static_cast(base)); @@ -90,7 +93,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp index c8a49a37ef..fbd00cafea 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_send_op.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_send_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -51,8 +51,11 @@ public: } static void do_complete(io_service_impl* owner, operation* base, - boost::system::error_code ec, std::size_t bytes_transferred) + const boost::system::error_code& result_ec, + std::size_t bytes_transferred) { + boost::system::error_code ec(result_ec); + // Take ownership of the operation object. win_iocp_socket_send_op* o(static_cast(base)); ptr p = { boost::addressof(o->handler_), o, o }; @@ -84,7 +87,7 @@ public: // Make the upcall if required. if (owner) { - boost::asio::detail::fenced_block b; + fenced_block b(fenced_block::half); BOOST_ASIO_HANDLER_INVOCATION_BEGIN((handler.arg1_, handler.arg2_)); boost_asio_handler_invoke_helpers::invoke(handler, handler.handler_); BOOST_ASIO_HANDLER_INVOCATION_END; diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp index a7dfbfbaf3..d6dc98b0ab 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_service.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -281,7 +281,7 @@ public: boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_write(impl.socket_, ec); + socket_ops::poll_write(impl.socket_, impl.state_, ec); return 0; } @@ -358,7 +358,7 @@ public: socket_base::message_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_read(impl.socket_, ec); + socket_ops::poll_read(impl.socket_, impl.state_, ec); // Reset endpoint since it can be given no sensible value at this time. sender_endpoint = endpoint_type(); diff --git a/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp b/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp index 21062ee200..79580def19 100644 --- a/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp +++ b/3party/boost/boost/asio/detail/win_iocp_socket_service_base.hpp @@ -2,7 +2,7 @@ // detail/win_iocp_socket_service_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -206,7 +206,7 @@ public: socket_base::message_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_write(impl.socket_, ec); + socket_ops::poll_write(impl.socket_, impl.state_, ec); return 0; } @@ -273,7 +273,7 @@ public: socket_base::message_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_read(impl.socket_, ec); + socket_ops::poll_read(impl.socket_, impl.state_, ec); return 0; } @@ -343,7 +343,7 @@ public: socket_base::message_flags& out_flags, boost::system::error_code& ec) { // Wait for socket to become ready. - socket_ops::poll_read(impl.socket_, ec); + socket_ops::poll_read(impl.socket_, impl.state_, ec); // Clear out_flags, since we cannot give it any other sensible value when // performing a null_buffers operation. diff --git a/3party/boost/boost/asio/detail/win_mutex.hpp b/3party/boost/boost/asio/detail/win_mutex.hpp index 0c5dc268a0..930d01f597 100644 --- a/3party/boost/boost/asio/detail/win_mutex.hpp +++ b/3party/boost/boost/asio/detail/win_mutex.hpp @@ -2,7 +2,7 @@ // detail/win_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_object_handle_service.hpp b/3party/boost/boost/asio/detail/win_object_handle_service.hpp new file mode 100644 index 0000000000..52a972d735 --- /dev/null +++ b/3party/boost/boost/asio/detail/win_object_handle_service.hpp @@ -0,0 +1,185 @@ +// +// detail/win_object_handle_service.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2011 Boris Schaeling (boris@highscore.de) +// +// 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 BOOST_ASIO_DETAIL_WIN_OBJECT_HANDLE_SERVICE_HPP +#define BOOST_ASIO_DETAIL_WIN_OBJECT_HANDLE_SERVICE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +class win_object_handle_service +{ +public: + // The native type of an object handle. + typedef HANDLE native_handle_type; + + // The implementation type of the object handle. + class implementation_type + { + public: + // Default constructor. + implementation_type() + : handle_(INVALID_HANDLE_VALUE), + wait_handle_(INVALID_HANDLE_VALUE), + owner_(0), + next_(0), + prev_(0) + { + } + + private: + // Only this service will have access to the internal values. + friend class win_object_handle_service; + + // The native object handle representation. May be accessed or modified + // without locking the mutex. + native_handle_type handle_; + + // The handle used to unregister the wait operation. The mutex must be + // locked when accessing or modifying this member. + HANDLE wait_handle_; + + // The operations waiting on the object handle. If there is a registered + // wait then the mutex must be locked when accessing or modifying this + // member + op_queue op_queue_; + + // The service instance that owns the object handle implementation. + win_object_handle_service* owner_; + + // Pointers to adjacent handle implementations in linked list. The mutex + // must be locked when accessing or modifying these members. + implementation_type* next_; + implementation_type* prev_; + }; + + // Constructor. + BOOST_ASIO_DECL win_object_handle_service( + boost::asio::io_service& io_service); + + // Destroy all user-defined handler objects owned by the service. + BOOST_ASIO_DECL void shutdown_service(); + + // Construct a new handle implementation. + BOOST_ASIO_DECL void construct(implementation_type& impl); + + // Move-construct a new handle implementation. + BOOST_ASIO_DECL void move_construct(implementation_type& impl, + implementation_type& other_impl); + + // Move-assign from another handle implementation. + BOOST_ASIO_DECL void move_assign(implementation_type& impl, + win_object_handle_service& other_service, + implementation_type& other_impl); + + // Destroy a handle implementation. + BOOST_ASIO_DECL void destroy(implementation_type& impl); + + // Assign a native handle to a handle implementation. + BOOST_ASIO_DECL boost::system::error_code assign(implementation_type& impl, + const native_handle_type& handle, boost::system::error_code& ec); + + // Determine whether the handle is open. + bool is_open(const implementation_type& impl) const + { + return impl.handle_ != INVALID_HANDLE_VALUE && impl.handle_ != 0; + } + + // Destroy a handle implementation. + BOOST_ASIO_DECL boost::system::error_code close(implementation_type& impl, + boost::system::error_code& ec); + + // Get the native handle representation. + native_handle_type native_handle(const implementation_type& impl) const + { + return impl.handle_; + } + + // Cancel all operations associated with the handle. + BOOST_ASIO_DECL boost::system::error_code cancel(implementation_type& impl, + boost::system::error_code& ec); + + // Perform a synchronous wait for the object to enter a signalled state. + BOOST_ASIO_DECL void wait(implementation_type& impl, + boost::system::error_code& ec); + + /// Start an asynchronous wait. + template + void async_wait(implementation_type& impl, Handler handler) + { + // Allocate and construct an operation to wrap the handler. + typedef wait_handler op; + typename op::ptr p = { boost::addressof(handler), + boost_asio_handler_alloc_helpers::allocate( + sizeof(op), handler), 0 }; + p.p = new (p.v) op(handler); + + BOOST_ASIO_HANDLER_CREATION((p.p, "object_handle", &impl, "async_wait")); + + start_wait_op(impl, p.p); + p.v = p.p = 0; + } + +private: + // Helper function to start an asynchronous wait operation. + BOOST_ASIO_DECL void start_wait_op(implementation_type& impl, wait_op* op); + + // Helper function to register a wait operation. + BOOST_ASIO_DECL void register_wait_callback( + implementation_type& impl, mutex::scoped_lock& lock); + + // Callback function invoked when the registered wait completes. + static BOOST_ASIO_DECL VOID CALLBACK wait_callback( + PVOID param, BOOLEAN timeout); + + // The io_service implementation used to post completions. + io_service_impl& io_service_; + + // Mutex to protect access to internal state. + mutex mutex_; + + // The head of a linked list of all implementations. + implementation_type* impl_list_; + + // Flag to indicate that the dispatcher has been shut down. + bool shutdown_; +}; + +} // namespace detail +} // namespace asio +} // namespace boost + +#include + +#if defined(BOOST_ASIO_HEADER_ONLY) +# include +#endif // defined(BOOST_ASIO_HEADER_ONLY) + +#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + +#endif // BOOST_ASIO_DETAIL_WIN_OBJECT_HANDLE_SERVICE_HPP diff --git a/3party/boost/boost/asio/detail/win_static_mutex.hpp b/3party/boost/boost/asio/detail/win_static_mutex.hpp index b6791c226a..a54b36b5d4 100644 --- a/3party/boost/boost/asio/detail/win_static_mutex.hpp +++ b/3party/boost/boost/asio/detail/win_static_mutex.hpp @@ -2,7 +2,7 @@ // detail/win_static_mutex.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_thread.hpp b/3party/boost/boost/asio/detail/win_thread.hpp index 4e33bd9b21..754786ebcd 100644 --- a/3party/boost/boost/asio/detail/win_thread.hpp +++ b/3party/boost/boost/asio/detail/win_thread.hpp @@ -2,7 +2,7 @@ // detail/win_thread.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/win_tss_ptr.hpp b/3party/boost/boost/asio/detail/win_tss_ptr.hpp index 75811c1ec5..44cacc65fd 100644 --- a/3party/boost/boost/asio/detail/win_tss_ptr.hpp +++ b/3party/boost/boost/asio/detail/win_tss_ptr.hpp @@ -2,7 +2,7 @@ // detail/win_tss_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/wince_thread.hpp b/3party/boost/boost/asio/detail/wince_thread.hpp index 8d5ede86e4..389cb9d0eb 100644 --- a/3party/boost/boost/asio/detail/wince_thread.hpp +++ b/3party/boost/boost/asio/detail/wince_thread.hpp @@ -2,7 +2,7 @@ // detail/wince_thread.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/winsock_init.hpp b/3party/boost/boost/asio/detail/winsock_init.hpp index dc50fbf1d2..702ba7119a 100644 --- a/3party/boost/boost/asio/detail/winsock_init.hpp +++ b/3party/boost/boost/asio/detail/winsock_init.hpp @@ -2,7 +2,7 @@ // detail/winsock_init.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/detail/wrapped_handler.hpp b/3party/boost/boost/asio/detail/wrapped_handler.hpp index dcff1c943b..d82da22b70 100644 --- a/3party/boost/boost/asio/detail/wrapped_handler.hpp +++ b/3party/boost/boost/asio/detail/wrapped_handler.hpp @@ -2,7 +2,7 @@ // detail/wrapped_handler.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/error.hpp b/3party/boost/boost/asio/error.hpp index 355c8a1e1c..331297b6c6 100644 --- a/3party/boost/boost/asio/error.hpp +++ b/3party/boost/boost/asio/error.hpp @@ -2,7 +2,7 @@ // error.hpp // ~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/handler_alloc_hook.hpp b/3party/boost/boost/asio/handler_alloc_hook.hpp index ca56871991..6bef15188e 100644 --- a/3party/boost/boost/asio/handler_alloc_hook.hpp +++ b/3party/boost/boost/asio/handler_alloc_hook.hpp @@ -2,7 +2,7 @@ // handler_alloc_hook.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/handler_invoke_hook.hpp b/3party/boost/boost/asio/handler_invoke_hook.hpp index f4f68311c0..6f03888dfa 100644 --- a/3party/boost/boost/asio/handler_invoke_hook.hpp +++ b/3party/boost/boost/asio/handler_invoke_hook.hpp @@ -2,7 +2,7 @@ // handler_invoke_hook.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/high_resolution_timer.hpp b/3party/boost/boost/asio/high_resolution_timer.hpp new file mode 100644 index 0000000000..197a68e9fd --- /dev/null +++ b/3party/boost/boost/asio/high_resolution_timer.hpp @@ -0,0 +1,65 @@ +// +// high_resolution_timer.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_HIGH_RESOLUTION_TIMER_HPP +#define BOOST_ASIO_HIGH_RESOLUTION_TIMER_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_STD_CHRONO) \ + || defined(BOOST_ASIO_HAS_BOOST_CHRONO) \ + || defined(GENERATING_DOCUMENTATION) + +#if defined(BOOST_ASIO_HAS_STD_CHRONO) +# include +#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO) +# include +#endif + +#include + +namespace boost { +namespace asio { + +#if defined(GENERATING_DOCUMENTATION) +/// Typedef for a timer based on the high resolution clock. +/** + * This typedef uses the C++11 @c <chrono> standard library facility, if + * available. Otherwise, it may use the Boost.Chrono library. To explicitly + * utilise Boost.Chrono, use the basic_waitable_timer template directly: + * @code + * typedef basic_waitable_timer timer; + * @endcode + */ +typedef basic_waitable_timer< + chrono::high_resolution_clock> + high_resolution_timer; +#elif defined(BOOST_ASIO_HAS_STD_CHRONO) +typedef basic_waitable_timer< + std::chrono::high_resolution_clock> + high_resolution_timer; +#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO) +typedef basic_waitable_timer< + boost::chrono::high_resolution_clock> + high_resolution_timer; +#endif + +} // namespace asio +} // namespace boost + +#endif // defined(BOOST_ASIO_HAS_STD_CHRONO) + // || defined(BOOST_ASIO_HAS_BOOST_CHRONO) + // || defined(GENERATING_DOCUMENTATION) + +#endif // BOOST_ASIO_HIGH_RESOLUTION_TIMER_HPP diff --git a/3party/boost/boost/asio/impl/connect.hpp b/3party/boost/boost/asio/impl/connect.hpp index d0609f928d..a21bb2de8e 100644 --- a/3party/boost/boost/asio/impl/connect.hpp +++ b/3party/boost/boost/asio/impl/connect.hpp @@ -2,7 +2,7 @@ // impl/connect.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/impl/error.ipp b/3party/boost/boost/asio/impl/error.ipp index 11e70455b9..cfb7a997ec 100644 --- a/3party/boost/boost/asio/impl/error.ipp +++ b/3party/boost/boost/asio/impl/error.ipp @@ -2,7 +2,7 @@ // impl/error.ipp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/impl/io_service.hpp b/3party/boost/boost/asio/impl/io_service.hpp index dbdd29414b..510de0e103 100644 --- a/3party/boost/boost/asio/impl/io_service.hpp +++ b/3party/boost/boost/asio/impl/io_service.hpp @@ -2,7 +2,7 @@ // impl/io_service.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -33,6 +33,13 @@ inline Service& use_service(io_service& ios) return ios.service_registry_->template use_service(); } +template <> +inline detail::io_service_impl& use_service( + io_service& ios) +{ + return ios.impl_; +} + template inline void add_service(io_service& ios, Service* svc) { @@ -102,25 +109,25 @@ io_service::wrap(Handler handler) } inline io_service::work::work(boost::asio::io_service& io_service) - : io_service_(io_service) + : io_service_impl_(io_service.impl_) { - io_service_.impl_.work_started(); + io_service_impl_.work_started(); } inline io_service::work::work(const work& other) - : io_service_(other.io_service_) + : io_service_impl_(other.io_service_impl_) { - io_service_.impl_.work_started(); + io_service_impl_.work_started(); } inline io_service::work::~work() { - io_service_.impl_.work_finished(); + io_service_impl_.work_finished(); } inline boost::asio::io_service& io_service::work::get_io_service() { - return io_service_; + return io_service_impl_.get_io_service(); } inline boost::asio::io_service& io_service::service::get_io_service() diff --git a/3party/boost/boost/asio/impl/io_service.ipp b/3party/boost/boost/asio/impl/io_service.ipp index 60ad28c817..1e3af48f75 100644 --- a/3party/boost/boost/asio/impl/io_service.ipp +++ b/3party/boost/boost/asio/impl/io_service.ipp @@ -2,7 +2,7 @@ // impl/io_service.ipp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -33,17 +34,18 @@ namespace boost { namespace asio { io_service::io_service() - : service_registry_(new boost::asio::detail::service_registry(*this)), - impl_(service_registry_->use_service()) + : service_registry_(new boost::asio::detail::service_registry( + *this, static_cast(0), + (std::numeric_limits::max)())), + impl_(service_registry_->first_service()) { - impl_.init((std::numeric_limits::max)()); } io_service::io_service(std::size_t concurrency_hint) - : service_registry_(new boost::asio::detail::service_registry(*this)), - impl_(service_registry_->use_service()) + : service_registry_(new boost::asio::detail::service_registry( + *this, static_cast(0), concurrency_hint)), + impl_(service_registry_->first_service()) { - impl_.init(concurrency_hint); } io_service::~io_service() diff --git a/3party/boost/boost/asio/impl/read.hpp b/3party/boost/boost/asio/impl/read.hpp index 83518102b7..9290cd42e0 100644 --- a/3party/boost/boost/asio/impl/read.hpp +++ b/3party/boost/boost/asio/impl/read.hpp @@ -2,7 +2,7 @@ // impl/read.hpp // ~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,9 +18,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -280,6 +282,168 @@ namespace detail ReadHandler handler_; }; + template + class read_op, + CompletionCondition, ReadHandler> + : detail::base_from_completion_cond + { + public: + read_op(AsyncReadStream& stream, const boost::array& buffers, + CompletionCondition completion_condition, ReadHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + stream_(stream), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + read_op(const read_op& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + read_op(read_op&& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::mutable_buffer(buffers_[0]), + boost::asio::mutable_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + stream_.async_read_some(bufs, BOOST_ASIO_MOVE_CAST(read_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncReadStream& stream_; + boost::array buffers_; + std::size_t total_transferred_; + ReadHandler handler_; + }; + +#if defined(BOOST_ASIO_HAS_STD_ARRAY) + + template + class read_op, + CompletionCondition, ReadHandler> + : detail::base_from_completion_cond + { + public: + read_op(AsyncReadStream& stream, const std::array& buffers, + CompletionCondition completion_condition, ReadHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + stream_(stream), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + read_op(const read_op& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + read_op(read_op&& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::mutable_buffer(buffers_[0]), + boost::asio::mutable_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + stream_.async_read_some(bufs, BOOST_ASIO_MOVE_CAST(read_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncReadStream& stream_; + std::array buffers_; + std::size_t total_transferred_; + ReadHandler handler_; + }; + +#endif // defined(BOOST_ASIO_HAS_STD_ARRAY) + template inline void* asio_handler_allocate(std::size_t size, diff --git a/3party/boost/boost/asio/impl/read_at.hpp b/3party/boost/boost/asio/impl/read_at.hpp index 14fddc4983..08e37feeed 100644 --- a/3party/boost/boost/asio/impl/read_at.hpp +++ b/3party/boost/boost/asio/impl/read_at.hpp @@ -2,7 +2,7 @@ // impl/read_at.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,9 +18,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -300,6 +302,180 @@ namespace detail ReadHandler handler_; }; + template + class read_at_op, + CompletionCondition, ReadHandler> + : detail::base_from_completion_cond + { + public: + read_at_op(AsyncRandomAccessReadDevice& device, + boost::uint64_t offset, const boost::array& buffers, + CompletionCondition completion_condition, ReadHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + device_(device), + offset_(offset), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + read_at_op(const read_at_op& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + read_at_op(read_at_op&& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::mutable_buffer(buffers_[0]), + boost::asio::mutable_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + device_.async_read_some_at(offset_ + total_transferred_, + bufs, BOOST_ASIO_MOVE_CAST(read_at_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncRandomAccessReadDevice& device_; + boost::uint64_t offset_; + boost::array buffers_; + std::size_t total_transferred_; + ReadHandler handler_; + }; + +#if defined(BOOST_ASIO_HAS_STD_ARRAY) + + template + class read_at_op, + CompletionCondition, ReadHandler> + : detail::base_from_completion_cond + { + public: + read_at_op(AsyncRandomAccessReadDevice& device, + boost::uint64_t offset, const std::array& buffers, + CompletionCondition completion_condition, ReadHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + device_(device), + offset_(offset), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + read_at_op(const read_at_op& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + read_at_op(read_at_op&& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(ReadHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::mutable_buffer(buffers_[0]), + boost::asio::mutable_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + device_.async_read_some_at(offset_ + total_transferred_, + bufs, BOOST_ASIO_MOVE_CAST(read_at_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncRandomAccessReadDevice& device_; + boost::uint64_t offset_; + std::array buffers_; + std::size_t total_transferred_; + ReadHandler handler_; + }; + +#endif // defined(BOOST_ASIO_HAS_STD_ARRAY) + template diff --git a/3party/boost/boost/asio/impl/read_until.hpp b/3party/boost/boost/asio/impl/read_until.hpp index e27e0e21e6..1b9a8f3f82 100644 --- a/3party/boost/boost/asio/impl/read_until.hpp +++ b/3party/boost/boost/asio/impl/read_until.hpp @@ -2,7 +2,7 @@ // impl/read_until.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -861,7 +861,7 @@ namespace detail inline read_until_expr_op make_read_until_expr_op(AsyncReadStream& s, boost::asio::basic_streambuf& b, - const boost::regex& expr, ReadHandler handler) + const RegEx& expr, ReadHandler handler) { return read_until_expr_op( s, b, expr, handler); diff --git a/3party/boost/boost/asio/impl/serial_port_base.hpp b/3party/boost/boost/asio/impl/serial_port_base.hpp index c75f8c275d..30660458ca 100644 --- a/3party/boost/boost/asio/impl/serial_port_base.hpp +++ b/3party/boost/boost/asio/impl/serial_port_base.hpp @@ -2,7 +2,7 @@ // impl/serial_port_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/impl/serial_port_base.ipp b/3party/boost/boost/asio/impl/serial_port_base.ipp index c665ac860b..0344fa54a3 100644 --- a/3party/boost/boost/asio/impl/serial_port_base.ipp +++ b/3party/boost/boost/asio/impl/serial_port_base.ipp @@ -2,7 +2,7 @@ // impl/serial_port_base.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/impl/src.cpp b/3party/boost/boost/asio/impl/src.cpp index 4d1acc2dcd..1150954b5a 100644 --- a/3party/boost/boost/asio/impl/src.cpp +++ b/3party/boost/boost/asio/impl/src.cpp @@ -2,7 +2,7 @@ // impl/src.cpp // ~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/impl/src.hpp b/3party/boost/boost/asio/impl/src.hpp index e9bbfb4cfa..e5a0fafde1 100644 --- a/3party/boost/boost/asio/impl/src.hpp +++ b/3party/boost/boost/asio/impl/src.hpp @@ -2,7 +2,7 @@ // impl/src.hpp // ~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/asio/impl/write.hpp b/3party/boost/boost/asio/impl/write.hpp index 2c5c595ce6..61422e4aaa 100644 --- a/3party/boost/boost/asio/impl/write.hpp +++ b/3party/boost/boost/asio/impl/write.hpp @@ -2,7 +2,7 @@ // impl/write.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -17,9 +17,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -339,6 +341,168 @@ namespace detail WriteHandler handler_; }; + template + class write_op, + CompletionCondition, WriteHandler> + : detail::base_from_completion_cond + { + public: + write_op(AsyncWriteStream& stream, const boost::array& buffers, + CompletionCondition completion_condition, WriteHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + stream_(stream), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + write_op(const write_op& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + write_op(write_op&& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::const_buffer(buffers_[0]), + boost::asio::const_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + stream_.async_write_some(bufs, BOOST_ASIO_MOVE_CAST(write_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncWriteStream& stream_; + boost::array buffers_; + std::size_t total_transferred_; + WriteHandler handler_; + }; + +#if defined(BOOST_ASIO_HAS_STD_ARRAY) + + template + class write_op, + CompletionCondition, WriteHandler> + : detail::base_from_completion_cond + { + public: + write_op(AsyncWriteStream& stream, const std::array& buffers, + CompletionCondition completion_condition, WriteHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + stream_(stream), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + write_op(const write_op& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + write_op(write_op&& other) + : detail::base_from_completion_cond(other), + stream_(other.stream_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::const_buffer(buffers_[0]), + boost::asio::const_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + stream_.async_write_some(bufs, BOOST_ASIO_MOVE_CAST(write_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncWriteStream& stream_; + std::array buffers_; + std::size_t total_transferred_; + WriteHandler handler_; + }; + +#endif // defined(BOOST_ASIO_HAS_STD_ARRAY) + template inline void* asio_handler_allocate(std::size_t size, diff --git a/3party/boost/boost/asio/impl/write_at.hpp b/3party/boost/boost/asio/impl/write_at.hpp index b1ac94c264..acba02fb85 100644 --- a/3party/boost/boost/asio/impl/write_at.hpp +++ b/3party/boost/boost/asio/impl/write_at.hpp @@ -2,7 +2,7 @@ // impl/write_at.hpp // ~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -17,9 +17,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -362,6 +364,180 @@ namespace detail WriteHandler handler_; }; + template + class write_at_op, + CompletionCondition, WriteHandler> + : detail::base_from_completion_cond + { + public: + write_at_op(AsyncRandomAccessWriteDevice& device, + boost::uint64_t offset, const boost::array& buffers, + CompletionCondition completion_condition, WriteHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + device_(device), + offset_(offset), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + write_at_op(const write_at_op& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + write_at_op(write_at_op&& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::const_buffer(buffers_[0]), + boost::asio::const_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + device_.async_write_some_at(offset_ + total_transferred_, + bufs, BOOST_ASIO_MOVE_CAST(write_at_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncRandomAccessWriteDevice& device_; + boost::uint64_t offset_; + boost::array buffers_; + std::size_t total_transferred_; + WriteHandler handler_; + }; + +#if defined(BOOST_ASIO_HAS_STD_ARRAY) + + template + class write_at_op, + CompletionCondition, WriteHandler> + : detail::base_from_completion_cond + { + public: + write_at_op(AsyncRandomAccessWriteDevice& device, + boost::uint64_t offset, const std::array& buffers, + CompletionCondition completion_condition, WriteHandler& handler) + : detail::base_from_completion_cond< + CompletionCondition>(completion_condition), + device_(device), + offset_(offset), + buffers_(buffers), + total_transferred_(0), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(handler)) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) + write_at_op(const write_at_op& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(other.handler_) + { + } + + write_at_op(write_at_op&& other) + : detail::base_from_completion_cond(other), + device_(other.device_), + offset_(other.offset_), + buffers_(other.buffers_), + total_transferred_(other.total_transferred_), + handler_(BOOST_ASIO_MOVE_CAST(WriteHandler)(other.handler_)) + { + } +#endif // defined(BOOST_ASIO_HAS_MOVE) + + void operator()(const boost::system::error_code& ec, + std::size_t bytes_transferred, int start = 0) + { + typename boost::asio::detail::dependent_type >::type bufs = {{ + boost::asio::const_buffer(buffers_[0]), + boost::asio::const_buffer(buffers_[1]) }}; + std::size_t buffer_size0 = boost::asio::buffer_size(bufs[0]); + std::size_t buffer_size1 = boost::asio::buffer_size(bufs[1]); + std::size_t n = 0; + switch (start) + { + case 1: + n = this->check_for_completion(ec, total_transferred_); + for (;;) + { + bufs[0] = boost::asio::buffer(bufs[0] + total_transferred_, n); + bufs[1] = boost::asio::buffer( + bufs[1] + (total_transferred_ < buffer_size0 + ? 0 : total_transferred_ - buffer_size0), + n - boost::asio::buffer_size(bufs[0])); + device_.async_write_some_at(offset_ + total_transferred_, + bufs, BOOST_ASIO_MOVE_CAST(write_at_op)(*this)); + return; default: + total_transferred_ += bytes_transferred; + if ((!ec && bytes_transferred == 0) + || (n = this->check_for_completion(ec, total_transferred_)) == 0 + || total_transferred_ == buffer_size0 + buffer_size1) + break; + } + + handler_(ec, static_cast(total_transferred_)); + } + } + + //private: + AsyncRandomAccessWriteDevice& device_; + boost::uint64_t offset_; + std::array buffers_; + std::size_t total_transferred_; + WriteHandler handler_; + }; + +#endif // defined(BOOST_ASIO_HAS_STD_ARRAY) + template inline void* asio_handler_allocate(std::size_t size, diff --git a/3party/boost/boost/asio/io_service.hpp b/3party/boost/boost/asio/io_service.hpp index e1ed0bd2b4..43b94e4625 100644 --- a/3party/boost/boost/asio/io_service.hpp +++ b/3party/boost/boost/asio/io_service.hpp @@ -2,7 +2,7 @@ // io_service.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -658,8 +658,8 @@ private: // Prevent assignment. void operator=(const work& other); - // The io_service. - boost::asio::io_service& io_service_; + // The io_service implementation. + detail::io_service_impl& io_service_impl_; }; /// Class used to uniquely identify a service. diff --git a/3party/boost/boost/asio/ip/address.hpp b/3party/boost/boost/asio/ip/address.hpp index f2960eec60..9e62c04faf 100644 --- a/3party/boost/boost/asio/ip/address.hpp +++ b/3party/boost/boost/asio/ip/address.hpp @@ -2,7 +2,7 @@ // ip/address.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/address_v4.hpp b/3party/boost/boost/asio/ip/address_v4.hpp index d4460f08e7..8d11921dbf 100644 --- a/3party/boost/boost/asio/ip/address_v4.hpp +++ b/3party/boost/boost/asio/ip/address_v4.hpp @@ -2,7 +2,7 @@ // ip/address_v4.hpp // ~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/address_v6.hpp b/3party/boost/boost/asio/ip/address_v6.hpp index d2420c6ec2..e35a176deb 100644 --- a/3party/boost/boost/asio/ip/address_v6.hpp +++ b/3party/boost/boost/asio/ip/address_v6.hpp @@ -2,7 +2,7 @@ // ip/address_v6.hpp // ~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/basic_endpoint.hpp b/3party/boost/boost/asio/ip/basic_endpoint.hpp index cabc0dd623..9eefe4c90a 100644 --- a/3party/boost/boost/asio/ip/basic_endpoint.hpp +++ b/3party/boost/boost/asio/ip/basic_endpoint.hpp @@ -2,7 +2,7 @@ // ip/basic_endpoint.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/basic_resolver.hpp b/3party/boost/boost/asio/ip/basic_resolver.hpp index 7ddfed27a4..626589064d 100644 --- a/3party/boost/boost/asio/ip/basic_resolver.hpp +++ b/3party/boost/boost/asio/ip/basic_resolver.hpp @@ -2,7 +2,7 @@ // ip/basic_resolver.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/basic_resolver_entry.hpp b/3party/boost/boost/asio/ip/basic_resolver_entry.hpp index d34de6466c..d170ab0a39 100644 --- a/3party/boost/boost/asio/ip/basic_resolver_entry.hpp +++ b/3party/boost/boost/asio/ip/basic_resolver_entry.hpp @@ -2,7 +2,7 @@ // ip/basic_resolver_entry.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp b/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp index 93be37c6a1..6e52a8526a 100644 --- a/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp +++ b/3party/boost/boost/asio/ip/basic_resolver_iterator.hpp @@ -2,7 +2,7 @@ // ip/basic_resolver_iterator.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/basic_resolver_query.hpp b/3party/boost/boost/asio/ip/basic_resolver_query.hpp index 11753ddb12..0f7a54db8c 100644 --- a/3party/boost/boost/asio/ip/basic_resolver_query.hpp +++ b/3party/boost/boost/asio/ip/basic_resolver_query.hpp @@ -2,7 +2,7 @@ // ip/basic_resolver_query.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/detail/endpoint.hpp b/3party/boost/boost/asio/ip/detail/endpoint.hpp index f01f61628c..04335efa0b 100644 --- a/3party/boost/boost/asio/ip/detail/endpoint.hpp +++ b/3party/boost/boost/asio/ip/detail/endpoint.hpp @@ -2,7 +2,7 @@ // ip/detail/endpoint.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp b/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp index e70c645a95..24bfce2931 100644 --- a/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp +++ b/3party/boost/boost/asio/ip/detail/impl/endpoint.ipp @@ -2,7 +2,7 @@ // ip/detail/impl/endpoint.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/detail/socket_option.hpp b/3party/boost/boost/asio/ip/detail/socket_option.hpp index e8c6aa7a81..041a9f891b 100644 --- a/3party/boost/boost/asio/ip/detail/socket_option.hpp +++ b/3party/boost/boost/asio/ip/detail/socket_option.hpp @@ -2,7 +2,7 @@ // detail/socket_option.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/host_name.hpp b/3party/boost/boost/asio/ip/host_name.hpp index 33860c92d8..9e024e1540 100644 --- a/3party/boost/boost/asio/ip/host_name.hpp +++ b/3party/boost/boost/asio/ip/host_name.hpp @@ -2,7 +2,7 @@ // ip/host_name.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/icmp.hpp b/3party/boost/boost/asio/ip/icmp.hpp index 14c9df4d2f..62748b628c 100644 --- a/3party/boost/boost/asio/ip/icmp.hpp +++ b/3party/boost/boost/asio/ip/icmp.hpp @@ -2,7 +2,7 @@ // ip/icmp.hpp // ~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/address.hpp b/3party/boost/boost/asio/ip/impl/address.hpp index 94dfb17870..a875e1bb6a 100644 --- a/3party/boost/boost/asio/ip/impl/address.hpp +++ b/3party/boost/boost/asio/ip/impl/address.hpp @@ -2,7 +2,7 @@ // ip/impl/address.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/address.ipp b/3party/boost/boost/asio/ip/impl/address.ipp index 4bf959cada..535375896b 100644 --- a/3party/boost/boost/asio/ip/impl/address.ipp +++ b/3party/boost/boost/asio/ip/impl/address.ipp @@ -2,7 +2,7 @@ // ip/impl/address.ipp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/address_v4.hpp b/3party/boost/boost/asio/ip/impl/address_v4.hpp index d27d48d94b..87b0e193f0 100644 --- a/3party/boost/boost/asio/ip/impl/address_v4.hpp +++ b/3party/boost/boost/asio/ip/impl/address_v4.hpp @@ -2,7 +2,7 @@ // ip/impl/address_v4.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/address_v4.ipp b/3party/boost/boost/asio/ip/impl/address_v4.ipp index 3d24dd9cdd..31f6e27d59 100644 --- a/3party/boost/boost/asio/ip/impl/address_v4.ipp +++ b/3party/boost/boost/asio/ip/impl/address_v4.ipp @@ -2,7 +2,7 @@ // ip/impl/address_v4.ipp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/address_v6.hpp b/3party/boost/boost/asio/ip/impl/address_v6.hpp index 11e1797957..6993ef0821 100644 --- a/3party/boost/boost/asio/ip/impl/address_v6.hpp +++ b/3party/boost/boost/asio/ip/impl/address_v6.hpp @@ -2,7 +2,7 @@ // ip/impl/address_v6.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/address_v6.ipp b/3party/boost/boost/asio/ip/impl/address_v6.ipp index 898f922460..9bf9e96b03 100644 --- a/3party/boost/boost/asio/ip/impl/address_v6.ipp +++ b/3party/boost/boost/asio/ip/impl/address_v6.ipp @@ -2,7 +2,7 @@ // ip/impl/address_v6.ipp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp b/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp index 9d39c875de..681d76eb44 100644 --- a/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp +++ b/3party/boost/boost/asio/ip/impl/basic_endpoint.hpp @@ -2,7 +2,7 @@ // ip/impl/basic_endpoint.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/impl/host_name.ipp b/3party/boost/boost/asio/ip/impl/host_name.ipp index 734341ede4..cbac039add 100644 --- a/3party/boost/boost/asio/ip/impl/host_name.ipp +++ b/3party/boost/boost/asio/ip/impl/host_name.ipp @@ -2,7 +2,7 @@ // ip/impl/host_name.ipp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/multicast.hpp b/3party/boost/boost/asio/ip/multicast.hpp index 2a026274f0..a0a3c41f00 100644 --- a/3party/boost/boost/asio/ip/multicast.hpp +++ b/3party/boost/boost/asio/ip/multicast.hpp @@ -2,7 +2,7 @@ // ip/multicast.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/resolver_query_base.hpp b/3party/boost/boost/asio/ip/resolver_query_base.hpp index 96ad5125fb..4e281a6c4f 100644 --- a/3party/boost/boost/asio/ip/resolver_query_base.hpp +++ b/3party/boost/boost/asio/ip/resolver_query_base.hpp @@ -2,7 +2,7 @@ // ip/resolver_query_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/resolver_service.hpp b/3party/boost/boost/asio/ip/resolver_service.hpp index dff19ab468..74915d2066 100644 --- a/3party/boost/boost/asio/ip/resolver_service.hpp +++ b/3party/boost/boost/asio/ip/resolver_service.hpp @@ -2,7 +2,7 @@ // ip/resolver_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/tcp.hpp b/3party/boost/boost/asio/ip/tcp.hpp index 3d0524feec..0256e6fa68 100644 --- a/3party/boost/boost/asio/ip/tcp.hpp +++ b/3party/boost/boost/asio/ip/tcp.hpp @@ -2,7 +2,7 @@ // ip/tcp.hpp // ~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/udp.hpp b/3party/boost/boost/asio/ip/udp.hpp index 375a5fe6d5..acf61ef1ba 100644 --- a/3party/boost/boost/asio/ip/udp.hpp +++ b/3party/boost/boost/asio/ip/udp.hpp @@ -2,7 +2,7 @@ // ip/udp.hpp // ~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/unicast.hpp b/3party/boost/boost/asio/ip/unicast.hpp index dc7d8e92af..5ff0dc85d2 100644 --- a/3party/boost/boost/asio/ip/unicast.hpp +++ b/3party/boost/boost/asio/ip/unicast.hpp @@ -2,7 +2,7 @@ // ip/unicast.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ip/v6_only.hpp b/3party/boost/boost/asio/ip/v6_only.hpp index e67a5482ef..04419919a9 100644 --- a/3party/boost/boost/asio/ip/v6_only.hpp +++ b/3party/boost/boost/asio/ip/v6_only.hpp @@ -2,7 +2,7 @@ // ip/v6_only.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/is_read_buffered.hpp b/3party/boost/boost/asio/is_read_buffered.hpp index 1aac50f306..8ad32e478a 100644 --- a/3party/boost/boost/asio/is_read_buffered.hpp +++ b/3party/boost/boost/asio/is_read_buffered.hpp @@ -2,7 +2,7 @@ // is_read_buffered.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/is_write_buffered.hpp b/3party/boost/boost/asio/is_write_buffered.hpp index 03de0f11cd..bbc2e2219a 100644 --- a/3party/boost/boost/asio/is_write_buffered.hpp +++ b/3party/boost/boost/asio/is_write_buffered.hpp @@ -2,7 +2,7 @@ // is_write_buffered.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/local/basic_endpoint.hpp b/3party/boost/boost/asio/local/basic_endpoint.hpp index 7a5cc0865f..f191dd6ac2 100644 --- a/3party/boost/boost/asio/local/basic_endpoint.hpp +++ b/3party/boost/boost/asio/local/basic_endpoint.hpp @@ -2,7 +2,7 @@ // local/basic_endpoint.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Derived from a public domain implementation written by Daniel Casimiro. // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/local/connect_pair.hpp b/3party/boost/boost/asio/local/connect_pair.hpp index 3cafae71fd..e6913982ae 100644 --- a/3party/boost/boost/asio/local/connect_pair.hpp +++ b/3party/boost/boost/asio/local/connect_pair.hpp @@ -2,7 +2,7 @@ // local/connect_pair.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/local/datagram_protocol.hpp b/3party/boost/boost/asio/local/datagram_protocol.hpp index eaa024129f..6fa6323d27 100644 --- a/3party/boost/boost/asio/local/datagram_protocol.hpp +++ b/3party/boost/boost/asio/local/datagram_protocol.hpp @@ -2,7 +2,7 @@ // local/datagram_protocol.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/local/detail/endpoint.hpp b/3party/boost/boost/asio/local/detail/endpoint.hpp index db0ccc3cff..998d371a25 100644 --- a/3party/boost/boost/asio/local/detail/endpoint.hpp +++ b/3party/boost/boost/asio/local/detail/endpoint.hpp @@ -2,7 +2,7 @@ // local/detail/endpoint.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Derived from a public domain implementation written by Daniel Casimiro. // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/local/detail/impl/endpoint.ipp b/3party/boost/boost/asio/local/detail/impl/endpoint.ipp index 7a5dd62991..8e3d06a5c2 100644 --- a/3party/boost/boost/asio/local/detail/impl/endpoint.ipp +++ b/3party/boost/boost/asio/local/detail/impl/endpoint.ipp @@ -2,7 +2,7 @@ // local/detail/impl/endpoint.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Derived from a public domain implementation written by Daniel Casimiro. // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/local/stream_protocol.hpp b/3party/boost/boost/asio/local/stream_protocol.hpp index e8692c5b47..c747666304 100644 --- a/3party/boost/boost/asio/local/stream_protocol.hpp +++ b/3party/boost/boost/asio/local/stream_protocol.hpp @@ -2,7 +2,7 @@ // local/stream_protocol.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/placeholders.hpp b/3party/boost/boost/asio/placeholders.hpp index 6240e71c49..d4bf7430a5 100644 --- a/3party/boost/boost/asio/placeholders.hpp +++ b/3party/boost/boost/asio/placeholders.hpp @@ -2,7 +2,7 @@ // placeholders.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/posix/basic_descriptor.hpp b/3party/boost/boost/asio/posix/basic_descriptor.hpp index 70f8fa495e..d4af5a4940 100644 --- a/3party/boost/boost/asio/posix/basic_descriptor.hpp +++ b/3party/boost/boost/asio/posix/basic_descriptor.hpp @@ -2,7 +2,7 @@ // posix/basic_descriptor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp b/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp index 61152c17da..2e8ed4b19e 100644 --- a/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp +++ b/3party/boost/boost/asio/posix/basic_stream_descriptor.hpp @@ -2,7 +2,7 @@ // posix/basic_stream_descriptor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/posix/descriptor_base.hpp b/3party/boost/boost/asio/posix/descriptor_base.hpp index ccb3d386ec..c75b85abac 100644 --- a/3party/boost/boost/asio/posix/descriptor_base.hpp +++ b/3party/boost/boost/asio/posix/descriptor_base.hpp @@ -2,7 +2,7 @@ // posix/descriptor_base.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/posix/stream_descriptor.hpp b/3party/boost/boost/asio/posix/stream_descriptor.hpp index 22551ab0a2..9078107042 100644 --- a/3party/boost/boost/asio/posix/stream_descriptor.hpp +++ b/3party/boost/boost/asio/posix/stream_descriptor.hpp @@ -2,7 +2,7 @@ // posix/stream_descriptor.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/posix/stream_descriptor_service.hpp b/3party/boost/boost/asio/posix/stream_descriptor_service.hpp index 7b74944f08..0daa21a39b 100644 --- a/3party/boost/boost/asio/posix/stream_descriptor_service.hpp +++ b/3party/boost/boost/asio/posix/stream_descriptor_service.hpp @@ -2,7 +2,7 @@ // posix/stream_descriptor_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/raw_socket_service.hpp b/3party/boost/boost/asio/raw_socket_service.hpp index ec2e842008..cd8aa045df 100644 --- a/3party/boost/boost/asio/raw_socket_service.hpp +++ b/3party/boost/boost/asio/raw_socket_service.hpp @@ -2,7 +2,7 @@ // raw_socket_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/read.hpp b/3party/boost/boost/asio/read.hpp index 88d2dc2b4a..937dccdd94 100644 --- a/3party/boost/boost/asio/read.hpp +++ b/3party/boost/boost/asio/read.hpp @@ -2,7 +2,7 @@ // read.hpp // ~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -214,6 +214,8 @@ std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers, * This function is used to read a certain number of bytes of data from a * stream. The call will block until one of the following conditions is true: * + * @li The supplied buffer is full (that is, it has reached maximum size). + * * @li An error occurred. * * This operation is implemented in terms of zero or more calls to the stream's @@ -241,6 +243,8 @@ std::size_t read(SyncReadStream& s, basic_streambuf& b); * This function is used to read a certain number of bytes of data from a * stream. The call will block until one of the following conditions is true: * + * @li The supplied buffer is full (that is, it has reached maximum size). + * * @li An error occurred. * * This operation is implemented in terms of zero or more calls to the stream's @@ -269,6 +273,8 @@ std::size_t read(SyncReadStream& s, basic_streambuf& b, * This function is used to read a certain number of bytes of data from a * stream. The call will block until one of the following conditions is true: * + * @li The supplied buffer is full (that is, it has reached maximum size). + * * @li The completion_condition function object returns 0. * * This operation is implemented in terms of zero or more calls to the stream's @@ -307,6 +313,8 @@ std::size_t read(SyncReadStream& s, basic_streambuf& b, * This function is used to read a certain number of bytes of data from a * stream. The call will block until one of the following conditions is true: * + * @li The supplied buffer is full (that is, it has reached maximum size). + * * @li The completion_condition function object returns 0. * * This operation is implemented in terms of zero or more calls to the stream's @@ -496,6 +504,8 @@ void async_read(AsyncReadStream& s, const MutableBufferSequence& buffers, * asynchronous operation will continue until one of the following conditions is * true: * + * @li The supplied buffer is full (that is, it has reached maximum size). + * * @li An error occurred. * * This operation is implemented in terms of zero or more calls to the stream's @@ -546,6 +556,8 @@ void async_read(AsyncReadStream& s, basic_streambuf& b, * asynchronous operation will continue until one of the following conditions is * true: * + * @li The supplied buffer is full (that is, it has reached maximum size). + * * @li The completion_condition function object returns 0. * * This operation is implemented in terms of zero or more calls to the stream's diff --git a/3party/boost/boost/asio/read_at.hpp b/3party/boost/boost/asio/read_at.hpp index 78745f31a3..7eb30e04ab 100644 --- a/3party/boost/boost/asio/read_at.hpp +++ b/3party/boost/boost/asio/read_at.hpp @@ -2,7 +2,7 @@ // read_at.hpp // ~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/read_until.hpp b/3party/boost/boost/asio/read_until.hpp index e331015ddd..1f1bddbbf8 100644 --- a/3party/boost/boost/asio/read_until.hpp +++ b/3party/boost/boost/asio/read_until.hpp @@ -2,7 +2,7 @@ // read_until.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/seq_packet_socket_service.hpp b/3party/boost/boost/asio/seq_packet_socket_service.hpp index db77a68e64..edd1593a42 100644 --- a/3party/boost/boost/asio/seq_packet_socket_service.hpp +++ b/3party/boost/boost/asio/seq_packet_socket_service.hpp @@ -2,7 +2,7 @@ // seq_packet_socket_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/serial_port.hpp b/3party/boost/boost/asio/serial_port.hpp index a2f172199f..58d6b7882d 100644 --- a/3party/boost/boost/asio/serial_port.hpp +++ b/3party/boost/boost/asio/serial_port.hpp @@ -2,7 +2,7 @@ // serial_port.hpp // ~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/serial_port_base.hpp b/3party/boost/boost/asio/serial_port_base.hpp index 083d006dcf..f14ba02961 100644 --- a/3party/boost/boost/asio/serial_port_base.hpp +++ b/3party/boost/boost/asio/serial_port_base.hpp @@ -2,7 +2,7 @@ // serial_port_base.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/asio/serial_port_service.hpp b/3party/boost/boost/asio/serial_port_service.hpp index 0b6e794701..ed7306c007 100644 --- a/3party/boost/boost/asio/serial_port_service.hpp +++ b/3party/boost/boost/asio/serial_port_service.hpp @@ -2,7 +2,7 @@ // serial_port_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/signal_set.hpp b/3party/boost/boost/asio/signal_set.hpp index 62b3dd1bad..3427a03d77 100644 --- a/3party/boost/boost/asio/signal_set.hpp +++ b/3party/boost/boost/asio/signal_set.hpp @@ -2,7 +2,7 @@ // signal_set.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/signal_set_service.hpp b/3party/boost/boost/asio/signal_set_service.hpp index b372eb33cd..48896f299b 100644 --- a/3party/boost/boost/asio/signal_set_service.hpp +++ b/3party/boost/boost/asio/signal_set_service.hpp @@ -2,7 +2,7 @@ // signal_set_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/socket_acceptor_service.hpp b/3party/boost/boost/asio/socket_acceptor_service.hpp index 073b299bd6..54aaf7af7f 100644 --- a/3party/boost/boost/asio/socket_acceptor_service.hpp +++ b/3party/boost/boost/asio/socket_acceptor_service.hpp @@ -2,7 +2,7 @@ // socket_acceptor_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/socket_base.hpp b/3party/boost/boost/asio/socket_base.hpp index 30eba2a7fd..f964d00e9f 100644 --- a/3party/boost/boost/asio/socket_base.hpp +++ b/3party/boost/boost/asio/socket_base.hpp @@ -2,7 +2,7 @@ // socket_base.hpp // ~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl.hpp b/3party/boost/boost/asio/ssl.hpp index e22b00c969..0e64d94c19 100644 --- a/3party/boost/boost/asio/ssl.hpp +++ b/3party/boost/boost/asio/ssl.hpp @@ -2,7 +2,7 @@ // ssl.hpp // ~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/basic_context.hpp b/3party/boost/boost/asio/ssl/basic_context.hpp index 4627b70b71..1a769426aa 100644 --- a/3party/boost/boost/asio/ssl/basic_context.hpp +++ b/3party/boost/boost/asio/ssl/basic_context.hpp @@ -2,7 +2,7 @@ // ssl/basic_context.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/context.hpp b/3party/boost/boost/asio/ssl/context.hpp index b80401714b..d2eba8e705 100644 --- a/3party/boost/boost/asio/ssl/context.hpp +++ b/3party/boost/boost/asio/ssl/context.hpp @@ -2,7 +2,7 @@ // ssl/context.hpp // ~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/context_base.hpp b/3party/boost/boost/asio/ssl/context_base.hpp index 0bc8b74289..3c0b59d65f 100644 --- a/3party/boost/boost/asio/ssl/context_base.hpp +++ b/3party/boost/boost/asio/ssl/context_base.hpp @@ -2,7 +2,7 @@ // ssl/context_base.hpp // ~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/context_service.hpp b/3party/boost/boost/asio/ssl/context_service.hpp index 46c3d6d029..e998d42341 100644 --- a/3party/boost/boost/asio/ssl/context_service.hpp +++ b/3party/boost/boost/asio/ssl/context_service.hpp @@ -2,7 +2,7 @@ // ssl/context_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/engine.hpp b/3party/boost/boost/asio/ssl/detail/engine.hpp index 168d5fd0f5..41c4ee7426 100644 --- a/3party/boost/boost/asio/ssl/detail/engine.hpp +++ b/3party/boost/boost/asio/ssl/detail/engine.hpp @@ -2,7 +2,7 @@ // ssl/detail/engine.hpp // ~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/handshake_op.hpp b/3party/boost/boost/asio/ssl/detail/handshake_op.hpp index ca4fe2ec4c..3c57a4de96 100644 --- a/3party/boost/boost/asio/ssl/detail/handshake_op.hpp +++ b/3party/boost/boost/asio/ssl/detail/handshake_op.hpp @@ -2,7 +2,7 @@ // ssl/detail/handshake_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/impl/engine.ipp b/3party/boost/boost/asio/ssl/detail/impl/engine.ipp index 1409197a42..a7da0c1967 100644 --- a/3party/boost/boost/asio/ssl/detail/impl/engine.ipp +++ b/3party/boost/boost/asio/ssl/detail/impl/engine.ipp @@ -2,7 +2,7 @@ // ssl/detail/impl/engine.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,7 +18,10 @@ #include #if !defined(BOOST_ASIO_ENABLE_OLD_SSL) +# include +# include # include +# include # include #endif // !defined(BOOST_ASIO_ENABLE_OLD_SSL) @@ -34,6 +37,13 @@ namespace detail { engine::engine(SSL_CTX* context) : ssl_(::SSL_new(context)) { + if (!ssl_) + { + boost::system::error_code ec(::ERR_get_error(), + boost::asio::error::get_ssl_category()); + boost::asio::detail::throw_error(ec, "engine"); + } + accept_mutex().init(); ::SSL_set_mode(ssl_, SSL_MODE_ENABLE_PARTIAL_WRITE); @@ -195,9 +205,13 @@ const boost::system::error_code& engine::map_error_code( return ec; // Otherwise, the peer should have negotiated a proper shutdown. - ec = boost::system::error_code( - ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ), - boost::asio::error::get_ssl_category()); + if ((::SSL_get_shutdown(ssl_) & SSL_RECEIVED_SHUTDOWN) == 0) + { + ec = boost::system::error_code( + ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ), + boost::asio::error::get_ssl_category()); + } + return ec; } diff --git a/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp b/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp index 560c29fc90..fe62e6eabc 100644 --- a/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp +++ b/3party/boost/boost/asio/ssl/detail/impl/openssl_init.ipp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -38,7 +38,7 @@ public: { ::SSL_library_init(); ::SSL_load_error_strings(); - ::OpenSSL_add_ssl_algorithms(); + ::OpenSSL_add_all_algorithms(); mutexes_.resize(::CRYPTO_num_locks()); for (size_t i = 0; i < mutexes_.size(); ++i) @@ -56,7 +56,9 @@ public: ::EVP_cleanup(); ::CRYPTO_cleanup_all_ex_data(); ::CONF_modules_unload(1); +#if !defined(OPENSSL_NO_ENGINE) ::ENGINE_cleanup(); +#endif // !defined(OPENSSL_NO_ENGINE) } private: diff --git a/3party/boost/boost/asio/ssl/detail/io.hpp b/3party/boost/boost/asio/ssl/detail/io.hpp index 6e99e4f19e..e83934e313 100644 --- a/3party/boost/boost/asio/ssl/detail/io.hpp +++ b/3party/boost/boost/asio/ssl/detail/io.hpp @@ -2,7 +2,7 @@ // ssl/detail/io.hpp // ~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/openssl_init.hpp b/3party/boost/boost/asio/ssl/detail/openssl_init.hpp index 01e838b15d..c68909d16b 100644 --- a/3party/boost/boost/asio/ssl/detail/openssl_init.hpp +++ b/3party/boost/boost/asio/ssl/detail/openssl_init.hpp @@ -2,7 +2,7 @@ // ssl/detail/openssl_init.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/openssl_types.hpp b/3party/boost/boost/asio/ssl/detail/openssl_types.hpp index bd98476f91..a3c3729332 100644 --- a/3party/boost/boost/asio/ssl/detail/openssl_types.hpp +++ b/3party/boost/boost/asio/ssl/detail/openssl_types.hpp @@ -2,7 +2,7 @@ // ssl/detail/openssl_types.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,7 +18,9 @@ #include #include #include -#include +#if !defined(OPENSSL_NO_ENGINE) +# include +#endif // !defined(OPENSSL_NO_ENGINE) #include #include #include diff --git a/3party/boost/boost/asio/ssl/detail/password_callback.hpp b/3party/boost/boost/asio/ssl/detail/password_callback.hpp index d9f634c92c..438320a00b 100644 --- a/3party/boost/boost/asio/ssl/detail/password_callback.hpp +++ b/3party/boost/boost/asio/ssl/detail/password_callback.hpp @@ -2,7 +2,7 @@ // ssl/detail/password_callback.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/read_op.hpp b/3party/boost/boost/asio/ssl/detail/read_op.hpp index 307be08a64..abf329c7b7 100644 --- a/3party/boost/boost/asio/ssl/detail/read_op.hpp +++ b/3party/boost/boost/asio/ssl/detail/read_op.hpp @@ -2,7 +2,7 @@ // ssl/detail/read_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp b/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp index 45f2042776..cfeb8e572e 100644 --- a/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp +++ b/3party/boost/boost/asio/ssl/detail/shutdown_op.hpp @@ -2,7 +2,7 @@ // ssl/detail/shutdown_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/stream_core.hpp b/3party/boost/boost/asio/ssl/detail/stream_core.hpp index 3c17d93433..b8f0afa4a1 100644 --- a/3party/boost/boost/asio/ssl/detail/stream_core.hpp +++ b/3party/boost/boost/asio/ssl/detail/stream_core.hpp @@ -2,7 +2,7 @@ // ssl/detail/stream_core.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -34,13 +34,17 @@ namespace detail { struct stream_core { + // According to the OpenSSL documentation, this is the buffer size that is is + // sufficient to hold the largest possible TLS record. + enum { max_tls_record_size = 17 * 1024 }; + stream_core(SSL_CTX* context, boost::asio::io_service& io_service) : engine_(context), pending_read_(io_service), pending_write_(io_service), - output_buffer_space_(16384), + output_buffer_space_(max_tls_record_size), output_buffer_(boost::asio::buffer(output_buffer_space_)), - input_buffer_space_(16384), + input_buffer_space_(max_tls_record_size), input_buffer_(boost::asio::buffer(input_buffer_space_)) { pending_read_.expires_at(boost::posix_time::neg_infin); diff --git a/3party/boost/boost/asio/ssl/detail/verify_callback.hpp b/3party/boost/boost/asio/ssl/detail/verify_callback.hpp index 364d4a140b..2d497d1ce1 100644 --- a/3party/boost/boost/asio/ssl/detail/verify_callback.hpp +++ b/3party/boost/boost/asio/ssl/detail/verify_callback.hpp @@ -2,7 +2,7 @@ // ssl/detail/verify_callback.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/detail/write_op.hpp b/3party/boost/boost/asio/ssl/detail/write_op.hpp index 8ac4e27176..82ecbb9212 100644 --- a/3party/boost/boost/asio/ssl/detail/write_op.hpp +++ b/3party/boost/boost/asio/ssl/detail/write_op.hpp @@ -2,7 +2,7 @@ // ssl/detail/write_op.hpp // ~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/error.hpp b/3party/boost/boost/asio/ssl/error.hpp index 91d902b68f..c1001104ac 100644 --- a/3party/boost/boost/asio/ssl/error.hpp +++ b/3party/boost/boost/asio/ssl/error.hpp @@ -2,7 +2,7 @@ // ssl/error.hpp // ~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/impl/context.hpp b/3party/boost/boost/asio/ssl/impl/context.hpp index 48db11f6e8..1ab03b91cf 100644 --- a/3party/boost/boost/asio/ssl/impl/context.hpp +++ b/3party/boost/boost/asio/ssl/impl/context.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/impl/context.ipp b/3party/boost/boost/asio/ssl/impl/context.ipp index d48a5d3c5c..54f4fd15d1 100644 --- a/3party/boost/boost/asio/ssl/impl/context.ipp +++ b/3party/boost/boost/asio/ssl/impl/context.ipp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/impl/error.ipp b/3party/boost/boost/asio/ssl/impl/error.ipp index 2e9c337980..6d462352a2 100644 --- a/3party/boost/boost/asio/ssl/impl/error.ipp +++ b/3party/boost/boost/asio/ssl/impl/error.ipp @@ -2,7 +2,7 @@ // ssl/impl/error.ipp // ~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp b/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp index c05ad5d96f..8d577b83aa 100644 --- a/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp +++ b/3party/boost/boost/asio/ssl/impl/rfc2818_verification.ipp @@ -2,7 +2,7 @@ // ssl/impl/rfc2818_verification.ipp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/impl/src.hpp b/3party/boost/boost/asio/ssl/impl/src.hpp index fd0b160d9b..285bae4b1b 100644 --- a/3party/boost/boost/asio/ssl/impl/src.hpp +++ b/3party/boost/boost/asio/ssl/impl/src.hpp @@ -2,7 +2,7 @@ // impl/ssl/src.hpp // ~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/old/basic_context.hpp b/3party/boost/boost/asio/ssl/old/basic_context.hpp index d8b1c1b492..2ee0a23a57 100644 --- a/3party/boost/boost/asio/ssl/old/basic_context.hpp +++ b/3party/boost/boost/asio/ssl/old/basic_context.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/old/context_service.hpp b/3party/boost/boost/asio/ssl/old/context_service.hpp index 406f2ab29a..fc09102901 100644 --- a/3party/boost/boost/asio/ssl/old/context_service.hpp +++ b/3party/boost/boost/asio/ssl/old/context_service.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp b/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp index caa5ed7059..260a05c66f 100644 --- a/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp +++ b/3party/boost/boost/asio/ssl/old/detail/openssl_context_service.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp b/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp index baebbf7dfe..0efed751bb 100644 --- a/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp +++ b/3party/boost/boost/asio/ssl/old/detail/openssl_stream_service.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/old/stream.hpp b/3party/boost/boost/asio/ssl/old/stream.hpp index 606f26cf14..133a29d066 100644 --- a/3party/boost/boost/asio/ssl/old/stream.hpp +++ b/3party/boost/boost/asio/ssl/old/stream.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/old/stream_service.hpp b/3party/boost/boost/asio/ssl/old/stream_service.hpp index 66257840ce..c8b7a47490 100644 --- a/3party/boost/boost/asio/ssl/old/stream_service.hpp +++ b/3party/boost/boost/asio/ssl/old/stream_service.hpp @@ -3,7 +3,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com -// Copyright (c) 2005-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2005-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/rfc2818_verification.hpp b/3party/boost/boost/asio/ssl/rfc2818_verification.hpp index 59b1641b13..63ba948d6c 100644 --- a/3party/boost/boost/asio/ssl/rfc2818_verification.hpp +++ b/3party/boost/boost/asio/ssl/rfc2818_verification.hpp @@ -2,7 +2,7 @@ // ssl/rfc2818_verification.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/stream.hpp b/3party/boost/boost/asio/ssl/stream.hpp index 8ab5c07c8e..20b4e3b3cd 100644 --- a/3party/boost/boost/asio/ssl/stream.hpp +++ b/3party/boost/boost/asio/ssl/stream.hpp @@ -2,7 +2,7 @@ // ssl/stream.hpp // ~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/stream_base.hpp b/3party/boost/boost/asio/ssl/stream_base.hpp index 59897a7667..712c1bda17 100644 --- a/3party/boost/boost/asio/ssl/stream_base.hpp +++ b/3party/boost/boost/asio/ssl/stream_base.hpp @@ -2,7 +2,7 @@ // ssl/stream_base.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/stream_service.hpp b/3party/boost/boost/asio/ssl/stream_service.hpp index 27f9426aa9..628972ee76 100644 --- a/3party/boost/boost/asio/ssl/stream_service.hpp +++ b/3party/boost/boost/asio/ssl/stream_service.hpp @@ -2,7 +2,7 @@ // ssl/stream_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/verify_context.hpp b/3party/boost/boost/asio/ssl/verify_context.hpp index 7aa609b00b..6b5013cb24 100644 --- a/3party/boost/boost/asio/ssl/verify_context.hpp +++ b/3party/boost/boost/asio/ssl/verify_context.hpp @@ -2,7 +2,7 @@ // ssl/verify_context.hpp // ~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/ssl/verify_mode.hpp b/3party/boost/boost/asio/ssl/verify_mode.hpp index 571aaebfa5..ec772389e0 100644 --- a/3party/boost/boost/asio/ssl/verify_mode.hpp +++ b/3party/boost/boost/asio/ssl/verify_mode.hpp @@ -2,7 +2,7 @@ // ssl/verify_mode.hpp // ~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/steady_timer.hpp b/3party/boost/boost/asio/steady_timer.hpp new file mode 100644 index 0000000000..979b929c77 --- /dev/null +++ b/3party/boost/boost/asio/steady_timer.hpp @@ -0,0 +1,63 @@ +// +// steady_timer.hpp +// ~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_STEADY_TIMER_HPP +#define BOOST_ASIO_STEADY_TIMER_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_STD_CHRONO) \ + || defined(BOOST_ASIO_HAS_BOOST_CHRONO) \ + || defined(GENERATING_DOCUMENTATION) + +#if defined(BOOST_ASIO_HAS_STD_CHRONO) +# include +#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO) +# include +#endif + +#include + +namespace boost { +namespace asio { + +#if defined(GENERATING_DOCUMENTATION) +/// Typedef for a timer based on the steady clock. +/** + * This typedef uses the C++11 @c <chrono> standard library facility, if + * available. Otherwise, it may use the Boost.Chrono library. To explicitly + * utilise Boost.Chrono, use the basic_waitable_timer template directly: + * @code + * typedef basic_waitable_timer timer; + * @endcode + */ +typedef basic_waitable_timer steady_timer; +#elif defined(BOOST_ASIO_HAS_STD_CHRONO) +# if defined(BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK) +typedef basic_waitable_timer steady_timer; +# else // defined(BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK) +typedef basic_waitable_timer steady_timer; +# endif // defined(BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK) +#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO) +typedef basic_waitable_timer steady_timer; +#endif + +} // namespace asio +} // namespace boost + +#endif // defined(BOOST_ASIO_HAS_STD_CHRONO) + // || defined(BOOST_ASIO_HAS_BOOST_CHRONO) + // || defined(GENERATING_DOCUMENTATION) + +#endif // BOOST_ASIO_STEADY_TIMER_HPP diff --git a/3party/boost/boost/asio/strand.hpp b/3party/boost/boost/asio/strand.hpp index e8339fdbbc..6a1033f37e 100644 --- a/3party/boost/boost/asio/strand.hpp +++ b/3party/boost/boost/asio/strand.hpp @@ -2,7 +2,7 @@ // strand.hpp // ~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -105,7 +105,6 @@ public: */ ~strand() { - service_.destroy(impl_); } /// Get the io_service associated with the strand. diff --git a/3party/boost/boost/asio/stream_socket_service.hpp b/3party/boost/boost/asio/stream_socket_service.hpp index 6b02153a0a..afc9406332 100644 --- a/3party/boost/boost/asio/stream_socket_service.hpp +++ b/3party/boost/boost/asio/stream_socket_service.hpp @@ -2,7 +2,7 @@ // stream_socket_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/streambuf.hpp b/3party/boost/boost/asio/streambuf.hpp index 8f724c311e..004de8da7a 100644 --- a/3party/boost/boost/asio/streambuf.hpp +++ b/3party/boost/boost/asio/streambuf.hpp @@ -2,7 +2,7 @@ // streambuf.hpp // ~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/system_timer.hpp b/3party/boost/boost/asio/system_timer.hpp new file mode 100644 index 0000000000..c87f3a34b1 --- /dev/null +++ b/3party/boost/boost/asio/system_timer.hpp @@ -0,0 +1,59 @@ +// +// system_timer.hpp +// ~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_SYSTEM_TIMER_HPP +#define BOOST_ASIO_SYSTEM_TIMER_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_STD_CHRONO) \ + || defined(BOOST_ASIO_HAS_BOOST_CHRONO) \ + || defined(GENERATING_DOCUMENTATION) + +#if defined(BOOST_ASIO_HAS_STD_CHRONO) +# include +#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO) +# include +#endif + +#include + +namespace boost { +namespace asio { + +#if defined(GENERATING_DOCUMENTATION) +/// Typedef for a timer based on the system clock. +/** + * This typedef uses the C++11 @c <chrono> standard library facility, if + * available. Otherwise, it may use the Boost.Chrono library. To explicitly + * utilise Boost.Chrono, use the basic_waitable_timer template directly: + * @code + * typedef basic_waitable_timer timer; + * @endcode + */ +typedef basic_waitable_timer system_timer; +#elif defined(BOOST_ASIO_HAS_STD_CHRONO) +typedef basic_waitable_timer system_timer; +#elif defined(BOOST_ASIO_HAS_BOOST_CHRONO) +typedef basic_waitable_timer system_timer; +#endif + +} // namespace asio +} // namespace boost + +#endif // defined(BOOST_ASIO_HAS_STD_CHRONO) + // || defined(BOOST_ASIO_HAS_BOOST_CHRONO) + // || defined(GENERATING_DOCUMENTATION) + +#endif // BOOST_ASIO_SYSTEM_TIMER_HPP diff --git a/3party/boost/boost/asio/time_traits.hpp b/3party/boost/boost/asio/time_traits.hpp index 0da7e6b002..8f48d47210 100644 --- a/3party/boost/boost/asio/time_traits.hpp +++ b/3party/boost/boost/asio/time_traits.hpp @@ -2,7 +2,7 @@ // time_traits.hpp // ~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/version.hpp b/3party/boost/boost/asio/version.hpp index ccaa58b820..4fc894bb38 100644 --- a/3party/boost/boost/asio/version.hpp +++ b/3party/boost/boost/asio/version.hpp @@ -2,7 +2,7 @@ // version.hpp // ~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -18,6 +18,6 @@ // BOOST_ASIO_VERSION % 100 is the sub-minor version // BOOST_ASIO_VERSION / 100 % 1000 is the minor version // BOOST_ASIO_VERSION / 100000 is the major version -#define BOOST_ASIO_VERSION 100600 // 1.6.0 +#define BOOST_ASIO_VERSION 100802 // 1.8.2 #endif // BOOST_ASIO_VERSION_HPP diff --git a/3party/boost/boost/asio/wait_traits.hpp b/3party/boost/boost/asio/wait_traits.hpp new file mode 100644 index 0000000000..c4eef20499 --- /dev/null +++ b/3party/boost/boost/asio/wait_traits.hpp @@ -0,0 +1,43 @@ +// +// wait_traits.hpp +// ~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_WAIT_TRAITS_HPP +#define BOOST_ASIO_WAIT_TRAITS_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +namespace boost { +namespace asio { + +/// Wait traits suitable for use with the basic_waitable_timer class template. +template +struct wait_traits +{ + /// Convert a clock duration into a duration used for waiting. + /** + * @returns @c d. + */ + static typename Clock::duration to_wait_duration( + const typename Clock::duration& d) + { + return d; + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_WAIT_TRAITS_HPP diff --git a/3party/boost/boost/asio/waitable_timer_service.hpp b/3party/boost/boost/asio/waitable_timer_service.hpp new file mode 100644 index 0000000000..69a9580f80 --- /dev/null +++ b/3party/boost/boost/asio/waitable_timer_service.hpp @@ -0,0 +1,161 @@ +// +// waitable_timer_service.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// 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 BOOST_ASIO_WAITABLE_TIMER_SERVICE_HPP +#define BOOST_ASIO_WAITABLE_TIMER_SERVICE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +/// Default service implementation for a timer. +template > +class waitable_timer_service +#if defined(GENERATING_DOCUMENTATION) + : public boost::asio::io_service::service +#else + : public boost::asio::detail::service_base< + waitable_timer_service > +#endif +{ +public: +#if defined(GENERATING_DOCUMENTATION) + /// The unique service identifier. + static boost::asio::io_service::id id; +#endif + + /// The clock type. + typedef Clock clock_type; + + /// The duration type of the clock. + typedef typename clock_type::duration duration; + + /// The time point type of the clock. + typedef typename clock_type::time_point time_point; + + /// The wait traits type. + typedef WaitTraits traits_type; + +private: + // The type of the platform-specific implementation. + typedef detail::deadline_timer_service< + detail::chrono_time_traits > service_impl_type; + +public: + /// The implementation type of the waitable timer. +#if defined(GENERATING_DOCUMENTATION) + typedef implementation_defined implementation_type; +#else + typedef typename service_impl_type::implementation_type implementation_type; +#endif + + /// Construct a new timer service for the specified io_service. + explicit waitable_timer_service(boost::asio::io_service& io_service) + : boost::asio::detail::service_base< + waitable_timer_service >(io_service), + service_impl_(io_service) + { + } + + /// Construct a new timer implementation. + void construct(implementation_type& impl) + { + service_impl_.construct(impl); + } + + /// Destroy a timer implementation. + void destroy(implementation_type& impl) + { + service_impl_.destroy(impl); + } + + /// Cancel any asynchronous wait operations associated with the timer. + std::size_t cancel(implementation_type& impl, boost::system::error_code& ec) + { + return service_impl_.cancel(impl, ec); + } + + /// Cancels one asynchronous wait operation associated with the timer. + std::size_t cancel_one(implementation_type& impl, + boost::system::error_code& ec) + { + return service_impl_.cancel_one(impl, ec); + } + + /// Get the expiry time for the timer as an absolute time. + time_point expires_at(const implementation_type& impl) const + { + return service_impl_.expires_at(impl); + } + + /// Set the expiry time for the timer as an absolute time. + std::size_t expires_at(implementation_type& impl, + const time_point& expiry_time, boost::system::error_code& ec) + { + return service_impl_.expires_at(impl, expiry_time, ec); + } + + /// Get the expiry time for the timer relative to now. + duration expires_from_now(const implementation_type& impl) const + { + return service_impl_.expires_from_now(impl); + } + + /// Set the expiry time for the timer relative to now. + std::size_t expires_from_now(implementation_type& impl, + const duration& expiry_time, boost::system::error_code& ec) + { + return service_impl_.expires_from_now(impl, expiry_time, ec); + } + + // Perform a blocking wait on the timer. + void wait(implementation_type& impl, boost::system::error_code& ec) + { + service_impl_.wait(impl, ec); + } + + // Start an asynchronous wait on the timer. + template + void async_wait(implementation_type& impl, + BOOST_ASIO_MOVE_ARG(WaitHandler) handler) + { + service_impl_.async_wait(impl, BOOST_ASIO_MOVE_CAST(WaitHandler)(handler)); + } + +private: + // Destroy all user-defined handler objects owned by the service. + void shutdown_service() + { + service_impl_.shutdown_service(); + } + + // The platform-specific implementation. + service_impl_type service_impl_; +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_WAITABLE_TIMER_SERVICE_HPP diff --git a/3party/boost/boost/asio/windows/basic_handle.hpp b/3party/boost/boost/asio/windows/basic_handle.hpp index 07a788a49f..5169caea41 100644 --- a/3party/boost/boost/asio/windows/basic_handle.hpp +++ b/3party/boost/boost/asio/windows/basic_handle.hpp @@ -2,7 +2,7 @@ // windows/basic_handle.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) @@ -19,6 +19,7 @@ #if defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) \ || defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) \ + || defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \ || defined(GENERATING_DOCUMENTATION) #include @@ -276,6 +277,7 @@ protected: #endif // defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE) // || defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE) + // || defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) // || defined(GENERATING_DOCUMENTATION) #endif // BOOST_ASIO_WINDOWS_BASIC_HANDLE_HPP diff --git a/3party/boost/boost/asio/windows/basic_object_handle.hpp b/3party/boost/boost/asio/windows/basic_object_handle.hpp new file mode 100644 index 0000000000..a94bb57e26 --- /dev/null +++ b/3party/boost/boost/asio/windows/basic_object_handle.hpp @@ -0,0 +1,177 @@ +// +// windows/basic_object_handle.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2011 Boris Schaeling (boris@highscore.de) +// +// 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 BOOST_ASIO_WINDOWS_BASIC_OBJECT_HANDLE_HPP +#define BOOST_ASIO_WINDOWS_BASIC_OBJECT_HANDLE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \ + || defined(GENERATING_DOCUMENTATION) + +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { +namespace windows { + +/// Provides object-oriented handle functionality. +/** + * The windows::basic_object_handle class template provides asynchronous and + * blocking object-oriented handle functionality. + * + * @par Thread Safety + * @e Distinct @e objects: Safe.@n + * @e Shared @e objects: Unsafe. + */ +template +class basic_object_handle + : public basic_handle +{ +public: + /// The native representation of a handle. + typedef typename ObjectHandleService::native_handle_type native_handle_type; + + /// Construct a basic_object_handle without opening it. + /** + * This constructor creates an object handle without opening it. + * + * @param io_service The io_service object that the object handle will use to + * dispatch handlers for any asynchronous operations performed on the handle. + */ + explicit basic_object_handle(boost::asio::io_service& io_service) + : basic_handle(io_service) + { + } + + /// Construct a basic_object_handle on an existing native handle. + /** + * This constructor creates an object handle object to hold an existing native + * handle. + * + * @param io_service The io_service object that the object handle will use to + * dispatch handlers for any asynchronous operations performed on the handle. + * + * @param native_handle The new underlying handle implementation. + * + * @throws boost::system::system_error Thrown on failure. + */ + basic_object_handle(boost::asio::io_service& io_service, + const native_handle_type& native_handle) + : basic_handle(io_service, native_handle) + { + } + +#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) + /// Move-construct a basic_object_handle from another. + /** + * This constructor moves an object handle from one object to another. + * + * @param other The other basic_object_handle object from which the move will + * occur. + * + * @note Following the move, the moved-from object is in the same state as if + * constructed using the @c basic_object_handle(io_service&) constructor. + */ + basic_object_handle(basic_object_handle&& other) + : basic_handle( + BOOST_ASIO_MOVE_CAST(basic_object_handle)(other)) + { + } + + /// Move-assign a basic_object_handle from another. + /** + * This assignment operator moves an object handle from one object to another. + * + * @param other The other basic_object_handle object from which the move will + * occur. + * + * @note Following the move, the moved-from object is in the same state as if + * constructed using the @c basic_object_handle(io_service&) constructor. + */ + basic_object_handle& operator=(basic_object_handle&& other) + { + basic_handle::operator=( + BOOST_ASIO_MOVE_CAST(basic_object_handle)(other)); + return *this; + } +#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) + + /// Perform a blocking wait on the object handle. + /** + * This function is used to wait for the object handle to be set to the + * signalled state. This function blocks and does not return until the object + * handle has been set to the signalled state. + * + * @throws boost::system::system_error Thrown on failure. + */ + void wait() + { + boost::system::error_code ec; + this->get_service().wait(this->get_implementation(), ec); + boost::asio::detail::throw_error(ec, "wait"); + } + + /// Perform a blocking wait on the object handle. + /** + * This function is used to wait for the object handle to be set to the + * signalled state. This function blocks and does not return until the object + * handle has been set to the signalled state. + * + * @param ec Set to indicate what error occurred, if any. + */ + void wait(boost::system::error_code& ec) + { + this->get_service().wait(this->get_implementation(), ec); + } + + /// Start an asynchronous wait on the object handle. + /** + * This function is be used to initiate an asynchronous wait against the + * object handle. It always returns immediately. + * + * @param handler The handler to be called when the object handle is set to + * the signalled state. Copies will be made of the handler as required. The + * function signature of the handler must be: + * @code void handler( + * const boost::system::error_code& error // Result of operation. + * ); @endcode + * Regardless of whether the asynchronous operation completes immediately or + * not, the handler will not be invoked from within this function. Invocation + * of the handler will be performed in a manner equivalent to using + * boost::asio::io_service::post(). + */ + template + void async_wait(WaitHandler handler) + { + this->get_service().async_wait(this->get_implementation(), handler); + } +}; + +} // namespace windows +} // namespace asio +} // namespace boost + +#include + +#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + // || defined(GENERATING_DOCUMENTATION) + +#endif // BOOST_ASIO_WINDOWS_BASIC_OBJECT_HANDLE_HPP diff --git a/3party/boost/boost/asio/windows/basic_random_access_handle.hpp b/3party/boost/boost/asio/windows/basic_random_access_handle.hpp index 7e0b9db1da..0d57141889 100644 --- a/3party/boost/boost/asio/windows/basic_random_access_handle.hpp +++ b/3party/boost/boost/asio/windows/basic_random_access_handle.hpp @@ -2,7 +2,7 @@ // windows/basic_random_access_handle.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/windows/basic_stream_handle.hpp b/3party/boost/boost/asio/windows/basic_stream_handle.hpp index 35209dc4a3..ccc8f094f0 100644 --- a/3party/boost/boost/asio/windows/basic_stream_handle.hpp +++ b/3party/boost/boost/asio/windows/basic_stream_handle.hpp @@ -2,7 +2,7 @@ // windows/basic_stream_handle.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/windows/object_handle.hpp b/3party/boost/boost/asio/windows/object_handle.hpp new file mode 100644 index 0000000000..7bf0654648 --- /dev/null +++ b/3party/boost/boost/asio/windows/object_handle.hpp @@ -0,0 +1,40 @@ +// +// windows/object_handle.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2011 Boris Schaeling (boris@highscore.de) +// +// 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 BOOST_ASIO_WINDOWS_OBJECT_HANDLE_HPP +#define BOOST_ASIO_WINDOWS_OBJECT_HANDLE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \ + || defined(GENERATING_DOCUMENTATION) + +#include + +namespace boost { +namespace asio { +namespace windows { + +/// Typedef for the typical usage of an object handle. +typedef basic_object_handle<> object_handle; + +} // namespace windows +} // namespace asio +} // namespace boost + +#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + // || defined(GENERATING_DOCUMENTATION) + +#endif // BOOST_ASIO_WINDOWS_OBJECT_HANDLE_HPP diff --git a/3party/boost/boost/asio/windows/object_handle_service.hpp b/3party/boost/boost/asio/windows/object_handle_service.hpp new file mode 100644 index 0000000000..ffc89e6479 --- /dev/null +++ b/3party/boost/boost/asio/windows/object_handle_service.hpp @@ -0,0 +1,170 @@ +// +// windows/object_handle_service.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2011 Boris Schaeling (boris@highscore.de) +// +// 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 BOOST_ASIO_WINDOWS_OBJECT_HANDLE_SERVICE_HPP +#define BOOST_ASIO_WINDOWS_OBJECT_HANDLE_SERVICE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#if defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) \ + || defined(GENERATING_DOCUMENTATION) + +#include +#include +#include + +#include + +namespace boost { +namespace asio { +namespace windows { + +/// Default service implementation for an object handle. +class object_handle_service +#if defined(GENERATING_DOCUMENTATION) + : public boost::asio::io_service::service +#else + : public boost::asio::detail::service_base +#endif +{ +public: +#if defined(GENERATING_DOCUMENTATION) + /// The unique service identifier. + static boost::asio::io_service::id id; +#endif + +private: + // The type of the platform-specific implementation. + typedef detail::win_object_handle_service service_impl_type; + +public: + /// The type of an object handle implementation. +#if defined(GENERATING_DOCUMENTATION) + typedef implementation_defined implementation_type; +#else + typedef service_impl_type::implementation_type implementation_type; +#endif + + /// The native handle type. +#if defined(GENERATING_DOCUMENTATION) + typedef implementation_defined native_handle_type; +#else + typedef service_impl_type::native_handle_type native_handle_type; +#endif + + /// Construct a new object handle service for the specified io_service. + explicit object_handle_service(boost::asio::io_service& io_service) + : boost::asio::detail::service_base(io_service), + service_impl_(io_service) + { + } + + /// Construct a new object handle implementation. + void construct(implementation_type& impl) + { + service_impl_.construct(impl); + } + +#if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) + /// Move-construct a new object handle implementation. + void move_construct(implementation_type& impl, + implementation_type& other_impl) + { + service_impl_.move_construct(impl, other_impl); + } + + /// Move-assign from another object handle implementation. + void move_assign(implementation_type& impl, + object_handle_service& other_service, + implementation_type& other_impl) + { + service_impl_.move_assign(impl, other_service.service_impl_, other_impl); + } +#endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION) + + /// Destroy an object handle implementation. + void destroy(implementation_type& impl) + { + service_impl_.destroy(impl); + } + + /// Assign an existing native handle to an object handle. + boost::system::error_code assign(implementation_type& impl, + const native_handle_type& handle, boost::system::error_code& ec) + { + return service_impl_.assign(impl, handle, ec); + } + + /// Determine whether the handle is open. + bool is_open(const implementation_type& impl) const + { + return service_impl_.is_open(impl); + } + + /// Close an object handle implementation. + boost::system::error_code close(implementation_type& impl, + boost::system::error_code& ec) + { + return service_impl_.close(impl, ec); + } + + /// Get the native handle implementation. + native_handle_type native_handle(implementation_type& impl) + { + return service_impl_.native_handle(impl); + } + + /// Cancel all asynchronous operations associated with the handle. + boost::system::error_code cancel(implementation_type& impl, + boost::system::error_code& ec) + { + return service_impl_.cancel(impl, ec); + } + + // Wait for a signaled state. + void wait(implementation_type& impl, boost::system::error_code& ec) + { + service_impl_.wait(impl, ec); + } + + /// Start an asynchronous wait. + template + void async_wait(implementation_type& impl, + BOOST_ASIO_MOVE_ARG(WaitHandler) handler) + { + service_impl_.async_wait(impl, BOOST_ASIO_MOVE_CAST(WaitHandler)(handler)); + } + +private: + // Destroy all user-defined handler objects owned by the service. + void shutdown_service() + { + service_impl_.shutdown_service(); + } + + // The platform-specific implementation. + service_impl_type service_impl_; +}; + +} // namespace windows +} // namespace asio +} // namespace boost + +#include + +#endif // defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE) + // || defined(GENERATING_DOCUMENTATION) + +#endif // BOOST_ASIO_WINDOWS_OBJECT_HANDLE_SERVICE_HPP diff --git a/3party/boost/boost/asio/windows/overlapped_ptr.hpp b/3party/boost/boost/asio/windows/overlapped_ptr.hpp index e88589290f..94f98423dd 100644 --- a/3party/boost/boost/asio/windows/overlapped_ptr.hpp +++ b/3party/boost/boost/asio/windows/overlapped_ptr.hpp @@ -2,7 +2,7 @@ // windows/overlapped_ptr.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/windows/random_access_handle.hpp b/3party/boost/boost/asio/windows/random_access_handle.hpp index 183ad0d815..61fe1aaaa0 100644 --- a/3party/boost/boost/asio/windows/random_access_handle.hpp +++ b/3party/boost/boost/asio/windows/random_access_handle.hpp @@ -2,7 +2,7 @@ // windows/random_access_handle.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/windows/random_access_handle_service.hpp b/3party/boost/boost/asio/windows/random_access_handle_service.hpp index 8da35644e9..9b5e4561a0 100644 --- a/3party/boost/boost/asio/windows/random_access_handle_service.hpp +++ b/3party/boost/boost/asio/windows/random_access_handle_service.hpp @@ -2,7 +2,7 @@ // windows/random_access_handle_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/windows/stream_handle.hpp b/3party/boost/boost/asio/windows/stream_handle.hpp index 67f64522c0..7d829dbb9e 100644 --- a/3party/boost/boost/asio/windows/stream_handle.hpp +++ b/3party/boost/boost/asio/windows/stream_handle.hpp @@ -2,7 +2,7 @@ // windows/stream_handle.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/windows/stream_handle_service.hpp b/3party/boost/boost/asio/windows/stream_handle_service.hpp index 828dc99c0f..7d0ec9cb7b 100644 --- a/3party/boost/boost/asio/windows/stream_handle_service.hpp +++ b/3party/boost/boost/asio/windows/stream_handle_service.hpp @@ -2,7 +2,7 @@ // windows/stream_handle_service.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/write.hpp b/3party/boost/boost/asio/write.hpp index e8aee087b1..dd6cb3428f 100644 --- a/3party/boost/boost/asio/write.hpp +++ b/3party/boost/boost/asio/write.hpp @@ -2,7 +2,7 @@ // write.hpp // ~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/asio/write_at.hpp b/3party/boost/boost/asio/write_at.hpp index f5548d8000..9535a55de3 100644 --- a/3party/boost/boost/asio/write_at.hpp +++ b/3party/boost/boost/asio/write_at.hpp @@ -2,7 +2,7 @@ // write_at.hpp // ~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // 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) diff --git a/3party/boost/boost/bimap/container_adaptor/list_map_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/list_map_adaptor.hpp index ff7a5407af..e4fd52df79 100644 --- a/3party/boost/boost/bimap/container_adaptor/list_map_adaptor.hpp +++ b/3party/boost/boost/bimap/container_adaptor/list_map_adaptor.hpp @@ -134,6 +134,7 @@ class list_map_adaptor : typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::first_type key_type; typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; + typedef data_type mapped_type; protected: diff --git a/3party/boost/boost/bimap/container_adaptor/map_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/map_adaptor.hpp index f1a6f64d2d..3df1a03cb0 100644 --- a/3party/boost/boost/bimap/container_adaptor/map_adaptor.hpp +++ b/3party/boost/boost/bimap/container_adaptor/map_adaptor.hpp @@ -82,6 +82,7 @@ class map_adaptor : public: typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; + typedef data_type mapped_type; // Access ----------------------------------------------------------------- diff --git a/3party/boost/boost/bimap/container_adaptor/multimap_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/multimap_adaptor.hpp index ad5edf2bb9..f39899ea0c 100644 --- a/3party/boost/boost/bimap/container_adaptor/multimap_adaptor.hpp +++ b/3party/boost/boost/bimap/container_adaptor/multimap_adaptor.hpp @@ -81,6 +81,7 @@ class multimap_adaptor : public: typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; + typedef data_type mapped_type; // Access ----------------------------------------------------------------- diff --git a/3party/boost/boost/bimap/container_adaptor/unordered_map_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/unordered_map_adaptor.hpp index 762a643c27..fd233e8e22 100644 --- a/3party/boost/boost/bimap/container_adaptor/unordered_map_adaptor.hpp +++ b/3party/boost/boost/bimap/container_adaptor/unordered_map_adaptor.hpp @@ -82,6 +82,7 @@ class unordered_map_adaptor : public: typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; + typedef data_type mapped_type; // Access ----------------------------------------------------------------- diff --git a/3party/boost/boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp index be28b3adf3..104d197963 100644 --- a/3party/boost/boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp +++ b/3party/boost/boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp @@ -81,6 +81,7 @@ class unordered_multimap_adaptor : public: typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; + typedef data_type mapped_type; // Access ----------------------------------------------------------------- diff --git a/3party/boost/boost/bimap/container_adaptor/vector_map_adaptor.hpp b/3party/boost/boost/bimap/container_adaptor/vector_map_adaptor.hpp index 9b0b9d3df5..1d49ac7c6e 100644 --- a/3party/boost/boost/bimap/container_adaptor/vector_map_adaptor.hpp +++ b/3party/boost/boost/bimap/container_adaptor/vector_map_adaptor.hpp @@ -77,6 +77,7 @@ class vector_map_adaptor : typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::first_type key_type; typedef BOOST_DEDUCED_TYPENAME Iterator::value_type::second_type data_type; + typedef data_type mapped_type; // Access ----------------------------------------------------------------- diff --git a/3party/boost/boost/bimap/detail/map_view_iterator.hpp b/3party/boost/boost/bimap/detail/map_view_iterator.hpp index adc8d7c861..4f0e20e00a 100644 --- a/3party/boost/boost/bimap/detail/map_view_iterator.hpp +++ b/3party/boost/boost/bimap/detail/map_view_iterator.hpp @@ -19,7 +19,11 @@ #include // Boost -#include + +#ifndef BOOST_BIMAP_DISABLE_SERIALIZATION + #include +#endif // BOOST_BIMAP_DISABLE_SERIALIZATION + #include #include #include diff --git a/3party/boost/boost/bimap/detail/set_view_iterator.hpp b/3party/boost/boost/bimap/detail/set_view_iterator.hpp index 57e6ae3c8b..d48f5c05b1 100644 --- a/3party/boost/boost/bimap/detail/set_view_iterator.hpp +++ b/3party/boost/boost/bimap/detail/set_view_iterator.hpp @@ -19,7 +19,11 @@ #include // Boost -#include + +#ifndef BOOST_BIMAP_DISABLE_SERIALIZATION + #include +#endif // BOOST_BIMAP_DISABLE_SERIALIZATION + #include #include #include diff --git a/3party/boost/boost/bimap/relation/detail/mutant.hpp b/3party/boost/boost/bimap/relation/detail/mutant.hpp index 62b3843bb1..8a2ffdeba0 100644 --- a/3party/boost/boost/bimap/relation/detail/mutant.hpp +++ b/3party/boost/boost/bimap/relation/detail/mutant.hpp @@ -21,9 +21,9 @@ #include #include #include -#include #include #include +#include #include #include diff --git a/3party/boost/boost/bimap/relation/mutant_relation.hpp b/3party/boost/boost/bimap/relation/mutant_relation.hpp index c46ab790a9..9aa28e4cac 100644 --- a/3party/boost/boost/bimap/relation/mutant_relation.hpp +++ b/3party/boost/boost/bimap/relation/mutant_relation.hpp @@ -21,7 +21,10 @@ #include #include #include -#include + +#ifndef BOOST_BIMAP_DISABLE_SERIALIZATION + #include +#endif // BOOST_BIMAP_DISABLE_SERIALIZATION #include diff --git a/3party/boost/boost/bimap/views/unconstrained_map_view.hpp b/3party/boost/boost/bimap/views/unconstrained_map_view.hpp index da9b4b47af..ce47541e48 100644 --- a/3party/boost/boost/bimap/views/unconstrained_map_view.hpp +++ b/3party/boost/boost/bimap/views/unconstrained_map_view.hpp @@ -29,7 +29,7 @@ class unconstrained_map_view { public: template< class T > - unconstrained_map_view(const T & t) {} + unconstrained_map_view(const T &) {} typedef void reference; typedef void const_reference; diff --git a/3party/boost/boost/bimap/views/unconstrained_set_view.hpp b/3party/boost/boost/bimap/views/unconstrained_set_view.hpp index 6b4a6e220d..e4ada9d08c 100644 --- a/3party/boost/boost/bimap/views/unconstrained_set_view.hpp +++ b/3party/boost/boost/bimap/views/unconstrained_set_view.hpp @@ -29,7 +29,7 @@ class unconstrained_set_view { public: template< class T > - unconstrained_set_view(const T & t) {} + unconstrained_set_view(const T &) {} typedef void iterator; typedef void const_iterator; diff --git a/3party/boost/boost/bind/bind.hpp b/3party/boost/boost/bind/bind.hpp index a63d2a026b..fb670979d3 100644 --- a/3party/boost/boost/bind/bind.hpp +++ b/3party/boost/boost/bind/bind.hpp @@ -1680,7 +1680,7 @@ template< class R, class T > struct add_cref< R (T::*) (), 1 > typedef void type; }; -#if !( defined(__IBMCPP__) && BOOST_WORKAROUND( __IBMCPP__, BOOST_TESTED_AT(600) ) ) +#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION template< class R, class T > struct add_cref< R (T::*) () const, 1 > { diff --git a/3party/boost/boost/chrono/ceil.hpp b/3party/boost/boost/chrono/ceil.hpp new file mode 100644 index 0000000000..7fbf9ddc29 --- /dev/null +++ b/3party/boost/boost/chrono/ceil.hpp @@ -0,0 +1,36 @@ +// boost/chrono/round.hpp ------------------------------------------------------------// + +// (C) Copyright Howard Hinnant +// Copyright 2011 Vicente J. Botet Escriba + +// 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) + +// See http://www.boost.org/libs/chrono for documentation. + +#ifndef BOOST_CHRONO_CEIL_HPP +#define BOOST_CHRONO_CEIL_HPP + +#include + +namespace boost +{ + namespace chrono + { + + /** + * rounds up + */ + template + To ceil(const duration& d) + { + To t = duration_cast(d); + if (t < d) + ++t; + return t; + } + + } // namespace chrono +} // namespace boost + +#endif diff --git a/3party/boost/boost/chrono/chrono_io.hpp b/3party/boost/boost/chrono/chrono_io.hpp index c65adee663..29a8d3493e 100644 --- a/3party/boost/boost/chrono/chrono_io.hpp +++ b/3party/boost/boost/chrono/chrono_io.hpp @@ -2,7 +2,7 @@ // chrono_io // // (C) Copyright Howard Hinnant -// (C) Copyright 2010 Vicente J. Botet Escriba +// (C) Copyright 2010-2011 Vicente J. Botet Escriba // Use, modification and distribution are subject to 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). @@ -13,642 +13,7 @@ #ifndef BOOST_CHRONO_CHRONO_IO_HPP #define BOOST_CHRONO_CHRONO_IO_HPP -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost -{ - -namespace chrono -{ - -template -class duration_punct - : public std::locale::facet -{ -public: - typedef std::basic_string string_type; - enum {use_long, use_short}; - -private: - bool use_short_; - string_type long_seconds_; - string_type long_minutes_; - string_type long_hours_; - string_type short_seconds_; - string_type short_minutes_; - string_type short_hours_; - - template - string_type short_name(Period) const - {return ::boost::ratio_string::short_name() + short_seconds_;} - - string_type short_name(ratio<1>) const {return short_seconds_;} - string_type short_name(ratio<60>) const {return short_minutes_;} - string_type short_name(ratio<3600>) const {return short_hours_;} - - template - string_type long_name(Period) const - {return ::boost::ratio_string::long_name() + long_seconds_;} - - string_type long_name(ratio<1>) const {return long_seconds_;} - string_type long_name(ratio<60>) const {return long_minutes_;} - string_type long_name(ratio<3600>) const {return long_hours_;} - - void init_C(); -public: - static std::locale::id id; - - explicit duration_punct(int use = use_long) - : use_short_(use==use_short) {init_C();} - - duration_punct(int use, - const string_type& long_seconds, const string_type& long_minutes, - const string_type& long_hours, const string_type& short_seconds, - const string_type& short_minutes, const string_type& short_hours); - - duration_punct(int use, const duration_punct& d); - - template - string_type short_name() const - {return short_name(typename Period::type());} - - template - string_type long_name() const - {return long_name(typename Period::type());} - - template - string_type name() const { - if (use_short_) return short_name(); - else return long_name(); - } - - bool is_short_name() const {return use_short_;} - bool is_long_name() const {return !use_short_;} -}; - -template -std::locale::id -duration_punct::id; - -template -void -duration_punct::init_C() -{ - short_seconds_ = CharT('s'); - short_minutes_ = CharT('m'); - short_hours_ = CharT('h'); - const CharT s[] = {'s', 'e', 'c', 'o', 'n', 'd', 's'}; - const CharT m[] = {'m', 'i', 'n', 'u', 't', 'e', 's'}; - const CharT h[] = {'h', 'o', 'u', 'r', 's'}; - long_seconds_.assign(s, s + sizeof(s)/sizeof(s[0])); - long_minutes_.assign(m, m + sizeof(m)/sizeof(m[0])); - long_hours_.assign(h, h + sizeof(h)/sizeof(h[0])); -} - -template -duration_punct::duration_punct(int use, - const string_type& long_seconds, const string_type& long_minutes, - const string_type& long_hours, const string_type& short_seconds, - const string_type& short_minutes, const string_type& short_hours) - : use_short_(use==use_short), - long_seconds_(long_seconds), - long_minutes_(long_minutes), - long_hours_(long_hours), - short_seconds_(short_seconds), - short_minutes_(short_minutes), - short_hours_(short_hours) -{} - -template -duration_punct::duration_punct(int use, const duration_punct& d) - : use_short_(use==use_short), - long_seconds_(d.long_seconds_), - long_minutes_(d.long_minutes_), - long_hours_(d.long_hours_), - short_seconds_(d.short_seconds_), - short_minutes_(d.short_minutes_), - short_hours_(d.short_hours_) -{} - -template -std::basic_ostream& -duration_short(std::basic_ostream& os) -{ - typedef duration_punct Facet; - std::locale loc = os.getloc(); - if (std::has_facet(loc)) - { - const Facet& f = std::use_facet(loc); - if (f.is_long_name()) - os.imbue(std::locale(loc, new Facet(Facet::use_short, f))); - } - else - os.imbue(std::locale(loc, new Facet(Facet::use_short))); - return os; -} - -template -std::basic_ostream& -duration_long(std::basic_ostream& os) -{ - typedef duration_punct Facet; - std::locale loc = os.getloc(); - if (std::has_facet(loc)) - { - const Facet& f = std::use_facet(loc); - if (f.is_short_name()) - os.imbue(std::locale(loc, new Facet(Facet::use_long, f))); - } - return os; -} - -template -std::basic_ostream& -operator<<(std::basic_ostream& os, const duration& d) -{ - typedef duration_punct Facet; - std::locale loc = os.getloc(); - if (!std::has_facet(loc)) - os.imbue(std::locale(loc, new Facet)); - const Facet& f = std::use_facet(os.getloc()); - return os << d.count() << ' ' << f.template name(); -} - -namespace chrono_detail { -template ::value> -struct duration_io_intermediate -{ - typedef Rep type; -}; - -template -struct duration_io_intermediate -{ - typedef typename mpl::if_c - < - is_floating_point::value, - long double, - typename mpl::if_c - < - is_signed::value, - long long, - unsigned long long - >::type - >::type type; -}; - -} - -template -std::basic_istream& -operator>>(std::basic_istream& is, duration& d) -{ - typedef duration_punct Facet; - std::locale loc = is.getloc(); - if (!std::has_facet(loc)) - is.imbue(std::locale(loc, new Facet)); - loc = is.getloc(); - const Facet& f = std::use_facet(loc); - typedef typename chrono_detail::duration_io_intermediate::type intermediate_type; - intermediate_type r; - // read value into r - is >> r; - if (is.good()) - { - // now determine unit - typedef std::istreambuf_iterator in_iterator; - in_iterator i(is); - in_iterator e; - if (i != e && *i == ' ') // mandatory ' ' after value - { - ++i; - if (i != e) - { - // unit is num / den (yet to be determined) - unsigned long long num = 0; - unsigned long long den = 0; - if (*i == '[') - { - // parse [N/D]s or [N/D]seconds format - ++i; - CharT x; - is >> num >> x >> den; - if (!is.good() || (x != '/')) - { - is.setstate(is.failbit); - return is; - } - i = in_iterator(is); - if (*i != ']') - { - is.setstate(is.failbit); - return is; - } - ++i; - const std::basic_string units[] = - { - f.template long_name >(), - f.template short_name >() - }; - std::ios_base::iostate err = std::ios_base::goodbit; - const std::basic_string* k = chrono_detail::scan_keyword(i, e, - units, units + sizeof(units)/sizeof(units[0]), - //~ std::use_facet >(loc), - err); - switch ((k - units) / 2) - { - case 0: - break; - default: - is.setstate(err); - return is; - } - } - else - { - // parse SI name, short or long - const std::basic_string units[] = - { - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name(), - f.template short_name(), - f.template long_name >(), - f.template short_name >(), - f.template long_name >(), - f.template short_name >(), - f.template long_name >(), - f.template short_name >() - }; - std::ios_base::iostate err = std::ios_base::goodbit; - const std::basic_string* k = chrono_detail::scan_keyword(i, e, - units, units + sizeof(units)/sizeof(units[0]), - //~ std::use_facet >(loc), - err); - switch ((k - units) / 2) - { - case 0: - num = 1ULL; - den = 1000000000000000000ULL; - break; - case 1: - num = 1ULL; - den = 1000000000000000ULL; - break; - case 2: - num = 1ULL; - den = 1000000000000ULL; - break; - case 3: - num = 1ULL; - den = 1000000000ULL; - break; - case 4: - num = 1ULL; - den = 1000000ULL; - break; - case 5: - num = 1ULL; - den = 1000ULL; - break; - case 6: - num = 1ULL; - den = 100ULL; - break; - case 7: - num = 1ULL; - den = 10ULL; - break; - case 8: - num = 10ULL; - den = 1ULL; - break; - case 9: - num = 100ULL; - den = 1ULL; - break; - case 10: - num = 1000ULL; - den = 1ULL; - break; - case 11: - num = 1000000ULL; - den = 1ULL; - break; - case 12: - num = 1000000000ULL; - den = 1ULL; - break; - case 13: - num = 1000000000000ULL; - den = 1ULL; - break; - case 14: - num = 1000000000000000ULL; - den = 1ULL; - break; - case 15: - num = 1000000000000000000ULL; - den = 1ULL; - break; - case 16: - num = 1; - den = 1; - break; - case 17: - num = 60; - den = 1; - break; - case 18: - num = 3600; - den = 1; - break; - default: - is.setstate(err); - return is; - } - } - // unit is num/den - // r should be multiplied by (num/den) / Period - // Reduce (num/den) / Period to lowest terms - unsigned long long gcd_n1_n2 = math::gcd(num, Period::num); - unsigned long long gcd_d1_d2 = math::gcd(den, Period::den); - num /= gcd_n1_n2; - den /= gcd_d1_d2; - unsigned long long n2 = Period::num / gcd_n1_n2; - unsigned long long d2 = Period::den / gcd_d1_d2; - if (num > (std::numeric_limits::max)() / d2 || - den > (std::numeric_limits::max)() / n2) - { - // (num/den) / Period overflows - is.setstate(is.failbit); - return is; - } - num *= d2; - den *= n2; - // num / den is now factor to multiply by r - typedef typename common_type::type common_type_t; - if (is_integral::value) - { - // Reduce r * num / den - common_type_t t = math::gcd(r, den); - r /= t; - den /= t; - if (den != 1) - { - // Conversion to Period is integral and not exact - is.setstate(is.failbit); - return is; - } - } - if (r > ((duration_values::max)() / num)) - { - // Conversion to Period overflowed - is.setstate(is.failbit); - return is; - } - common_type_t t = r * num; - t /= den; - if ((duration_values::max)() < t) - { - // Conversion to Period overflowed - is.setstate(is.failbit); - return is; - } - // Success! Store it. - r = Rep(t); - d = duration(r); - } - else - is.setstate(is.failbit | is.eofbit); - } - else - { - if (i == e) - is.setstate(is.eofbit); - is.setstate(is.failbit); - } - } - else - is.setstate(is.failbit); - return is; -} - -template -struct clock_string; - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'s', 'y', 's', 't', 'e', 'm', '_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - static const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 'J', 'a', - 'n', ' ', '1', ',', ' ', '1', '9', '7', '0'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; -#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'m', 'o', 'n', 'o', 't', 'o', 'n', 'i', 'c', '_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 'b', 'o', 'o', 't'}; - const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; - - -#endif - -#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'t', 'h', 'r', 'e', 'd', '_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 't', 'r', 'e', 'a', 'd', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'}; - const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; - -#endif - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'r', 'e', 'a', 'l','_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'}; - const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'u', 's', 'e', 'r','_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'}; - const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'p', 'r', 'o', 'c', 'e', 's', 's', '_', 's', 'y', 's', 't', 't', 'e', 'm', '_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'}; - const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; - -template -struct clock_string -{ - static std::basic_string name() - { - static const CharT u[] = {'p', 'r', 'o', 'c', 'e', 's', 's', '_', - 'c', 'l','o', 'c', 'k'}; - static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } - static std::basic_string since() - { - const CharT u[] = {' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'}; - const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); - return str; - } -}; - -template -std::basic_ostream& -operator<<(std::basic_ostream& os, - const time_point& tp) -{ - return os << tp.time_since_epoch() << clock_string::since(); -} - -template -std::basic_istream& -operator>>(std::basic_istream& is, - time_point& tp) -{ - Duration d; - is >> d; - if (is.good()) - { - const std::basic_string units=clock_string::since(); - std::ios_base::iostate err = std::ios_base::goodbit; - typedef std::istreambuf_iterator in_iterator; - in_iterator i(is); - in_iterator e; - std::ptrdiff_t k = chrono_detail::scan_keyword(i, e, - &units, &units + 1, - //~ std::use_facet >(is.getloc()), - err) - &units; - if (k == 1) - { - // failed to read epoch string - is.setstate(err); - return is; - } - tp = time_point(d); - } - else - is.setstate(is.failbit); - return is; -} -} // chrono - -} +#include +#include #endif // BOOST_CHRONO_CHRONO_IO_HPP diff --git a/3party/boost/boost/chrono/clock_string.hpp b/3party/boost/boost/chrono/clock_string.hpp new file mode 100644 index 0000000000..af025f27e0 --- /dev/null +++ b/3party/boost/boost/chrono/clock_string.hpp @@ -0,0 +1,25 @@ +// +// (C) Copyright 2010-2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to 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 BOOST_CHRONO_CLOCK_STRING_HPP +#define BOOST_CHRONO_CLOCK_STRING_HPP + +#include + +namespace boost +{ + namespace chrono + { + + template + struct clock_string; + + } // chrono + +} // boost + +#endif // BOOST_CHRONO_CLOCK_STRING_HPP diff --git a/3party/boost/boost/chrono/config.hpp b/3party/boost/boost/chrono/config.hpp index f33dbf928f..b7d0c0d198 100644 --- a/3party/boost/boost/chrono/config.hpp +++ b/3party/boost/boost/chrono/config.hpp @@ -1,7 +1,7 @@ // boost/chrono/config.hpp -------------------------------------------------// // Copyright Beman Dawes 2003, 2006, 2008 -// Copyright 2009 Vicente J. Botet Escriba +// Copyright 2009-2011 Vicente J. Botet Escriba // 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) @@ -13,6 +13,14 @@ #include +#if !defined BOOST_CHRONO_VERSION +#define BOOST_CHRONO_VERSION 1 +#else +#if BOOST_CHRONO_VERSION!=1 && BOOST_CHRONO_VERSION!=2 +#error "BOOST_CHRONO_VERSION must be 1 or 2" +#endif +#endif + #if defined(BOOST_CHRONO_SOURCE) && !defined(BOOST_USE_WINDOWS_H) #define BOOST_USE_WINDOWS_H #endif @@ -37,26 +45,33 @@ # elif !defined( BOOST_CHRONO_WINDOWS_API ) && !defined( BOOST_CHRONO_MAC_API ) && !defined( BOOST_CHRONO_POSIX_API ) # if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) # define BOOST_CHRONO_WINDOWS_API -# define BOOST_CHRONO_HAS_CLOCK_STEADY -# define BOOST_CHRONO_HAS_THREAD_CLOCK -# define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true # elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) # define BOOST_CHRONO_MAC_API -# define BOOST_CHRONO_HAS_CLOCK_STEADY -# define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true # else # define BOOST_CHRONO_POSIX_API # endif # endif +# if defined( BOOST_CHRONO_WINDOWS_API ) +# ifndef UNDER_CE +# define BOOST_CHRONO_HAS_PROCESS_CLOCKS +# endif +# define BOOST_CHRONO_HAS_CLOCK_STEADY +# define BOOST_CHRONO_HAS_THREAD_CLOCK +# define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true +# endif + +# if defined( BOOST_CHRONO_MAC_API ) +# define BOOST_CHRONO_HAS_PROCESS_CLOCKS +# define BOOST_CHRONO_HAS_CLOCK_STEADY +# define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true +# endif + # if defined( BOOST_CHRONO_POSIX_API ) +# define BOOST_CHRONO_HAS_PROCESS_CLOCKS # include //to check for CLOCK_REALTIME and CLOCK_MONOTONIC and _POSIX_THREAD_CPUTIME -# if defined(CLOCK_REALTIME) -# if defined(CLOCK_MONOTONIC) -# define BOOST_CHRONO_HAS_CLOCK_STEADY -# endif -# else -# error does not supply CLOCK_REALTIME +# if defined(CLOCK_MONOTONIC) +# define BOOST_CHRONO_HAS_CLOCK_STEADY # endif # if defined(_POSIX_THREAD_CPUTIME) && !defined(BOOST_DISABLE_THREADS) # define BOOST_CHRONO_HAS_THREAD_CLOCK @@ -66,6 +81,14 @@ # define BOOST_CHRONO_HAS_THREAD_CLOCK # define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true # endif +# if defined(sun) || defined(__sun) +# undef BOOST_CHRONO_HAS_THREAD_CLOCK +# undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY +# endif +# if defined(__HP_aCC) && defined(__hpux) +# undef BOOST_CHRONO_HAS_THREAD_CLOCK +# undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY +# endif # endif #if defined(BOOST_CHRONO_THREAD_DISABLED) && defined(BOOST_CHRONO_HAS_THREAD_CLOCK) @@ -73,6 +96,8 @@ #undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY #endif +//#undef BOOST_CHRONO_HAS_PROCESS_CLOCKS + // unicode support ------------------------------// #if defined(BOOST_NO_UNICODE_LITERALS) || defined(BOOST_NO_CHAR16_T) || defined(BOOST_NO_CHAR32_T) @@ -81,24 +106,17 @@ #define BOOST_CHRONO_HAS_UNICODE_SUPPORT 1 #endif -// define constexpr related macros ------------------------------// - -#if defined(BOOST_NO_CONSTEXPR) -#define BOOST_CHRONO_CONSTEXPR -#define BOOST_CHRONO_CONSTEXPR_OR_CONST const -#define BOOST_CHRONO_CONST_REF const& +#if ! defined BOOST_NOEXCEPT +#if defined(BOOST_NO_NOEXCEPT) +#define BOOST_NOEXCEPT #else -#define BOOST_CHRONO_CONSTEXPR constexpr -#define BOOST_CHRONO_CONSTEXPR_OR_CONST constexpr -#define BOOST_CHRONO_CONST_REF +#define BOOST_NOEXCEPT noexcept +#endif #endif - -#define BOOST_CHRONO_STATIC_CONSTEXPR static BOOST_CHRONO_CONSTEXPR_OR_CONST - #ifdef BOOST_CHRONO_HEADER_ONLY #define BOOST_CHRONO_INLINE inline -#define BOOST_CHRONO_STATIC +#define BOOST_CHRONO_STATIC inline #define BOOST_CHRONO_DECL #else @@ -107,7 +125,6 @@ // enable dynamic linking on Windows ---------------------------------------// -#ifdef BOOST_HAS_DECLSPEC // defined by boost.config // we need to import/export our code only if the user has specifically // asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost // libraries to be dynamically linked, or BOOST_CHRONO_DYN_LINK @@ -115,18 +132,18 @@ #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CHRONO_DYN_LINK) // export if this is our own source, otherwise import: #ifdef BOOST_CHRONO_SOURCE -# define BOOST_CHRONO_DECL __declspec(dllexport) +# define BOOST_CHRONO_DECL BOOST_SYMBOL_EXPORT #else -# define BOOST_CHRONO_DECL __declspec(dllimport) +# define BOOST_CHRONO_DECL BOOST_SYMBOL_IMPORT #endif // BOOST_CHRONO_SOURCE #endif // DYN_LINK -#endif // BOOST_HAS_DECLSPEC // // if BOOST_CHRONO_DECL isn't defined yet define it now: #ifndef BOOST_CHRONO_DECL #define BOOST_CHRONO_DECL #endif +//#define BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING // enable automatic library variant selection ------------------------------// @@ -149,4 +166,3 @@ #endif // auto-linking disabled #endif // BOOST_CHRONO_HEADER_ONLY #endif // BOOST_CHRONO_CONFIG_HPP - diff --git a/3party/boost/boost/chrono/detail/inlined/mac/chrono.hpp b/3party/boost/boost/chrono/detail/inlined/mac/chrono.hpp index 566e97223b..bf20ae924b 100644 --- a/3party/boost/boost/chrono/detail/inlined/mac/chrono.hpp +++ b/3party/boost/boost/chrono/detail/inlined/mac/chrono.hpp @@ -26,13 +26,14 @@ namespace chrono // which has a field for seconds and a field for microseconds. // Fill in the timeval and then convert that to the time_point system_clock::time_point -system_clock::now() +system_clock::now() BOOST_NOEXCEPT { timeval tv; gettimeofday(&tv, 0); return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec)); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING system_clock::time_point system_clock::now(system::error_code & ec) { @@ -44,19 +45,19 @@ system_clock::now(system::error_code & ec) } return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec)); } - +#endif // Take advantage of the fact that on this platform time_t is nothing but // an integral count of seconds since New Years 1970 (same epoch as timeval). // Just get the duration out of the time_point and truncate it to seconds. time_t -system_clock::to_time_t(const time_point& t) +system_clock::to_time_t(const time_point& t) BOOST_NOEXCEPT { return time_t(duration_cast(t.time_since_epoch()).count()); } // Just turn the time_t into a count of seconds and construct a time_point with it. system_clock::time_point -system_clock::from_time_t(time_t t) +system_clock::from_time_t(time_t t) BOOST_NOEXCEPT { return system_clock::time_point(seconds(t)); } @@ -82,6 +83,7 @@ steady_simplified() return mach_absolute_time(); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING BOOST_CHRONO_STATIC steady_clock::rep steady_simplified_ec(system::error_code & ec) @@ -92,7 +94,7 @@ steady_simplified_ec(system::error_code & ec) } return mach_absolute_time(); } - +#endif BOOST_CHRONO_STATIC double @@ -114,12 +116,12 @@ steady_full() static const double factor = chrono_detail::compute_steady_factor(err); if (err != 0) { - boost::throw_exception( - system::system_error( err, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::steady_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); } return static_cast(mach_absolute_time() * factor); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING BOOST_CHRONO_STATIC steady_clock::rep steady_full_ec(system::error_code & ec) @@ -148,10 +150,12 @@ steady_full_ec(system::error_code & ec) } return static_cast(mach_absolute_time() * factor); } +#endif typedef steady_clock::rep (*FP)(); +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING typedef steady_clock::rep (*FP_ec)(system::error_code &); - +#endif BOOST_CHRONO_STATIC FP @@ -171,6 +175,7 @@ init_steady_clock(kern_return_t & err) return &chrono_detail::steady_full; } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING BOOST_CHRONO_STATIC FP_ec init_steady_clock_ec(kern_return_t & err) @@ -188,24 +193,22 @@ init_steady_clock_ec(kern_return_t & err) } return &chrono_detail::steady_full_ec; } +#endif } steady_clock::time_point -steady_clock::now() +steady_clock::now() BOOST_NOEXCEPT { static kern_return_t err; static chrono_detail::FP fp = chrono_detail::init_steady_clock(err); if ( err != 0 ) { - boost::throw_exception( - system::system_error( - err, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::steady_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); } return time_point(duration(fp())); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING steady_clock::time_point steady_clock::now(system::error_code & ec) { @@ -233,6 +236,6 @@ steady_clock::now(system::error_code & ec) } return time_point(duration(fp(ec))); } - +#endif } // namespace chrono } // namespace boost diff --git a/3party/boost/boost/chrono/detail/inlined/mac/process_clock.hpp b/3party/boost/boost/chrono/detail/inlined/mac/process_clock.hpp deleted file mode 100644 index 2e947bbe9f..0000000000 --- a/3party/boost/boost/chrono/detail/inlined/mac/process_clock.hpp +++ /dev/null @@ -1,104 +0,0 @@ -// boost process_timer.cpp -----------------------------------------------------------// - -// Copyright Beman Dawes 1994, 2006, 2008 -// Copyright 2009 Vicente J. Botet Escriba - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/chrono for documentation. - -//--------------------------------------------------------------------------------------// - -#include -#include -#include - -#include //for gettimeofday and timeval -#include //for times -# include - -namespace boost -{ -namespace chrono -{ -namespace chrono_detail -{ - inline long tick_factor() // multiplier to convert ticks - // to nanoseconds; -1 if unknown - { - static long factor = 0; - if ( !factor ) - { - if ( (factor = ::sysconf( _SC_CLK_TCK )) <= 0 ) - { - factor = -1; - } - else - { - BOOST_ASSERT( factor <= 1000000l ); // doesn't handle large ticks - factor = 1000000l / factor; // compute factor - if ( !factor ) factor = -1; - } - } - return factor; - } -} - - void process_clock::now( process_times & times_, system::error_code & ec ) - { - - tms tm; - clock_t c = ::times( &tm ); - if ( c == -1 ) // error - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - times_.real = times_.system = times_.user = nanoseconds(-1); - } - } - else - { - times_.real = microseconds(c); - times_.system = microseconds(tm.tms_stime + tm.tms_cstime); - times_.user = microseconds(tm.tms_utime + tm.tms_cutime); - if ( chrono_detail::tick_factor() != -1 ) - { - times_.real *= chrono_detail::tick_factor(); - times_.user *= chrono_detail::tick_factor(); - times_.system *= chrono_detail::tick_factor(); - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - } - else - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - times_.real = times_.user = times_.system = nanoseconds(-1); - } - } - } - -} -} // namespace chrono -} // namespace boost diff --git a/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp index d8999f8cf3..48753bdfc7 100644 --- a/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +++ b/3party/boost/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp @@ -18,234 +18,314 @@ #include //for times # include - -namespace boost { namespace chrono { -namespace chrono_detail { - - inline long tick_factor() // multiplier to convert ticks - // to nanoseconds; -1 if unknown +namespace boost +{ + namespace chrono + { + namespace chrono_detail { + + inline long tick_factor() // multiplier to convert ticks + // to nanoseconds; -1 if unknown + { static long factor = 0; - if ( !factor ) + if (!factor) { - if ( (factor = ::sysconf( _SC_CLK_TCK )) <= 0 ) - factor = -1; - else - { - BOOST_ASSERT( factor <= 1000000l ); // doesn't handle large ticks - factor = 1000000l / factor; // compute factor - if ( !factor ) factor = -1; - } + if ((factor = ::sysconf(_SC_CLK_TCK)) <= 0) + factor = -1; + else + { + BOOST_ASSERT(factor <= 1000000000l); // doesn't handle large ticks + factor = 1000000000l / factor; // compute factor + if (!factor) + factor = -1; + } } return factor; + } } -} -process_real_cpu_clock::time_point process_real_cpu_clock::now( - system::error_code & ec) -{ - - tms tm; - clock_t c = ::times( &tm ); - if ( c == clock_t(-1) ) // error + + process_real_cpu_clock::time_point process_real_cpu_clock::now() BOOST_NOEXCEPT { +#if 0 + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + return time_point(nanoseconds(c * factor)); + } else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + } + return time_point(); +#else + clock_t c = ::clock(); + if (c == clock_t(-1)) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + return time_point( + duration(c*(1000000000l/CLOCKS_PER_SEC)) + ); +#endif + } + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + process_real_cpu_clock::time_point process_real_cpu_clock::now(system::error_code & ec) + { + +#if 0 + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { if (BOOST_CHRONO_IS_THROWS(ec)) { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_real_cpu_clock" )); - } - else + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + return time_point(); + } + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + if (!BOOST_CHRONO_IS_THROWS(ec)) + { + ec.clear(); + } + return time_point(nanoseconds(c * factor)); + } else + { + if (BOOST_CHRONO_IS_THROWS(ec)) + { + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + } else + { + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); return time_point(); + } } - } - else - { - if ( chrono_detail::tick_factor() != -1 ) - { - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - return time_point( - microseconds(c)*chrono_detail::tick_factor()); - } - else - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_real_cpu_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - return time_point(); - } - } - } -} - -process_user_cpu_clock::time_point process_user_cpu_clock::now( - system::error_code & ec) -{ - tms tm; - clock_t c = ::times( &tm ); - if ( c == clock_t(-1) ) // error - { + } +#else + clock_t c = ::clock(); + if (c == clock_t(-1)) // error + { if (BOOST_CHRONO_IS_THROWS(ec)) { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_user_cpu_clock" )); - } - else + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - return time_point(); + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + return time_point(); } - } - else - { - if ( chrono_detail::tick_factor() != -1 ) - { - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - return time_point( - microseconds(tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor()); - } - else - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_user_cpu_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - return time_point(); - } - } - } -} + } + return time_point( + duration(c*(1000000000l/CLOCKS_PER_SEC)) + ); -process_system_cpu_clock::time_point process_system_cpu_clock::now( - system::error_code & ec) -{ - tms tm; - clock_t c = ::times( &tm ); - if ( c == clock_t(-1) ) // error +#endif + + } +#endif + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + process_user_cpu_clock::time_point process_user_cpu_clock::now(system::error_code & ec) { + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { if (BOOST_CHRONO_IS_THROWS(ec)) { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_system_cpu_clock" )); - } - else + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock")); + } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + return time_point(); + } + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + if (!BOOST_CHRONO_IS_THROWS(ec)) + { + ec.clear(); + } + return time_point(nanoseconds((tm.tms_utime + tm.tms_cutime) * factor)); + } else + { + if (BOOST_CHRONO_IS_THROWS(ec)) + { + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock")); + } else + { + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); return time_point(); + } } + } } - else - { - if ( chrono_detail::tick_factor() != -1 ) - { - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - return time_point( - microseconds(tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()); - } - else - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_system_cpu_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - return time_point(); - } - } - } -} +#endif -process_cpu_clock::time_point process_cpu_clock::now( - system::error_code & ec ) -{ - - - tms tm; - clock_t c = ::times( &tm ); - if ( c == clock_t(-1) ) // error + process_user_cpu_clock::time_point process_user_cpu_clock::now() BOOST_NOEXCEPT { + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + return time_point(nanoseconds((tm.tms_utime + tm.tms_cutime) + * factor)); + } else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + } + return time_point(); + } + process_system_cpu_clock::time_point process_system_cpu_clock::now() BOOST_NOEXCEPT + { + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + return time_point(nanoseconds((tm.tms_stime + tm.tms_cstime) + * factor)); + } else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + } + return time_point(); + } + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + process_system_cpu_clock::time_point process_system_cpu_clock::now(system::error_code & ec) + { + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { if (BOOST_CHRONO_IS_THROWS(ec)) { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock")); + } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + return time_point(); + } + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + if (!BOOST_CHRONO_IS_THROWS(ec)) + { + ec.clear(); + } + return time_point(nanoseconds((tm.tms_stime + tm.tms_cstime) * factor)); + } else + { + if (BOOST_CHRONO_IS_THROWS(ec)) + { + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock")); + } else + { + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); return time_point(); + } } + } } - else +#endif + + process_cpu_clock::time_point process_cpu_clock::now() BOOST_NOEXCEPT { - if ( chrono_detail::tick_factor() != -1 ) + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) { - time_point::rep r( - c*chrono_detail::tick_factor(), - (tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(), - (tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()); - return time_point(duration(r)); - } - else + time_point::rep + r(c * factor, (tm.tms_utime + tm.tms_cutime) * factor, (tm.tms_stime + + tm.tms_cstime) * factor); + return time_point(duration(r)); + } else { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - return time_point(); - } + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); } + } + return time_point(); } - -} -} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + process_cpu_clock::time_point process_cpu_clock::now(system::error_code & ec) + { + + tms tm; + clock_t c = ::times(&tm); + if (c == clock_t(-1)) // error + { + if (BOOST_CHRONO_IS_THROWS(ec)) + { + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_clock")); + } else + { + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + return time_point(); + } + } else + { + long factor = chrono_detail::tick_factor(); + if (factor != -1) + { + time_point::rep + r(c * factor, (tm.tms_utime + tm.tms_cutime) * factor, (tm.tms_stime + + tm.tms_cstime) * factor); + return time_point(duration(r)); + } else + { + if (BOOST_CHRONO_IS_THROWS(ec)) + { + boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_clock")); + } else + { + ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + return time_point(); + } + } + } + + } +#endif + + } } diff --git a/3party/boost/boost/chrono/detail/inlined/posix/chrono.hpp b/3party/boost/boost/chrono/detail/inlined/posix/chrono.hpp index a7c3d8999d..e35a7ce267 100644 --- a/3party/boost/boost/chrono/detail/inlined/posix/chrono.hpp +++ b/3party/boost/boost/chrono/detail/inlined/posix/chrono.hpp @@ -17,22 +17,19 @@ namespace boost namespace chrono { - system_clock::time_point system_clock::now() + system_clock::time_point system_clock::now() BOOST_NOEXCEPT { timespec ts; if ( ::clock_gettime( CLOCK_REALTIME, &ts ) ) { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::system_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); } return time_point(duration( static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING system_clock::time_point system_clock::now(system::error_code & ec) { timespec ts; @@ -60,35 +57,33 @@ namespace chrono return time_point(duration( static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } +#endif - std::time_t system_clock::to_time_t(const system_clock::time_point& t) + std::time_t system_clock::to_time_t(const system_clock::time_point& t) BOOST_NOEXCEPT { return static_cast( t.time_since_epoch().count() / 1000000000 ); } - system_clock::time_point system_clock::from_time_t(std::time_t t) + system_clock::time_point system_clock::from_time_t(std::time_t t) BOOST_NOEXCEPT { return time_point(duration(static_cast(t) * 1000000000)); } #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY - steady_clock::time_point steady_clock::now() + steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT { timespec ts; if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) ) { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::steady_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); } return time_point(duration( static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING steady_clock::time_point steady_clock::now(system::error_code & ec) { timespec ts; @@ -117,6 +112,7 @@ namespace chrono static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } #endif +#endif } // namespace chrono } // namespace boost diff --git a/3party/boost/boost/chrono/detail/inlined/posix/process_clock.hpp b/3party/boost/boost/chrono/detail/inlined/posix/process_clock.hpp deleted file mode 100644 index cc5d6f7cd3..0000000000 --- a/3party/boost/boost/chrono/detail/inlined/posix/process_clock.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// boost process_timer.cpp -----------------------------------------------------------// - -// Copyright Beman Dawes 1994, 2006, 2008 -// Copyright Vicente J. Botet Escriba 2009 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/chrono for documentation. - -//--------------------------------------------------------------------------------------// - -#include -#include -#include - -# include -# include - - -namespace boost { namespace chrono { -namespace chrono_detail -{ - inline long tick_factor() // multiplier to convert ticks - // to nanoseconds; -1 if unknown - { - static long factor = 0; - if ( !factor ) - { - if ( (factor = ::sysconf( _SC_CLK_TCK )) <= 0 ) - factor = -1; - else - { - BOOST_ASSERT( factor <= 1000000l ); // doesn't handle large ticks - factor = 1000000l / factor; // compute factor - if ( !factor ) factor = -1; - } - } - return factor; - } -} - - void process_clock::now( process_times & times_, system::error_code & ec ) { - - tms tm; - clock_t c = ::times( &tm ); - if ( c == clock_t(-1) ) // error - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - times_.real = times_.system = times_.user = nanoseconds(-1); - } - } - else - { - times_.real = microseconds(c); - times_.system = microseconds(tm.tms_stime + tm.tms_cstime); - times_.user = microseconds(tm.tms_utime + tm.tms_cutime); - if ( chrono_detail::tick_factor() != -1 ) - { - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - times_.real *= chrono_detail::tick_factor(); - times_.user *= chrono_detail::tick_factor(); - times_.system *= chrono_detail::tick_factor(); - } - else - { - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else - { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); - times_.real = times_.user = times_.system = nanoseconds(-1); - } - } - } - - } -} } diff --git a/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp index aec99ee89e..5d5c4f4806 100644 --- a/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +++ b/3party/boost/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp @@ -14,8 +14,9 @@ #include #include -# include -# include +#include +#include +#include // for clock_gettime namespace boost { namespace chrono { @@ -31,8 +32,8 @@ namespace chrono_detail factor = -1; else { - BOOST_ASSERT( factor <= 1000000l ); // doesn't handle large ticks - factor = 1000000l / factor; // compute factor + BOOST_ASSERT( factor <= 1000000000l ); // doesn't handle large ticks + factor = 1000000000l / factor; // compute factor if ( !factor ) factor = -1; } } @@ -40,10 +41,34 @@ namespace chrono_detail } } -process_real_cpu_clock::time_point process_real_cpu_clock::now( - system::error_code & ec) +process_real_cpu_clock::time_point process_real_cpu_clock::now() BOOST_NOEXCEPT { - + tms tm; + clock_t c = ::times( &tm ); + if ( c == clock_t(-1) ) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + else + { + if ( chrono_detail::tick_factor() != -1 ) + { + return time_point( + nanoseconds(c*chrono_detail::tick_factor())); + } + else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + } + return time_point(); +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING +process_real_cpu_clock::time_point process_real_cpu_clock::now( + system::error_code & ec) +{ + tms tm; clock_t c = ::times( &tm ); if ( c == clock_t(-1) ) // error @@ -51,9 +76,9 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock" )); } else @@ -66,21 +91,21 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( { if ( chrono_detail::tick_factor() != -1 ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } return time_point( - microseconds(c)*chrono_detail::tick_factor()); + nanoseconds(c*chrono_detail::tick_factor())); } else { if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock" )); } else @@ -91,7 +116,32 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( } } } +#endif +process_user_cpu_clock::time_point process_user_cpu_clock::now() BOOST_NOEXCEPT +{ + tms tm; + clock_t c = ::times( &tm ); + if ( c == clock_t(-1) ) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + else + { + if ( chrono_detail::tick_factor() != -1 ) + { + return time_point( + nanoseconds((tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor())); + } + else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + } + return time_point(); +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING process_user_cpu_clock::time_point process_user_cpu_clock::now( system::error_code & ec) { @@ -102,9 +152,9 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock" )); } else @@ -117,21 +167,21 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( { if ( chrono_detail::tick_factor() != -1 ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } return time_point( - microseconds(tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor()); + nanoseconds((tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor())); } else { if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock" )); } else @@ -142,9 +192,35 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( } } } +#endif +process_system_cpu_clock::time_point process_system_cpu_clock::now() BOOST_NOEXCEPT +{ + tms tm; + clock_t c = ::times( &tm ); + if ( c == clock_t(-1) ) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return time_point(); + } + else + { + if ( chrono_detail::tick_factor() != -1 ) + { + return time_point( + nanoseconds((tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor())); + } + else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return time_point(); + } + } +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING process_system_cpu_clock::time_point process_system_cpu_clock::now( - system::error_code & ec) + system::error_code & ec) { tms tm; clock_t c = ::times( &tm ); @@ -153,9 +229,9 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock" )); } else @@ -168,21 +244,21 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( { if ( chrono_detail::tick_factor() != -1 ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } return time_point( - microseconds(tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()); + nanoseconds((tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor())); } else { if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock" )); } else @@ -193,12 +269,38 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( } } } +#endif -process_cpu_clock::time_point process_cpu_clock::now( - system::error_code & ec ) +process_cpu_clock::time_point process_cpu_clock::now() BOOST_NOEXCEPT +{ + tms tm; + clock_t c = ::times( &tm ); + if ( c == clock_t(-1) ) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + else + { + if ( chrono_detail::tick_factor() != -1 ) + { + time_point::rep r( + 1000*c*chrono_detail::tick_factor(), + 1000*(tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(), + 1000*(tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()); + return time_point(duration(r)); + } + else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + } + return time_point(); +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING +process_cpu_clock::time_point process_cpu_clock::now( + system::error_code & ec ) { - - tms tm; clock_t c = ::times( &tm ); if ( c == clock_t(-1) ) // error @@ -206,9 +308,9 @@ process_cpu_clock::time_point process_cpu_clock::now( if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_clock" )); } else @@ -222,9 +324,9 @@ process_cpu_clock::time_point process_cpu_clock::now( if ( chrono_detail::tick_factor() != -1 ) { time_point::rep r( - c*chrono_detail::tick_factor(), - (tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(), - (tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()); + 1000*c*chrono_detail::tick_factor(), + 1000*(tm.tms_utime + tm.tms_cutime)*chrono_detail::tick_factor(), + 1000*(tm.tms_stime + tm.tms_cstime)*chrono_detail::tick_factor()); return time_point(duration(r)); } else @@ -232,9 +334,9 @@ process_cpu_clock::time_point process_cpu_clock::now( if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_clock" )); } else @@ -244,7 +346,8 @@ process_cpu_clock::time_point process_cpu_clock::now( } } } - + } +#endif } } diff --git a/3party/boost/boost/chrono/detail/inlined/posix/thread_clock.hpp b/3party/boost/boost/chrono/detail/inlined/posix/thread_clock.hpp index 14078a3c50..42a544a0d6 100644 --- a/3party/boost/boost/chrono/detail/inlined/posix/thread_clock.hpp +++ b/3party/boost/boost/chrono/detail/inlined/posix/thread_clock.hpp @@ -15,11 +15,12 @@ #include # include +# include # include namespace boost { namespace chrono { - thread_clock::time_point thread_clock::now( ) + thread_clock::time_point thread_clock::now( ) BOOST_NOEXCEPT { struct timespec ts; #if defined CLOCK_THREAD_CPUTIME_ID @@ -35,11 +36,7 @@ namespace boost { namespace chrono { if ( ::clock_gettime( clock_id, &ts ) ) #endif { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::thread_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); } // transform to nanoseconds @@ -47,7 +44,9 @@ namespace boost { namespace chrono { static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } - thread_clock::time_point thread_clock::now( system::error_code & ec ) + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + thread_clock::time_point thread_clock::now( system::error_code & ec ) { struct timespec ts; #if defined CLOCK_THREAD_CPUTIME_ID @@ -66,9 +65,9 @@ namespace boost { namespace chrono { if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::thread_clock" )); } else @@ -77,7 +76,7 @@ namespace boost { namespace chrono { return time_point(); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } @@ -86,4 +85,5 @@ namespace boost { namespace chrono { static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } +#endif } } diff --git a/3party/boost/boost/chrono/detail/inlined/process_clock.hpp b/3party/boost/boost/chrono/detail/inlined/process_clock.hpp deleted file mode 100644 index de7e765bfc..0000000000 --- a/3party/boost/boost/chrono/detail/inlined/process_clock.hpp +++ /dev/null @@ -1,54 +0,0 @@ -// boost process_timer.cpp -----------------------------------------------------------// - -// Copyright Beman Dawes 1994, 2006, 2008 -// Copyright 2009 Vicente J. Botet Escriba - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/chrono for documentation. - -//--------------------------------------------------------------------------------------// -#ifndef BOOST_CHRONO_DETAIL_INLINED_PROCESS_CLOCK_HPP -#define BOOST_CHRONO_DETAIL_INLINED_PROCESS_CLOCK_HPP - - -#include -#include -#include -#include -#include - -//----------------------------------------------------------------------------// -// Windows // -//----------------------------------------------------------------------------// -#if defined(BOOST_CHRONO_WINDOWS_API) -#include - -//----------------------------------------------------------------------------// -// Mac // -//----------------------------------------------------------------------------// -#elif defined(BOOST_CHRONO_MAC_API) -#include - -//----------------------------------------------------------------------------// -// POSIX // -//----------------------------------------------------------------------------// -#elif defined(BOOST_CHRONO_POSIX_API) -#include - -#endif // POSIX -namespace boost { namespace chrono { - - void process_clock::now( time_points & tps, system::error_code & ec ) - { - process_times t; - process_clock::now(t,ec); - tps.real=process_clock::time_point(t.real); - tps.user=process_clock::time_point(t.user); - tps.system=process_clock::time_point(t.system); - } - -}} - -#endif diff --git a/3party/boost/boost/chrono/detail/inlined/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/process_cpu_clocks.hpp index 6efe93cded..d37f6754cb 100644 --- a/3party/boost/boost/chrono/detail/inlined/process_cpu_clocks.hpp +++ b/3party/boost/boost/chrono/detail/inlined/process_cpu_clocks.hpp @@ -13,6 +13,8 @@ #include +#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) + #include #include #include @@ -37,44 +39,7 @@ #include #endif // POSIX -#if 0 -namespace boost { namespace chrono { - process_real_cpu_clock::time_point process_real_cpu_clock::now( - system::error_code & ec) - { - process_times t; - process_clock::now(t, ec); - return process_real_cpu_clock::time_point(t.real); - } - - process_user_cpu_clock::time_point process_user_cpu_clock::now( - system::error_code & ec) - { - process_times t; - process_clock::now(t, ec); - return process_user_cpu_clock::time_point(t.user); - } - - process_system_cpu_clock::time_point process_system_cpu_clock::now( - system::error_code & ec) - { - process_times t; - process_clock::now(t, ec); - return process_system_cpu_clock::time_point(t.system); - } - - process_cpu_clock::time_point process_cpu_clock::now( - system::error_code & ec ) - { - process_times t; - process_clock::now(t,ec); - time_point::rep r(t.real.count(), t.user.count(), t.system.count()); - return time_point(duration(r)); - } - -} // namespace chrono -} // namespace boost #endif #endif diff --git a/3party/boost/boost/chrono/detail/inlined/run_timer.hpp b/3party/boost/boost/chrono/detail/inlined/run_timer.hpp deleted file mode 100644 index a5b1df371a..0000000000 --- a/3party/boost/boost/chrono/detail/inlined/run_timer.hpp +++ /dev/null @@ -1,193 +0,0 @@ -// boost run_timer.cpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 1994, 2006, 2008 -// Copyright 2009-2010 Vicente J. Botet Escriba - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/chrono for documentation. - -//--------------------------------------------------------------------------------------// -#ifndef BOOST_CHRONO_DETAIL_INLINED_RUN_TIMER_HPP -#define BOOST_CHRONO_DETAIL_INLINED_RUN_TIMER_HPP - -#include -#include -#include -#include -#include -#include -#include - - -namespace boost -{ -namespace chrono -{ -namespace chrono_detail -{ - BOOST_CHRONO_INLINE - const char * default_format() { - return "\nreal %rs, cpu %cs (%p%), user %us, system %ss\n"; - } - - BOOST_CHRONO_INLINE - void show_time( const boost::chrono::process_times & times, - const char * format, int places, std::ostream & os ) - // NOTE WELL: Will truncate least-significant digits to LDBL_DIG, which may - // be as low as 10, although will be 15 for many common platforms. - { - if ( times.real < nanoseconds(0) ) return; - if ( places > 9 ) - places = 9; // sanity check - else if ( places < 0 ) - places = 0; - - boost::io::ios_flags_saver ifs( os ); - os.setf( std::ios_base::fixed, std::ios_base::floatfield ); - boost::io::ios_precision_saver ips( os ); - os.precision( places ); - - nanoseconds total = times.system + times.user; - - for ( ; *format; ++format ) - { - if ( *format != '%' || !*(format+1) || !std::strchr("rcpus", *(format+1)) ) - os << *format; - else - { - ++format; - switch ( *format ) - { - case 'r': - os << duration(times.real).count(); - break; - case 'u': - os << duration(times.user).count(); - break; - case 's': - os << duration(times.system).count(); - break; - case 'c': - os << duration(total).count(); - break; - case 'p': - { - boost::io::ios_precision_saver ips( os ); - os.precision( 1 ); - if ( times.real.count() && total.count() ) - os << duration(total).count() - /duration(times.real).count() * 100.0; - else - os << 0.0; - } - break; - default: - BOOST_ASSERT(0 && "run_timer internal logic error"); - } - } - } - } - -} - - - - run_timer::run_timer( system::error_code & ec ) - : m_places(m_default_places), m_os(m_cout()) { start(ec); } - run_timer::run_timer( std::ostream & os, - system::error_code & ec ) - : m_places(m_default_places), m_os(os) { start(ec); } - - run_timer::run_timer( const std::string & format, - system::error_code & ec ) - : m_places(m_default_places), m_os(m_cout()), m_format(format) { start(ec); } - run_timer::run_timer( std::ostream & os, const std::string & format, - system::error_code & ec ) - : m_places(m_default_places), m_os(os), m_format(format) { start(ec); } - - run_timer::run_timer( const std::string & format, int places, - system::error_code & ec ) - : m_places(places), m_os(m_cout()), m_format(format) { start(ec); } - run_timer::run_timer( std::ostream & os, const std::string & format, - int places, system::error_code & ec ) - : m_places(places), m_os(os), m_format(format) { start(ec); } - - run_timer::run_timer( int places, - system::error_code & ec ) - : m_places(places), m_os(m_cout()) { start(ec); } - run_timer::run_timer( std::ostream & os, int places, - system::error_code & ec ) - : m_places(places), m_os(os) { start(ec); } - - run_timer::run_timer( int places, const std::string & format, - system::error_code & ec ) - : m_places(places), m_os(m_cout()), m_format(format) { start(ec); } - run_timer::run_timer( std::ostream & os, int places, const std::string & format, - system::error_code & ec ) - : m_places(places), m_os(os), m_format(format) { start(ec); } - - // run_timer::report -------------------------------------------------------------// - - void run_timer::report( system::error_code & ec ) - { - m_reported = true; - if ( m_format.empty() ) m_format = chrono_detail::default_format(); - - process_times times; - elapsed( times, ec ); - if (ec) return; - - if ( BOOST_CHRONO_IS_THROWS(ec) ) - { - chrono_detail::show_time( times, m_format.c_str(), m_places, m_os ); - } - else // non-throwing - { - try - { - chrono_detail::show_time( times, m_format.c_str(), m_places, m_os ); - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - } - - catch (...) // eat any exceptions - { - BOOST_ASSERT( 0 && "error reporting not fully implemented yet" ); - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - errno, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::run_timer" )); - } - else - { - ec.assign(system::errc::success, BOOST_CHRONO_SYSTEM_CATEGORY); - } - } - } - } - - // run_timer::test_report --------------------------------------------------------// - - void run_timer::test_report( duration real_, duration user_, duration system_ ) - { - if ( m_format.empty() ) m_format = chrono_detail::default_format(); - - process_times times; - times.real = real_; - times.user = user_; - times.system = system_; - - chrono_detail::show_time( times, m_format.c_str(), m_places, m_os ); - } - - } // namespace chrono -} // namespace boost - -#endif diff --git a/3party/boost/boost/chrono/detail/inlined/run_timer_static.hpp b/3party/boost/boost/chrono/detail/inlined/run_timer_static.hpp deleted file mode 100644 index a460284f55..0000000000 --- a/3party/boost/boost/chrono/detail/inlined/run_timer_static.hpp +++ /dev/null @@ -1,37 +0,0 @@ -// boost run_timer_static.cpp --------------------------------------------------------// - -// Copyright Beman Dawes 2008 -// Copyright 2009-2010 Vicente J. Botet Escriba - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/chrono for documentation. - -//--------------------------------------------------------------------------------------// - -// This function is defined in a separate translation so that it will not be linked -// in except if actually used. This is more efficient because header is -// required, and it incurs the cost of the standard stream objects even if they are -// not actually used. - -//--------------------------------------------------------------------------------------// -#ifndef BOOST_CHRONO_DETAIL_INLINED_RUN_TIMER_STATIC_HPP -#define BOOST_CHRONO_DETAIL_INLINED_RUN_TIMER_STATIC_HPP - - -#include -#include -#include - -namespace boost -{ - namespace chrono - { - - std::ostream & run_timer::m_cout() { return std::cout; } - - } // namespace chrono -} // namespace boost - -#endif diff --git a/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp b/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp index dbb589e8ef..75160dba97 100644 --- a/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp +++ b/3party/boost/boost/chrono/detail/inlined/win/chrono.hpp @@ -23,7 +23,7 @@ namespace chrono namespace chrono_detail { - BOOST_CHRONO_INLINE double get_nanosecs_per_tic() + BOOST_CHRONO_INLINE double get_nanosecs_per_tic() BOOST_NOEXCEPT { boost::detail::win32::LARGE_INTEGER_ freq; if ( !boost::detail::win32::QueryPerformanceFrequency( &freq ) ) @@ -33,7 +33,7 @@ namespace chrono_detail } - steady_clock::time_point steady_clock::now() + steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT { static double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic(); @@ -41,15 +41,8 @@ namespace chrono_detail if ( (nanosecs_per_tic <= 0.0L) || (!boost::detail::win32::QueryPerformanceCounter( &pcount )) ) { - boost::detail::win32::DWORD_ cause = - (nanosecs_per_tic <= 0.0L - ? ERROR_NOT_SUPPORTED - : boost::detail::win32::GetLastError()); - boost::throw_exception( - system::system_error( - cause, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::steady_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return steady_clock::time_point(); } return steady_clock::time_point(steady_clock::duration( @@ -57,6 +50,7 @@ namespace chrono_detail } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING steady_clock::time_point steady_clock::now( system::error_code & ec ) { static double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic(); @@ -90,9 +84,10 @@ namespace chrono_detail return time_point(duration( static_cast(nanosecs_per_tic * pcount.QuadPart))); } +#endif BOOST_CHRONO_INLINE - system_clock::time_point system_clock::now() + system_clock::time_point system_clock::now() BOOST_NOEXCEPT { boost::detail::win32::FILETIME_ ft; #if defined(UNDER_CE) @@ -107,6 +102,7 @@ namespace chrono_detail (static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime)); } +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING BOOST_CHRONO_INLINE system_clock::time_point system_clock::now( system::error_code & ec ) { @@ -126,9 +122,10 @@ namespace chrono_detail return time_point(duration( (static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime)); } +#endif BOOST_CHRONO_INLINE - std::time_t system_clock::to_time_t(const system_clock::time_point& t) + std::time_t system_clock::to_time_t(const system_clock::time_point& t) BOOST_NOEXCEPT { __int64 temp = t.time_since_epoch().count(); @@ -143,7 +140,7 @@ namespace chrono_detail } BOOST_CHRONO_INLINE - system_clock::time_point system_clock::from_time_t(std::time_t t) + system_clock::time_point system_clock::from_time_t(std::time_t t) BOOST_NOEXCEPT { __int64 temp = t; temp *= 10000000; diff --git a/3party/boost/boost/chrono/detail/inlined/win/process_clock.hpp b/3party/boost/boost/chrono/detail/inlined/win/process_clock.hpp deleted file mode 100644 index 6a3d221748..0000000000 --- a/3party/boost/boost/chrono/detail/inlined/win/process_clock.hpp +++ /dev/null @@ -1,80 +0,0 @@ -// boost process_timer.cpp -----------------------------------------------------------// - -// Copyright Beman Dawes 1994, 2006, 2008 -// Copyright 2009-2010 Vicente J. Botet Escriba - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/chrono for documentation. - -//--------------------------------------------------------------------------------------// -#ifndef BOOST_CHRONO_DETAIL_INLINED_WIN_PROCESS_CLOCK_HPP -#define BOOST_CHRONO_DETAIL_INLINED_WIN_PROCESS_CLOCK_HPP - -#include -#include -#include -#include - -#include -#include -#include - -namespace boost -{ -namespace chrono -{ - -void process_clock::now( process_times & times_, system::error_code & ec ) -{ - - // note that Windows uses 100 nanosecond ticks for FILETIME - boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; - - times_.real = duration( steady_clock::now().time_since_epoch().count() ); - - #ifdef UNDER_CE - // Windows CE does not support GetProcessTimes - assert( 0 && "GetProcessTimes not supported under Windows CE" ); - times_.real = times_.system = times_.user = nanoseconds(-1); - #else - if ( boost::detail::win32::GetProcessTimes( - boost::detail::win32::GetCurrentProcess(), &creation, &exit, - &system_time, &user_time ) ) - { - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - times_.user = duration( - ((static_cast(user_time.dwHighDateTime) << 32) - | user_time.dwLowDateTime) * 100 ); - - times_.system = duration( - ((static_cast(system_time.dwHighDateTime) << 32) - | system_time.dwLowDateTime) * 100 ); - } - else - { - boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - cause, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_clock" )); - } - else - { - ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); - times_.real = times_.system = times_.user = nanoseconds(-1); - } - } - #endif -} -} // namespace chrono -} // namespace boost - -#endif diff --git a/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp b/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp index 323edd37b3..1b7e67a120 100644 --- a/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp +++ b/3party/boost/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp @@ -13,9 +13,10 @@ #define BOOST_CHRONO_DETAIL_INLINED_WIN_PROCESS_CLOCK_HPP #include -#include +//#include #include #include +#include #include #include @@ -26,65 +27,79 @@ namespace boost namespace chrono { +process_real_cpu_clock::time_point process_real_cpu_clock::now() BOOST_NOEXCEPT +{ + clock_t c = ::clock(); + if ( c == clock_t(-1) ) // error + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } + typedef ratio_divide >::type R; + return time_point( + duration(static_cast(c)*R::num/R::den) + ); +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING process_real_cpu_clock::time_point process_real_cpu_clock::now( - system::error_code & ec) + system::error_code & ec) +{ + clock_t c = ::clock(); + if ( c == clock_t(-1) ) // error + { + boost::throw_exception( + system::system_error( + errno, + BOOST_CHRONO_SYSTEM_CATEGORY, + "chrono::process_real_cpu_clock" )); + } + if (!BOOST_CHRONO_IS_THROWS(ec)) + { + ec.clear(); + } + typedef ratio_divide >::type R; + return time_point( + duration(static_cast(c)*R::num/R::den) + ); +} +#endif + +process_user_cpu_clock::time_point process_user_cpu_clock::now() BOOST_NOEXCEPT { // note that Windows uses 100 nanosecond ticks for FILETIME boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; - #ifdef UNDER_CE - // Windows CE does not support GetProcessTimes - assert( 0 && "GetProcessTimes not supported under Windows CE" ); - return time_point(); - #else if ( boost::detail::win32::GetProcessTimes( boost::detail::win32::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) - { - ec.clear(); - } - return time_point(steady_clock::now().time_since_epoch()); + return time_point(duration( + ((static_cast(user_time.dwHighDateTime) << 32) + | user_time.dwLowDateTime) * 100 + )); } else { - boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) - { - boost::throw_exception( - system::system_error( - cause, - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::process_real_cpu_clock" )); - } - else - { - ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); - return time_point(); - } + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return time_point(); } - #endif } + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING process_user_cpu_clock::time_point process_user_cpu_clock::now( - system::error_code & ec) + system::error_code & ec) { // note that Windows uses 100 nanosecond ticks for FILETIME boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; - #ifdef UNDER_CE - // Windows CE does not support GetProcessTimes - assert( 0 && "GetProcessTimes not supported under Windows CE" ); - return time_point(); - #else if ( boost::detail::win32::GetProcessTimes( boost::detail::win32::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } @@ -96,40 +111,60 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( else { boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) + if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + cause, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock" )); - } - else + } + else { ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); return time_point(); } } - #endif } -process_system_cpu_clock::time_point process_system_cpu_clock::now( - system::error_code & ec) +#endif + +process_system_cpu_clock::time_point process_system_cpu_clock::now() BOOST_NOEXCEPT { // note that Windows uses 100 nanosecond ticks for FILETIME boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; - #ifdef UNDER_CE - // Windows CE does not support GetProcessTimes - assert( 0 && "GetProcessTimes not supported under Windows CE" ); - return time_point(); - #else if ( boost::detail::win32::GetProcessTimes( boost::detail::win32::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + return time_point(duration( + ((static_cast(system_time.dwHighDateTime) << 32) + | system_time.dwLowDateTime) * 100 + )); + } + else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return time_point(); + } + +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING +process_system_cpu_clock::time_point process_system_cpu_clock::now( + system::error_code & ec) +{ + + // note that Windows uses 100 nanosecond ticks for FILETIME + boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; + + if ( boost::detail::win32::GetProcessTimes( + boost::detail::win32::GetCurrentProcess(), &creation, &exit, + &system_time, &user_time ) ) + { + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } @@ -141,74 +176,100 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( else { boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) + if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + cause, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock" )); - } - else + } + else { ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); return time_point(); } } - #endif - + } -process_cpu_clock::time_point process_cpu_clock::now( - system::error_code & ec ) +#endif + +process_cpu_clock::time_point process_cpu_clock::now() BOOST_NOEXCEPT { // note that Windows uses 100 nanosecond ticks for FILETIME boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; - #ifdef UNDER_CE - // Windows CE does not support GetProcessTimes - assert( 0 && "GetProcessTimes not supported under Windows CE" ); - return time_point(); - #else if ( boost::detail::win32::GetProcessTimes( boost::detail::win32::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + time_point::rep r(process_real_cpu_clock::now().time_since_epoch().count() + , + ((static_cast(user_time.dwHighDateTime) << 32) + | user_time.dwLowDateTime + ) * 100, + ((static_cast(system_time.dwHighDateTime) << 32) + | system_time.dwLowDateTime + ) * 100 + ); + return time_point(duration(r)); + } + else + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return time_point(); + } + +} + +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING +process_cpu_clock::time_point process_cpu_clock::now( + system::error_code & ec ) +{ + + // note that Windows uses 100 nanosecond ticks for FILETIME + boost::detail::win32::FILETIME_ creation, exit, user_time, system_time; + + if ( boost::detail::win32::GetProcessTimes( + boost::detail::win32::GetCurrentProcess(), &creation, &exit, + &system_time, &user_time ) ) + { + if (!BOOST_CHRONO_IS_THROWS(ec)) { ec.clear(); } - time_point::rep r( - steady_clock::now().time_since_epoch().count(), + time_point::rep r(process_real_cpu_clock::now().time_since_epoch().count() + , ((static_cast(user_time.dwHighDateTime) << 32) | user_time.dwLowDateTime - ) * 100, + ) * 100, ((static_cast(system_time.dwHighDateTime) << 32) | system_time.dwLowDateTime - ) * 100 + ) * 100 ); return time_point(duration(r)); } else { boost::detail::win32::DWORD_ cause = boost::detail::win32::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) + if (BOOST_CHRONO_IS_THROWS(ec)) { boost::throw_exception( - system::system_error( - cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + system::system_error( + cause, + BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_cpu_clock" )); - } - else + } + else { ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); return time_point(); } } - #endif } +#endif } // namespace chrono } // namespace boost diff --git a/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp b/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp index da09aa06d8..8ca1506ce5 100644 --- a/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp +++ b/3party/boost/boost/chrono/detail/inlined/win/thread_clock.hpp @@ -24,6 +24,7 @@ namespace boost namespace chrono { +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING thread_clock::time_point thread_clock::now( system::error_code & ec ) { // note that Windows uses 100 nanosecond ticks for FILETIME @@ -65,8 +66,9 @@ thread_clock::time_point thread_clock::now( system::error_code & ec ) } } } +#endif -thread_clock::time_point thread_clock::now( ) +thread_clock::time_point thread_clock::now() BOOST_NOEXCEPT { // note that Windows uses 100 nanosecond ticks for FILETIME @@ -85,15 +87,11 @@ thread_clock::time_point thread_clock::now( ) | system_time.dwLowDateTime) * 100 ); return time_point(system+user); - } else { - boost::throw_exception( - system::system_error( - boost::detail::win32::GetLastError(), - BOOST_CHRONO_SYSTEM_CATEGORY, - "chrono::thread_clock" )); + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + return time_point(); } } diff --git a/3party/boost/boost/chrono/detail/is_evenly_divisible_by.hpp b/3party/boost/boost/chrono/detail/is_evenly_divisible_by.hpp index 79062f5946..960a208a75 100644 --- a/3party/boost/boost/chrono/detail/is_evenly_divisible_by.hpp +++ b/3party/boost/boost/chrono/detail/is_evenly_divisible_by.hpp @@ -11,16 +11,18 @@ #include #include -#include - +#include namespace boost { namespace chrono { namespace chrono_detail { +// template +// struct is_evenly_divisible_by : public boost::mpl::bool_ < ratio_divide::type::den == 1 > +// {}; template - struct is_evenly_divisible_by : public boost::mpl::bool_ < ratio_divide::type::den == 1 > - {}; + struct is_evenly_divisible_by : public boost::ratio_detail::is_evenly_divisible_by + {}; } // namespace chrono_detail } // namespace detail diff --git a/3party/boost/boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp b/3party/boost/boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp new file mode 100644 index 0000000000..491c1d64a0 --- /dev/null +++ b/3party/boost/boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp @@ -0,0 +1,44 @@ +// is_evenly_divisible_by.hpp --------------------------------------------------------------// + +// Copyright 2009-2010 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + +#ifndef BOOST_CHRONO_DETAIL_NO_WARNING_SIGNED_UNSIGNED_CMP_HPP +#define BOOST_CHRONO_DETAIL_NO_WARNING_SIGNED_UNSIGNED_CMP_HPP + +// +// We simply cannot include this header on gcc without getting copious warnings of the kind: +// +//../../../boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp:37: warning: comparison between signed and unsigned integer expressions +// +// And yet there is no other reasonable implementation, so we declare this a system header +// to suppress these warnings. +// + +#if defined(__GNUC__) && (__GNUC__ >= 4) +#pragma GCC system_header +#endif + +namespace boost { +namespace chrono { +namespace detail { + + template + bool lt(T t, U u) + { + return t < u; + } + + template + bool gt(T t, U u) + { + return t > u; + } + +} // namespace detail +} // namespace detail +} // namespace chrono + +#endif // BOOST_CHRONO_DETAIL_NO_WARNING_SIGNED_UNSIGNED_CMP_HPP diff --git a/3party/boost/boost/chrono/detail/scan_keyword.hpp b/3party/boost/boost/chrono/detail/scan_keyword.hpp index 3b7105dea0..7c3ba6e2af 100644 --- a/3party/boost/boost/chrono/detail/scan_keyword.hpp +++ b/3party/boost/boost/chrono/detail/scan_keyword.hpp @@ -23,14 +23,15 @@ #include #include #include +#include namespace boost { using interprocess::unique_ptr; - + namespace chrono { namespace chrono_detail { -inline void free_aux(void* ptr) { free(ptr); } +inline void free_aux(void* ptr) { free(ptr); } // scan_keyword // Scans [b, e) until a match is found in the basic_strings range @@ -65,13 +66,13 @@ scan_keyword(InputIterator& b, InputIterator e, unsigned char statbuf[100]; unsigned char* status = statbuf; // Change free by free_aux to avoid - // Error: Could not find a match for boost::interprocess::unique_ptr::unique_ptr(int, extern "C" void(void*)) + // Error: Could not find a match for boost::interprocess::unique_ptr::unique_ptr(int, extern "C" void(void*)) unique_ptr stat_hold(0, free_aux); if (nkw > sizeof(statbuf)) { status = (unsigned char*)malloc(nkw); if (status == 0) - throw std::bad_alloc(); + throw_exception(std::bad_alloc()); stat_hold.reset(status); } size_t n_might_match = nkw; // At this point, any keyword might match diff --git a/3party/boost/boost/chrono/detail/system.hpp b/3party/boost/boost/chrono/detail/system.hpp index f8a40f12a8..0dcffe8521 100644 --- a/3party/boost/boost/chrono/detail/system.hpp +++ b/3party/boost/boost/chrono/detail/system.hpp @@ -6,6 +6,8 @@ #ifndef BOOST_CHRONO_DETAIL_SYSTEM_HPP #define BOOST_CHRONO_DETAIL_SYSTEM_HPP +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + #include #include @@ -15,7 +17,7 @@ #define BOOST_CHRONO_SYSTEM_CATEGORY boost::system::system_category() #endif -#ifdef BOOST_SYSTEM_NO_DEPRECATED +#ifdef BOOST_SYSTEM_NO_DEPRECATED #define BOOST_CHRONO_THROWS boost::throws() #define BOOST_CHRONO_IS_THROWS(EC) (&EC==&boost::throws()) #else @@ -24,3 +26,4 @@ #endif #endif +#endif diff --git a/3party/boost/boost/chrono/duration.hpp b/3party/boost/boost/chrono/duration.hpp index 0268757b55..e32357cc72 100644 --- a/3party/boost/boost/chrono/duration.hpp +++ b/3party/boost/boost/chrono/duration.hpp @@ -2,7 +2,7 @@ // Copyright 2008 Howard Hinnant // Copyright 2008 Beman Dawes -// Copyright 2009-2010 Vicente J. Botet Escriba +// Copyright 2009-2011 Vicente J. Botet Escriba // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -58,6 +58,10 @@ time2_demo contained this comment: #define BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_TIME_POINT_MUST_BE_A_BOOST_CHRONO_DURATION "Second template parameter of time_point must be a boost::chrono::duration" #endif +#ifndef BOOST_CHRONO_HEADER_ONLY +// this must occur after all of the includes and before any code appears: +#include // must be the last #include +#endif //----------------------------------------------------------------------------// // // @@ -229,7 +233,7 @@ namespace detail template struct duration_cast_aux { - BOOST_CHRONO_CONSTEXPR ToDuration operator()(const FromDuration& fd) const + BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const { return ToDuration(static_cast(fd.count())); } @@ -244,7 +248,7 @@ namespace detail template struct duration_cast_aux { - BOOST_CHRONO_CONSTEXPR ToDuration operator()(const FromDuration& fd) const + BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const { typedef typename common_type< typename ToDuration::rep, @@ -255,7 +259,7 @@ namespace detail } }; - // When the denomenator of FromPeriod / ToPeriod is 1, then all we need to do is + // When the denominator of FromPeriod / ToPeriod is 1, then all we need to do is // multiply by the numerator of FromPeriod / ToPeriod. The common_type of // the two representations is used for the intermediate computation before // static_cast'ing to the destination. @@ -263,7 +267,7 @@ namespace detail template struct duration_cast_aux { - BOOST_CHRONO_CONSTEXPR ToDuration operator()(const FromDuration& fd) const + BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const { typedef typename common_type< typename ToDuration::rep, @@ -283,7 +287,7 @@ namespace detail template struct duration_cast_aux { - BOOST_CHRONO_CONSTEXPR ToDuration operator()(const FromDuration& fd) const + BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const { typedef typename common_type< typename ToDuration::rep, @@ -306,7 +310,7 @@ namespace detail Period::num == 1, Period::den == 1 > Aux; - BOOST_CHRONO_CONSTEXPR ToDuration operator()(const FromDuration& fd) const + BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const { return Aux()(fd); } @@ -376,13 +380,13 @@ namespace detail { template struct duration_values { - static BOOST_CHRONO_CONSTEXPR Rep zero() {return Rep(0);} - static BOOST_CHRONO_CONSTEXPR Rep max BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CONSTEXPR Rep zero() {return Rep(0);} + static BOOST_CONSTEXPR Rep max BOOST_PREVENT_MACRO_SUBSTITUTION () { return (std::numeric_limits::max)(); } - static BOOST_CHRONO_CONSTEXPR Rep min BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CONSTEXPR Rep min BOOST_PREVENT_MACRO_SUBSTITUTION () { return detail::numeric_limits::lowest(); } @@ -429,10 +433,10 @@ namespace chrono { rep rep_; public: - BOOST_CHRONO_CONSTEXPR - duration() : rep_(duration_values::zero()) { } + BOOST_CONSTEXPR + duration() : rep_(duration_values::zero()) { } template - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR explicit duration(const Rep2& r , typename boost::enable_if < mpl::and_ < @@ -446,8 +450,9 @@ namespace chrono { > > >::type* = 0 - ) : rep_(r) { } - ~duration() {} //= default; + ) : rep_(r) { } + //~duration() {} //= default; + BOOST_CONSTEXPR duration(const duration& rhs) : rep_(rhs.rep_) {} // = default; duration& operator=(const duration& rhs) // = default; { @@ -457,7 +462,7 @@ namespace chrono { // conversions template - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR duration(const duration& d , typename boost::enable_if < mpl::or_ < @@ -473,14 +478,14 @@ namespace chrono { // observer - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR rep count() const {return rep_;} // arithmetic - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR duration operator+() const {return *this;} - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR duration operator-() const {return duration(-rep_);} duration& operator++() {++rep_; return *this;} duration operator++(int) {return duration(rep_++);} @@ -505,15 +510,15 @@ namespace chrono { } // 20.9.3.4 duration special values [time.duration.special] - static BOOST_CHRONO_CONSTEXPR duration zero() + static BOOST_CONSTEXPR duration zero() { return duration(duration_values::zero()); } - static BOOST_CHRONO_CONSTEXPR duration min BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CONSTEXPR duration min BOOST_PREVENT_MACRO_SUBSTITUTION () { return duration((duration_values::min)()); } - static BOOST_CHRONO_CONSTEXPR duration max BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CONSTEXPR duration max BOOST_PREVENT_MACRO_SUBSTITUTION () { return duration((duration_values::max)()); } @@ -526,35 +531,33 @@ namespace chrono { // Duration + template - inline + inline BOOST_CONSTEXPR typename common_type, duration >::type operator+(const duration& lhs, const duration& rhs) { - typename common_type, - duration >::type result = lhs; - result += rhs; - return result; + typedef typename common_type, + duration >::type CD; + return CD(CD(lhs).count()+CD(rhs).count()); } // Duration - template - inline + inline BOOST_CONSTEXPR typename common_type, duration >::type operator-(const duration& lhs, const duration& rhs) { - typename common_type, - duration >::type result = lhs; - result -= rhs; - return result; + typedef typename common_type, + duration >::type CD; + return CD(CD(lhs).count()-CD(rhs).count()); } // Duration * template - inline + inline BOOST_CONSTEXPR typename boost::enable_if < mpl::and_ < boost::is_convertible::type>, @@ -564,14 +567,13 @@ namespace chrono { >::type operator*(const duration& d, const Rep2& s) { - typedef typename common_type::type CR; - duration r = d; - r *= static_cast(s); - return r; + typedef typename common_type::type CR; + typedef duration CD; + return CD(CD(d).count()*static_cast(s)); } template - inline + inline BOOST_CONSTEXPR typename boost::enable_if < mpl::and_ < boost::is_convertible::type>, @@ -587,7 +589,7 @@ namespace chrono { // Duration / template - inline + inline BOOST_CONSTEXPR typename boost::disable_if , typename boost::chrono::detail::duration_divide_result< duration, Rep2>::type @@ -595,13 +597,13 @@ namespace chrono { operator/(const duration& d, const Rep2& s) { typedef typename common_type::type CR; - duration r = d; - r /= static_cast(s); - return r; + typedef duration CD; + + return CD(CD(d).count()/static_cast(s)); } template - inline + inline BOOST_CONSTEXPR typename common_type::type operator/(const duration& lhs, const duration& rhs) { @@ -612,7 +614,7 @@ namespace chrono { #ifdef BOOST_CHRONO_EXTENSIONS template - inline + inline BOOST_CONSTEXPR typename boost::disable_if , typename boost::chrono::detail::duration_divide_result2< Rep1, duration >::type @@ -620,13 +622,15 @@ namespace chrono { operator/(const Rep1& s, const duration& d) { typedef typename common_type::type CR; - duration r = d; - return static_cast(s)/r.count(); + typedef duration CD; + + return static_cast(s)/CD(d).count(); } #endif // Duration % template + inline BOOST_CONSTEXPR typename boost::disable_if , typename boost::chrono::detail::duration_modulo_result< duration, Rep2>::type @@ -634,20 +638,20 @@ namespace chrono { operator%(const duration& d, const Rep2& s) { typedef typename common_type::type CR; - duration r = d; - r %= static_cast(s); - return r; + typedef duration CD; + + return CD(CD(d).count()%static_cast(s)); } template + inline BOOST_CONSTEXPR typename common_type, duration >::type operator%(const duration& lhs, const duration& rhs) { typedef typename common_type, duration >::type CD; - CD r(lhs); - r%=CD(rhs); - return r; + + return CD(CD(lhs).count()%CD(rhs).count()); } @@ -660,7 +664,7 @@ namespace detail template struct duration_eq { - bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) + BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) { typedef typename common_type::type CD; return CD(lhs).count() == CD(rhs).count(); @@ -670,7 +674,7 @@ namespace detail template struct duration_eq { - bool operator()(const LhsDuration& lhs, const LhsDuration& rhs) + BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const LhsDuration& rhs) { return lhs.count() == rhs.count(); } @@ -679,7 +683,7 @@ namespace detail template struct duration_lt { - bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) + BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) { typedef typename common_type::type CD; return CD(lhs).count() < CD(rhs).count(); @@ -689,7 +693,7 @@ namespace detail template struct duration_lt { - bool operator()(const LhsDuration& lhs, const LhsDuration& rhs) + BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const LhsDuration& rhs) { return lhs.count() < rhs.count(); } @@ -700,7 +704,7 @@ namespace detail // Duration == template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator==(const duration& lhs, const duration& rhs) @@ -712,7 +716,7 @@ namespace detail // Duration != template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator!=(const duration& lhs, const duration& rhs) @@ -723,7 +727,7 @@ namespace detail // Duration < template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator< (const duration& lhs, const duration& rhs) @@ -735,7 +739,7 @@ namespace detail // Duration > template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator> (const duration& lhs, const duration& rhs) @@ -746,7 +750,7 @@ namespace detail // Duration <= template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator<=(const duration& lhs, const duration& rhs) @@ -771,7 +775,7 @@ namespace detail // Compile-time select the most efficient algorithm for the conversion... template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR typename boost::enable_if < boost::chrono::detail::is_duration, ToDuration>::type duration_cast(const duration& fd) @@ -783,4 +787,9 @@ namespace detail } // namespace chrono } // namespace boost +#ifndef BOOST_CHRONO_HEADER_ONLY +// the suffix header occurs after all of our code: +#include // pops abi_prefix.hpp pragmas +#endif + #endif // BOOST_CHRONO_DURATION_HPP diff --git a/3party/boost/boost/chrono/floor.hpp b/3party/boost/boost/chrono/floor.hpp new file mode 100644 index 0000000000..e133e49c8a --- /dev/null +++ b/3party/boost/boost/chrono/floor.hpp @@ -0,0 +1,34 @@ +// boost/chrono/round.hpp ------------------------------------------------------------// + +// (C) Copyright Howard Hinnant +// Copyright 2011 Vicente J. Botet Escriba + +// 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) + +// See http://www.boost.org/libs/chrono for documentation. + +#ifndef BOOST_CHRONO_FLOOR_HPP +#define BOOST_CHRONO_FLOOR_HPP + +#include + +namespace boost +{ + namespace chrono + { + + /** + * rounds down + */ + template + To floor(const duration& d) + { + return duration_cast(d); + } + + + } // namespace chrono +} // namespace boost + +#endif diff --git a/3party/boost/boost/chrono/include.hpp b/3party/boost/boost/chrono/include.hpp index 13a31a018a..b58f76bef8 100644 --- a/3party/boost/boost/chrono/include.hpp +++ b/3party/boost/boost/chrono/include.hpp @@ -14,8 +14,10 @@ #include #include -#include #include #include +#include +#include +#include #endif // BOOST_CHRONO_INCLUDE_HPP diff --git a/3party/boost/boost/chrono/io_v1/chrono_io.hpp b/3party/boost/boost/chrono/io_v1/chrono_io.hpp new file mode 100644 index 0000000000..6ca1ca2d69 --- /dev/null +++ b/3party/boost/boost/chrono/io_v1/chrono_io.hpp @@ -0,0 +1,637 @@ + +// chrono_io +// +// (C) Copyright Howard Hinnant +// (C) Copyright 2010 Vicente J. Botet Escriba +// Use, modification and distribution are subject to 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). +// +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o under lvm/libc++ to Boost + +#ifndef BOOST_CHRONO_IO_V1_CHRONO_IO_HPP +#define BOOST_CHRONO_IO_V1_CHRONO_IO_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost +{ + +namespace chrono +{ + +template +class duration_punct + : public std::locale::facet +{ +public: + typedef std::basic_string string_type; + enum {use_long, use_short}; + +private: + bool use_short_; + string_type long_seconds_; + string_type long_minutes_; + string_type long_hours_; + string_type short_seconds_; + string_type short_minutes_; + string_type short_hours_; + + template + string_type short_name(Period) const + {return ::boost::ratio_string::short_name() + short_seconds_;} + + string_type short_name(ratio<1>) const {return short_seconds_;} + string_type short_name(ratio<60>) const {return short_minutes_;} + string_type short_name(ratio<3600>) const {return short_hours_;} + + template + string_type long_name(Period) const + {return ::boost::ratio_string::long_name() + long_seconds_;} + + string_type long_name(ratio<1>) const {return long_seconds_;} + string_type long_name(ratio<60>) const {return long_minutes_;} + string_type long_name(ratio<3600>) const {return long_hours_;} + + void init_C(); +public: + static std::locale::id id; + + explicit duration_punct(int use = use_long) + : use_short_(use==use_short) {init_C();} + + duration_punct(int use, + const string_type& long_seconds, const string_type& long_minutes, + const string_type& long_hours, const string_type& short_seconds, + const string_type& short_minutes, const string_type& short_hours); + + duration_punct(int use, const duration_punct& d); + + template + string_type short_name() const + {return short_name(typename Period::type());} + + template + string_type long_name() const + {return long_name(typename Period::type());} + + template + string_type plural() const + {return long_name(typename Period::type());} + + template + string_type singular() const + { + return string_type(long_name(typename Period::type()), 0, long_name(typename Period::type()).size()-1); + } + + template + string_type name() const + { + if (use_short_) return short_name(); + else { + return long_name(); + } + } + template + string_type name(D v) const + { + if (use_short_) return short_name(); + else + { + if (v==-1 || v==1) + return singular(); + else + return plural(); + } + } + + bool is_short_name() const {return use_short_;} + bool is_long_name() const {return !use_short_;} +}; + +template +std::locale::id +duration_punct::id; + +template +void +duration_punct::init_C() +{ + short_seconds_ = CharT('s'); + short_minutes_ = CharT('m'); + short_hours_ = CharT('h'); + const CharT s[] = {'s', 'e', 'c', 'o', 'n', 'd', 's'}; + const CharT m[] = {'m', 'i', 'n', 'u', 't', 'e', 's'}; + const CharT h[] = {'h', 'o', 'u', 'r', 's'}; + long_seconds_.assign(s, s + sizeof(s)/sizeof(s[0])); + long_minutes_.assign(m, m + sizeof(m)/sizeof(m[0])); + long_hours_.assign(h, h + sizeof(h)/sizeof(h[0])); +} + +template +duration_punct::duration_punct(int use, + const string_type& long_seconds, const string_type& long_minutes, + const string_type& long_hours, const string_type& short_seconds, + const string_type& short_minutes, const string_type& short_hours) + : use_short_(use==use_short), + long_seconds_(long_seconds), + long_minutes_(long_minutes), + long_hours_(long_hours), + short_seconds_(short_seconds), + short_minutes_(short_minutes), + short_hours_(short_hours) +{} + +template +duration_punct::duration_punct(int use, const duration_punct& d) + : use_short_(use==use_short), + long_seconds_(d.long_seconds_), + long_minutes_(d.long_minutes_), + long_hours_(d.long_hours_), + short_seconds_(d.short_seconds_), + short_minutes_(d.short_minutes_), + short_hours_(d.short_hours_) +{} + +template +std::basic_ostream& +duration_short(std::basic_ostream& os) +{ + typedef duration_punct Facet; + std::locale loc = os.getloc(); + if (std::has_facet(loc)) + { + const Facet& f = std::use_facet(loc); + if (f.is_long_name()) + os.imbue(std::locale(loc, new Facet(Facet::use_short, f))); + } + else + os.imbue(std::locale(loc, new Facet(Facet::use_short))); + return os; +} + +template +std::basic_ostream& +duration_long(std::basic_ostream& os) +{ + typedef duration_punct Facet; + std::locale loc = os.getloc(); + if (std::has_facet(loc)) + { + const Facet& f = std::use_facet(loc); + if (f.is_short_name()) + os.imbue(std::locale(loc, new Facet(Facet::use_long, f))); + } + return os; +} + +template +std::basic_ostream& +operator<<(std::basic_ostream& os, const duration& d) +{ + typedef duration_punct Facet; + std::locale loc = os.getloc(); + if (!std::has_facet(loc)) + os.imbue(std::locale(loc, new Facet)); + const Facet& f = std::use_facet(os.getloc()); + return os << d.count() << ' ' << f.template name(d.count()); +} + +namespace chrono_detail { +template ::value> +struct duration_io_intermediate +{ + typedef Rep type; +}; + +template +struct duration_io_intermediate +{ + typedef typename mpl::if_c + < + is_floating_point::value, + long double, + typename mpl::if_c + < + is_signed::value, + long long, + unsigned long long + >::type + >::type type; +}; + +template +typename enable_if, bool>::type +reduce(intermediate_type& r, unsigned long long& den, std::ios_base::iostate& err) +{ + typedef typename common_type::type common_type_t; + + // Reduce r * num / den + common_type_t t = math::gcd(common_type_t(r), common_type_t(den)); + r /= t; + den /= t; + if (den != 1) + { + // Conversion to Period is integral and not exact + err |= std::ios_base::failbit; + return false; + } + return true; +} +template +typename disable_if, bool>::type +reduce(intermediate_type& , unsigned long long& , std::ios_base::iostate& ) +{ + return true; +} + +} + +template +std::basic_istream& +operator>>(std::basic_istream& is, duration& d) +{ + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + typedef duration_punct Facet; + std::locale loc = is.getloc(); + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (!std::has_facet(loc)) { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.imbue(std::locale(loc, new Facet)); + } + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + loc = is.getloc(); + const Facet& f = std::use_facet(loc); + typedef typename chrono_detail::duration_io_intermediate::type intermediate_type; + intermediate_type r; + std::ios_base::iostate err = std::ios_base::goodbit; + // read value into r + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is >> r; + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (is.good()) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // now determine unit + typedef std::istreambuf_iterator in_iterator; + in_iterator i(is); + in_iterator e; + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (i != e && *i == ' ') // mandatory ' ' after value + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + ++i; + if (i != e) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // unit is num / den (yet to be determined) + unsigned long long num = 0; + unsigned long long den = 0; + if (*i == '[') + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // parse [N/D]s or [N/D]seconds format + ++i; + CharT x; + is >> num >> x >> den; + if (!is.good() || (x != '/')) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(is.failbit); + return is; + } + i = in_iterator(is); + if (*i != ']') + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(is.failbit); + return is; + } + ++i; + const std::basic_string units[] = + { + f.template singular >(), + f.template plural >(), + f.template short_name >() + }; + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + const std::basic_string* k = chrono_detail::scan_keyword(i, e, + units, units + sizeof(units)/sizeof(units[0]), + //~ std::use_facet >(loc), + err); + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(err); + switch ((k - units) / 3) + { + case 0: + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + break; + default: + is.setstate(err); + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + return is; + } + } + else + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // parse SI name, short or long + const std::basic_string units[] = + { + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular(), + f.template plural(), + f.template short_name(), + f.template singular >(), + f.template plural >(), + f.template short_name >(), + f.template singular >(), + f.template plural >(), + f.template short_name >(), + f.template singular >(), + f.template plural >(), + f.template short_name >() + }; + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + const std::basic_string* k = chrono_detail::scan_keyword(i, e, + units, units + sizeof(units)/sizeof(units[0]), + //~ std::use_facet >(loc), + err); + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + switch ((k - units) / 3) + { + case 0: + num = 1ULL; + den = 1000000000000000000ULL; + break; + case 1: + num = 1ULL; + den = 1000000000000000ULL; + break; + case 2: + num = 1ULL; + den = 1000000000000ULL; + break; + case 3: + num = 1ULL; + den = 1000000000ULL; + break; + case 4: + num = 1ULL; + den = 1000000ULL; + break; + case 5: + num = 1ULL; + den = 1000ULL; + break; + case 6: + num = 1ULL; + den = 100ULL; + break; + case 7: + num = 1ULL; + den = 10ULL; + break; + case 8: + num = 10ULL; + den = 1ULL; + break; + case 9: + num = 100ULL; + den = 1ULL; + break; + case 10: + num = 1000ULL; + den = 1ULL; + break; + case 11: + num = 1000000ULL; + den = 1ULL; + break; + case 12: + num = 1000000000ULL; + den = 1ULL; + break; + case 13: + num = 1000000000000ULL; + den = 1ULL; + break; + case 14: + num = 1000000000000000ULL; + den = 1ULL; + break; + case 15: + num = 1000000000000000000ULL; + den = 1ULL; + break; + case 16: + num = 1; + den = 1; + break; + case 17: + num = 60; + den = 1; + break; + case 18: + num = 3600; + den = 1; + break; + default: + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(err|is.failbit); + return is; + } + } + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // unit is num/den + // r should be multiplied by (num/den) / Period + // Reduce (num/den) / Period to lowest terms + unsigned long long gcd_n1_n2 = math::gcd(num, Period::num); + unsigned long long gcd_d1_d2 = math::gcd(den, Period::den); + num /= gcd_n1_n2; + den /= gcd_d1_d2; + unsigned long long n2 = Period::num / gcd_n1_n2; + unsigned long long d2 = Period::den / gcd_d1_d2; + if (num > (std::numeric_limits::max)() / d2 || + den > (std::numeric_limits::max)() / n2) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // (num/den) / Period overflows + is.setstate(err|is.failbit); + return is; + } + num *= d2; + den *= n2; + + typedef typename common_type::type common_type_t; + + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // num / den is now factor to multiply by r + if (!chrono_detail::reduce(r, den, err)) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(err|is.failbit); + return is; + } + + //if (r > ((duration_values::max)() / num)) + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (chrono::detail::gt(r,((duration_values::max)() / num))) + { + // Conversion to Period overflowed + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(err|is.failbit); + return is; + } + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + common_type_t t = r * num; + t /= den; + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + + if (t > 0) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + Rep pt = t; + if ( (duration_values::max)() < pt) + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // Conversion to Period overflowed + is.setstate(err|is.failbit); + return is; + } + } + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // Success! Store it. + r = Rep(t); + d = duration(r); + is.setstate(err); + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + return is; + } + else { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(is.failbit | is.eofbit); + return is; + } + } + else + { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (i == e) + is.setstate(is.failbit|is.eofbit); + else + is.setstate(is.failbit); + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + return is; + } + } + else { + std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //is.setstate(is.failbit); + return is; + } +} + + +template +std::basic_ostream& +operator<<(std::basic_ostream& os, + const time_point& tp) +{ + return os << tp.time_since_epoch() << clock_string::since(); +} + +template +std::basic_istream& +operator>>(std::basic_istream& is, + time_point& tp) +{ + Duration d; + is >> d; + if (is.good()) + { + const std::basic_string units=clock_string::since(); + std::ios_base::iostate err = std::ios_base::goodbit; + typedef std::istreambuf_iterator in_iterator; + in_iterator i(is); + in_iterator e; + std::ptrdiff_t k = chrono_detail::scan_keyword(i, e, + &units, &units + 1, + //~ std::use_facet >(is.getloc()), + err) - &units; + is.setstate(err); + if (k == 1) + { + is.setstate(err | is.failbit); + // failed to read epoch string + return is; + } + tp = time_point(d); + } + else + is.setstate(is.failbit); + return is; +} +} // chrono + +} + +#endif // BOOST_CHRONO_CHRONO_IO_HPP diff --git a/3party/boost/boost/chrono/process_cpu_clocks.hpp b/3party/boost/boost/chrono/process_cpu_clocks.hpp index 6e2ec1387e..486950da40 100644 --- a/3party/boost/boost/chrono/process_cpu_clocks.hpp +++ b/3party/boost/boost/chrono/process_cpu_clocks.hpp @@ -1,6 +1,6 @@ // boost/chrono/process_cpu_clocks.hpp -----------------------------------------------------------// -// Copyright 2009-2010 Vicente J. Botet Escriba +// Copyright 2009-2011 Vicente J. Botet Escriba // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -10,13 +10,18 @@ #ifndef BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP #define BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP +#include + + +#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) + #include #include -#include #include #include #include - +#include +#include #ifndef BOOST_CHRONO_HEADER_ONLY #include // must be the last #include @@ -30,10 +35,12 @@ namespace boost { namespace chrono { typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = true; + BOOST_STATIC_CONSTEXPR bool is_steady = true; - static BOOST_CHRONO_INLINE time_point now( - system::error_code & ec = BOOST_CHRONO_THROWS ); + static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + static BOOST_CHRONO_INLINE time_point now(system::error_code & ec ); +#endif }; class BOOST_CHRONO_DECL process_user_cpu_clock { @@ -42,10 +49,12 @@ namespace boost { namespace chrono { typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = true; + BOOST_STATIC_CONSTEXPR bool is_steady = true; - static BOOST_CHRONO_INLINE time_point now( - system::error_code & ec = BOOST_CHRONO_THROWS ); + static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + static BOOST_CHRONO_INLINE time_point now(system::error_code & ec ); +#endif }; class BOOST_CHRONO_DECL process_system_cpu_clock { @@ -54,86 +63,107 @@ namespace boost { namespace chrono { typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = true; + BOOST_STATIC_CONSTEXPR bool is_steady = true; - static BOOST_CHRONO_INLINE time_point now( - system::error_code & ec = BOOST_CHRONO_THROWS ); + static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + static BOOST_CHRONO_INLINE time_point now(system::error_code & ec ); +#endif }; - struct process_cpu_clock_times - : arithmetic > > + template + struct process_times + : arithmetic, + multiplicative, Rep, + less_than_comparable > > > { - typedef process_real_cpu_clock::rep rep; - process_cpu_clock_times() + //typedef process_real_cpu_clock::rep rep; + typedef Rep rep; + process_times() : real(0) , user(0) , system(0){} - process_cpu_clock_times( - process_real_cpu_clock::rep r, - process_user_cpu_clock::rep u, - process_system_cpu_clock::rep s) + template + explicit process_times( + Rep2 r) + : real(r) + , user(r) + , system(r){} + template + explicit process_times( + process_times const& rhs) + : real(rhs.real) + , user(rhs.user) + , system(rhs.system){} + process_times( + rep r, + rep u, + rep s) : real(r) , user(u) , system(s){} - process_real_cpu_clock::rep real; // real (i.e wall clock) time - process_user_cpu_clock::rep user; // user cpu time - process_system_cpu_clock::rep system; // system cpu time + rep real; // real (i.e wall clock) time + rep user; // user cpu time + rep system; // system cpu time - bool operator==(process_cpu_clock_times const& rhs) { + operator rep() const + { + return real; + } + template + bool operator==(process_times const& rhs) { return (real==rhs.real && user==rhs.user && system==rhs.system); } - process_cpu_clock_times operator+=( - process_cpu_clock_times const& rhs) + process_times& operator+=( + process_times const& rhs) { real+=rhs.real; user+=rhs.user; system+=rhs.system; return *this; } - process_cpu_clock_times operator-=( - process_cpu_clock_times const& rhs) + process_times& operator-=( + process_times const& rhs) { real-=rhs.real; user-=rhs.user; system-=rhs.system; return *this; } - process_cpu_clock_times operator*=( - process_cpu_clock_times const& rhs) + process_times& operator*=( + process_times const& rhs) { real*=rhs.real; user*=rhs.user; system*=rhs.system; return *this; } - process_cpu_clock_times operator*=(rep const& rhs) + process_times& operator*=(rep const& rhs) { real*=rhs; user*=rhs; system*=rhs; return *this; } - process_cpu_clock_times operator/=(process_cpu_clock_times const& rhs) + process_times& operator/=(process_times const& rhs) { real/=rhs.real; user/=rhs.user; system/=rhs.system; return *this; } - process_cpu_clock_times operator/=(rep const& rhs) + process_times& operator/=(rep const& rhs) { real/=rhs; user/=rhs; system/=rhs; return *this; } - bool operator<(process_cpu_clock_times const & rhs) const + bool operator<(process_times const & rhs) const { if (real < rhs.real) return true; if (real > rhs.real) return false; @@ -144,13 +174,13 @@ namespace boost { namespace chrono { } template - void print(std::basic_ostream& os) const + void print(std::basic_ostream& os) const { os << "{"<< real <<";"<< user <<";"<< system << "}"; } template - void read(std::basic_istream& is) const + void read(std::basic_istream& is) const { typedef std::istreambuf_iterator in_iterator; in_iterator i(is); @@ -168,7 +198,100 @@ namespace boost { namespace chrono { } } }; +} +template +struct common_type< + chrono::process_times, + chrono::process_times +> +{ + typedef chrono::process_times::type> type; +}; +template +struct common_type< + chrono::process_times, + Rep2 +> +{ + typedef chrono::process_times::type> type; +}; + +template +struct common_type< + Rep1, + chrono::process_times +> +{ + typedef chrono::process_times::type> type; +}; + + +namespace chrono +{ + template + inline BOOST_CONSTEXPR + bool + operator==(const duration, Period1>& lhs, + const duration, Period2>& rhs) + { + return boost::chrono::detail::duration_eq< + duration, Period1>, duration, Period2> >()(lhs, rhs); + } + + template + inline BOOST_CONSTEXPR + bool + operator==(const duration, Period1>& lhs, + const duration& rhs) + { + return boost::chrono::detail::duration_eq< + duration, duration >()(duration(lhs.count().real), rhs); + } + + template + inline BOOST_CONSTEXPR + bool + operator==(const duration& lhs, + const duration, Period2>& rhs) + { + return rhs == lhs; + } + + + // Duration < + + template + inline BOOST_CONSTEXPR + bool + operator< (const duration, Period1>& lhs, + const duration& rhs) + { + return boost::chrono::detail::duration_lt< + duration, duration >()(duration(lhs.count().real), rhs); + } + + template + inline BOOST_CONSTEXPR + bool + operator< (const duration& lhs, + const duration, Period2>& rhs) + { + return rhs < lhs; + } + + template + inline BOOST_CONSTEXPR + bool + operator< (const duration, Period1>& lhs, + const duration, Period2>& rhs) + { + return boost::chrono::detail::duration_lt< + duration, duration >()(lhs, rhs); + } + + + typedef process_times process_cpu_clock_times; class BOOST_CHRONO_DECL process_cpu_clock { public: @@ -178,96 +301,182 @@ namespace boost { namespace chrono { typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = true; + BOOST_STATIC_CONSTEXPR bool is_steady = true; - static BOOST_CHRONO_INLINE time_point now( - system::error_code & ec = BOOST_CHRONO_THROWS ); + static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + static BOOST_CHRONO_INLINE time_point now(system::error_code & ec ); +#endif }; - template - std::basic_ostream& - operator<<(std::basic_ostream& os, - process_cpu_clock_times const& rhs) + template + std::basic_ostream& + operator<<(std::basic_ostream& os, + process_times const& rhs) { rhs.print(os); return os; } - template - std::basic_istream& - operator>>(std::basic_istream& is, - process_cpu_clock_times const& rhs) + template + std::basic_istream& + operator>>(std::basic_istream& is, + process_times const& rhs) { rhs.read(is); return is; } - template <> - struct duration_values + template + struct duration_values > { - typedef process_cpu_clock_times Rep; + typedef process_times Res; public: - static Rep zero() + static Res zero() { - return Rep(); + return Res(); } - static Rep max BOOST_PREVENT_MACRO_SUBSTITUTION () + static Res max BOOST_PREVENT_MACRO_SUBSTITUTION () { - return Rep((std::numeric_limits::max)(), - (std::numeric_limits::max)(), - (std::numeric_limits::max)()); + return Res((std::numeric_limits::max)(), + (std::numeric_limits::max)(), + (std::numeric_limits::max)()); } - static Rep min BOOST_PREVENT_MACRO_SUBSTITUTION () + static Res min BOOST_PREVENT_MACRO_SUBSTITUTION () { - return Rep((std::numeric_limits::min)(), - (std::numeric_limits::min)(), - (std::numeric_limits::min)()); + return Res((std::numeric_limits::min)(), + (std::numeric_limits::min)(), + (std::numeric_limits::min)()); } }; + template + struct clock_string + { + static std::basic_string name() + { + static const CharT + u[] = + { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'r', 'e', 'a', 'l', '_', 'c', 'l', 'o', 'c', 'k' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + static std::basic_string since() + { + const CharT + u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' }; + const std::basic_string str(u, u + sizeof(u) / sizeof(u[0])); + return str; + } + }; + + template + struct clock_string + { + static std::basic_string name() + { + static const CharT + u[] = + { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'u', 's', 'e', 'r', '_', 'c', 'l', 'o', 'c', 'k' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + static std::basic_string since() + { + const CharT + u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' }; + const std::basic_string str(u, u + sizeof(u) / sizeof(u[0])); + return str; + } + }; + + template + struct clock_string + { + static std::basic_string name() + { + static const CharT + u[] = + { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 's', 'y', 's', 't', 't', 'e', 'm', '_', 'c', 'l', 'o', 'c', 'k' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + static std::basic_string since() + { + const CharT + u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' }; + const std::basic_string str(u, u + sizeof(u) / sizeof(u[0])); + return str; + } + }; + + template + struct clock_string + { + static std::basic_string name() + { + static const CharT u[] = + { 'p', 'r', 'o', 'c', 'e', 's', 's', '_', 'c', 'l', 'o', 'c', 'k' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + static std::basic_string since() + { + const CharT + u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'p', 'r', 'o', 'c', 'e', 's', 's', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p' }; + const std::basic_string str(u, u + sizeof(u) / sizeof(u[0])); + return str; + } + }; + } // namespace chrono } // namespace boost namespace std { - template <> - class numeric_limits + template + struct numeric_limits > { - typedef boost::chrono::process_cpu_clock::times Rep; + typedef boost::chrono::process_times Res; public: static const bool is_specialized = true; - static Rep min BOOST_PREVENT_MACRO_SUBSTITUTION () + static Res min BOOST_PREVENT_MACRO_SUBSTITUTION () { - return Rep((std::numeric_limits::min)(), - (std::numeric_limits::min)(), - (std::numeric_limits::min)()); + return Res((std::numeric_limits::min)(), + (std::numeric_limits::min)(), + (std::numeric_limits::min)()); } - static Rep max BOOST_PREVENT_MACRO_SUBSTITUTION () + static Res max BOOST_PREVENT_MACRO_SUBSTITUTION () { - return Rep((std::numeric_limits::max)(), - (std::numeric_limits::max)(), - (std::numeric_limits::max)()); + return Res((std::numeric_limits::max)(), + (std::numeric_limits::max)(), + (std::numeric_limits::max)()); } - static Rep lowest() throw() - { - return (min)(); + static Res lowest() throw() + { + return (min)(); } - static const int digits = std::numeric_limits::digits+ - std::numeric_limits::digits+ - std::numeric_limits::digits; - static const int digits10 = std::numeric_limits::digits10+ - std::numeric_limits::digits10+ - std::numeric_limits::digits10; - //~ static const int max_digits10 = std::numeric_limits::max_digits10+ - //~ std::numeric_limits::max_digits10+ - //~ std::numeric_limits::max_digits10; - static const bool is_signed = false; - static const bool is_integer = true; - static const bool is_exact = true; + static const int digits = std::numeric_limits::digits+ + std::numeric_limits::digits+ + std::numeric_limits::digits; + static const int digits10 = std::numeric_limits::digits10+ + std::numeric_limits::digits10+ + std::numeric_limits::digits10; + static const bool is_signed = Rep::is_signed; + static const bool is_integer = Rep::is_integer; + static const bool is_exact = Rep::is_exact; static const int radix = 0; - //~ static Rep epsilon() throw() { return 0; } - //~ static Rep round_error() throw() { return 0; } + //~ static Res epsilon() throw() { return 0; } + //~ static Res round_error() throw() { return 0; } //~ static const int min_exponent = 0; //~ static const int min_exponent10 = 0; //~ static const int max_exponent = 0; @@ -277,10 +486,10 @@ namespace std { //~ static const bool has_signaling_NaN = false; //~ static const float_denorm_style has_denorm = denorm_absent; //~ static const bool has_denorm_loss = false; - //~ static Rep infinity() throw() { return 0; } - //~ static Rep quiet_NaN() throw() { return 0; } - //~ static Rep signaling_NaN() throw() { return 0; } - //~ static Rep denorm_min() throw() { return 0; } + //~ static Res infinity() throw() { return 0; } + //~ static Res quiet_NaN() throw() { return 0; } + //~ static Res signaling_NaN() throw() { return 0; } + //~ static Res denorm_min() throw() { return 0; } //~ static const bool is_iec559 = false; //~ static const bool is_bounded = true; //~ static const bool is_modulo = false; @@ -296,5 +505,6 @@ namespace std { #else #include #endif +#endif #endif // BOOST_CHRONO_PROCESS_CPU_CLOCKS_HPP diff --git a/3party/boost/boost/chrono/process_times.hpp b/3party/boost/boost/chrono/process_times.hpp deleted file mode 100644 index 123de305a0..0000000000 --- a/3party/boost/boost/chrono/process_times.hpp +++ /dev/null @@ -1,212 +0,0 @@ -// boost/chrono/process_times.hpp -----------------------------------------------------------// - -// Copyright Beman Dawes 1994, 2007, 2008 -// Copyright Vicente J Botet Escriba 2009-2010 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// See http://www.boost.org/libs/system for documentation. - -#ifndef BOOST_PROCESS_TIMES_HPP -#define BOOST_PROCESS_TIMES_HPP - -#include -#include -#include -#include -#include -#include -#include - -#ifndef BOOST_CHRONO_HEADER_ONLY -#include // must be the last #include -#endif - - -namespace boost -{ -namespace chrono -{ -//--------------------------------------------------------------------------------------// -// process_clock // -//--------------------------------------------------------------------------------------// - - class BOOST_CHRONO_DECL process_clock - { - public: - typedef nanoseconds duration; - typedef duration::rep rep; - typedef duration::period period; - typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = true; - - struct durations - { - process_clock::duration real; // real (i.e wall clock) time - process_clock::duration user; // user cpu time - process_clock::duration system; // system cpu time - }; - struct time_points - { - process_clock::time_point real; // real (i.e wall clock) time - process_clock::time_point user; // user cpu time - process_clock::time_point system; // system cpu time - }; - - static BOOST_CHRONO_INLINE void now( durations & times, - system::error_code & ec = BOOST_CHRONO_THROWS ); - static BOOST_CHRONO_INLINE void now( time_points & times, - system::error_code & ec = BOOST_CHRONO_THROWS ); - }; - - -//--------------------------------------------------------------------------------------// -// process_times // -//--------------------------------------------------------------------------------------// - - typedef process_clock::durations process_times; - -//--------------------------------------------------------------------------------------// -// process_timer // -//--------------------------------------------------------------------------------------// - - class BOOST_CHRONO_DECL process_timer - // BOOST_CHRONO_DECL is required to quiet compiler warnings even though - // process_timer has no dynamically linked members, because process_timer is - // used as a base class for run_timer, which does have dynamically linked members. - { - public: - - typedef process_clock clock; - typedef process_clock::duration duration; - typedef process_clock::time_point time_point; - - explicit process_timer( system::error_code & ec = BOOST_CHRONO_THROWS ) - { - start(ec); - } - - ~process_timer() {} // never throws() - - void start( system::error_code & ec = BOOST_CHRONO_THROWS ) - { - process_clock::now( m_start, ec ); - } - - void elapsed( process_times & times, system::error_code & ec = BOOST_CHRONO_THROWS ) - { - process_times end; - process_clock::now( end, ec ); - times.real = end.real - m_start.real; - times.user = end.user - m_start.user; - times.system = end.system - m_start.system; - } - - protected: - process_times m_start; - private: - process_timer(const process_timer&); // = delete; - process_timer& operator=(const process_timer&); // = delete; - }; - -//--------------------------------------------------------------------------------------// -// run_timer // -//--------------------------------------------------------------------------------------// - - class BOOST_CHRONO_DECL run_timer : public process_timer - { - // every function making use of inlined functions of class string are not inlined to avoid DLL issues - public: - - // each constructor form has two overloads to avoid a visible default to - // std::cout, which in turn would require including , with its - // high associated cost, even when the standard streams are not used. - - BOOST_CHRONO_INLINE - explicit run_timer( system::error_code & ec = BOOST_CHRONO_THROWS ); - BOOST_CHRONO_INLINE - explicit run_timer( std::ostream & os, - system::error_code & ec = BOOST_CHRONO_THROWS ); - - BOOST_CHRONO_INLINE - explicit run_timer( const std::string & format, - system::error_code & ec = BOOST_CHRONO_THROWS ); - BOOST_CHRONO_INLINE - run_timer( std::ostream & os, const std::string & format, - system::error_code & ec = BOOST_CHRONO_THROWS ); - - BOOST_CHRONO_INLINE - run_timer( const std::string & format, int places, - system::error_code & ec = BOOST_CHRONO_THROWS ); - BOOST_CHRONO_INLINE - run_timer( std::ostream & os, const std::string & format, - int places, system::error_code & ec = BOOST_CHRONO_THROWS ); - - BOOST_CHRONO_INLINE - explicit run_timer( int places, - system::error_code & ec = BOOST_CHRONO_THROWS ); - BOOST_CHRONO_INLINE - run_timer( std::ostream & os, int places, - system::error_code & ec = BOOST_CHRONO_THROWS ); - - BOOST_CHRONO_INLINE - run_timer( int places, const std::string & format, - system::error_code & ec = BOOST_CHRONO_THROWS ); - BOOST_CHRONO_INLINE - run_timer( std::ostream & os, int places, const std::string & format, - system::error_code & ec = BOOST_CHRONO_THROWS ); - - ~run_timer() // never throws - { - system::error_code ec; - if ( !reported() ) report( ec ); - } - - BOOST_CHRONO_INLINE void start( system::error_code & ec = BOOST_CHRONO_THROWS ) - { - m_reported = false; - process_timer::start( ec ); - } - - BOOST_CHRONO_INLINE void report( system::error_code & ec = BOOST_CHRONO_THROWS ); - - BOOST_CHRONO_INLINE void test_report( duration real_, duration user_, duration system_ ); - - BOOST_CHRONO_INLINE bool reported() const { return m_reported; } - - BOOST_CHRONO_INLINE static int default_places() { return m_default_places; } - - private: - int m_places; - std::ostream & m_os; - -#if defined _MSC_VER -#pragma warning(push) -#pragma warning(disable:4251) -#endif - std::string m_format; -#if defined _MSC_VER -#pragma warning(pop) -#endif - bool m_reported; - - BOOST_CHRONO_INLINE static std::ostream & m_cout(); - //{return std::cout;} - static const int m_default_places = 3; - run_timer(const run_timer&); // = delete; - run_timer& operator=(const run_timer&); // = delete; - }; - - } // namespace chrono -} // namespace boost - -#ifndef BOOST_CHRONO_HEADER_ONLY -#include // pops abi_prefix.hpp pragmas -#else -#include -#include -#include -#endif - -#endif // BOOST_PROCESS_TIMES_HPP diff --git a/3party/boost/boost/chrono/round.hpp b/3party/boost/boost/chrono/round.hpp new file mode 100644 index 0000000000..3d0619e681 --- /dev/null +++ b/3party/boost/boost/chrono/round.hpp @@ -0,0 +1,55 @@ +// boost/chrono/round.hpp ------------------------------------------------------------// + +// (C) Copyright Howard Hinnant +// Copyright 2011 Vicente J. Botet Escriba + +// 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) + +// See http://www.boost.org/libs/chrono for documentation. + +#ifndef BOOST_CHRONO_ROUND_HPP +#define BOOST_CHRONO_ROUND_HPP + +#include +#include +//#include + +namespace boost +{ + namespace chrono + { + + /** + * rounds to nearest, to even on tie + */ + template + To round(const duration& d) + { + To t0 = duration_cast(d); + To t1 = t0; + ++t1; +#if 0 + // Avoid the user of BOOST_AUTO to make the library portable to Sun, PGI, .. + BOOST_AUTO(diff0, d - t0); + BOOST_AUTO(diff1, t1 - d); +#else + typedef typename common_type >::type result_type; + result_type diff0 = d - t0; + result_type diff1 = t1 - d; +#endif + if (diff0 == diff1) + { + if (t0.count() & 1) + return t1; + return t0; + } + else if (diff0 < diff1) + return t0; + return t1; + } + + } // namespace chrono +} // namespace boost + +#endif diff --git a/3party/boost/boost/chrono/system_clocks.hpp b/3party/boost/boost/chrono/system_clocks.hpp index df290f4daa..df8b79e207 100644 --- a/3party/boost/boost/chrono/system_clocks.hpp +++ b/3party/boost/boost/chrono/system_clocks.hpp @@ -1,8 +1,8 @@ -// chrono.hpp --------------------------------------------------------------// +// boost/chrono/system_clocks.hpp --------------------------------------------------------------// // Copyright 2008 Howard Hinnant // Copyright 2008 Beman Dawes -// Copyright 2009-2010 Vicente J. Botet Escriba +// Copyright 2009-2011 Vicente J. Botet Escriba // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -31,7 +31,6 @@ time2_demo contained this comment: TODO: * Fully implement error handling, with test cases. - * Use boost::throw_exception. (Currently not used because of an issue with Intel 11.0.) * Consider issues raised by Michael Marcin: > In the past I've seen QueryPerformanceCounter give incorrect results, @@ -63,10 +62,16 @@ TODO: #include #include #include -#include +#include #include +# if defined( BOOST_CHRONO_POSIX_API ) +# if ! defined(CLOCK_REALTIME) +# error does not supply CLOCK_REALTIME +# endif +# endif + #ifdef BOOST_CHRONO_WINDOWS_API // The system_clock tick is 100 nanoseconds # define BOOST_SYSTEM_CLOCK_DURATION boost::chrono::duration > @@ -74,6 +79,7 @@ TODO: # define BOOST_SYSTEM_CLOCK_DURATION boost::chrono::nanoseconds #endif +// this must occur after all of the includes and before any code appears: #ifndef BOOST_CHRONO_HEADER_ONLY #include // must be the last #include #endif @@ -92,7 +98,7 @@ namespace chrono { // Clocks class BOOST_CHRONO_DECL system_clock; #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY - class BOOST_CHRONO_DECL steady_clock; // as permitted by [time.clock.steady] + class BOOST_CHRONO_DECL steady_clock; #endif #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY @@ -125,13 +131,15 @@ namespace chrono { typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = false; + BOOST_STATIC_CONSTEXPR bool is_steady = false; - static BOOST_CHRONO_INLINE time_point now(); // throws on error - static BOOST_CHRONO_INLINE time_point now(system::error_code & ec); // never throws + static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + static BOOST_CHRONO_INLINE time_point now(system::error_code & ec); +#endif - static BOOST_CHRONO_INLINE std::time_t to_time_t(const time_point& t); - static BOOST_CHRONO_INLINE time_point from_time_t(std::time_t t); + static BOOST_CHRONO_INLINE std::time_t to_time_t(const time_point& t) BOOST_NOEXCEPT; + static BOOST_CHRONO_INLINE time_point from_time_t(std::time_t t) BOOST_NOEXCEPT; }; //----------------------------------------------------------------------------// @@ -149,10 +157,12 @@ namespace chrono { typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = true; + BOOST_STATIC_CONSTEXPR bool is_steady = true; - static BOOST_CHRONO_INLINE time_point now(); // throws on error - static BOOST_CHRONO_INLINE time_point now(system::error_code & ec); // never throws + static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + static BOOST_CHRONO_INLINE time_point now(system::error_code & ec); +#endif }; #endif //----------------------------------------------------------------------------// @@ -163,10 +173,58 @@ namespace chrono { // See synopsis. + template + struct clock_string + { + static std::basic_string name() + { + static const CharT u[] = + { 's', 'y', 's', 't', 'e', 'm', '_', 'c', 'l', 'o', 'c', 'k' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + static std::basic_string since() + { + static const CharT + u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'J', 'a', 'n', ' ', '1', ',', ' ', '1', '9', '7', '0' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + }; + +#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY + + template + struct clock_string + { + static std::basic_string name() + { + static const CharT + u[] = + { 's', 't', 'e', 'a', 'd', 'y', '_', 'c', 'l', 'o', 'c', 'k' }; + static const std::basic_string str(u, u + sizeof(u) + / sizeof(u[0])); + return str; + } + static std::basic_string since() + { + const CharT u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'b', 'o', 'o', 't' }; + const std::basic_string str(u, u + sizeof(u) / sizeof(u[0])); + return str; + } + }; + +#endif + } // namespace chrono } // namespace boost #ifndef BOOST_CHRONO_HEADER_ONLY +// the suffix header occurs after all of our code: #include // pops abi_prefix.hpp pragmas #else #include diff --git a/3party/boost/boost/chrono/thread_clock.hpp b/3party/boost/boost/chrono/thread_clock.hpp index 95e5c4460d..207697b4cc 100644 --- a/3party/boost/boost/chrono/thread_clock.hpp +++ b/3party/boost/boost/chrono/thread_clock.hpp @@ -1,27 +1,29 @@ -// boost/chrono/process_cpu_clocks.hpp -----------------------------------------------------------// +// boost/chrono/thread_clock.hpp -----------------------------------------------------------// -// Copyright 2009-2010 Vicente J. Botet Escriba +// Copyright 2009-2011 Vicente J. Botet Escriba // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // See http://www.boost.org/libs/system for documentation. +#include + #ifndef BOOST_CHRONO_THREAD_CLOCK_HPP #define BOOST_CHRONO_THREAD_CLOCK_HPP +#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) + #include #include #include -#include #include +#include #ifndef BOOST_CHRONO_HEADER_ONLY #include // must be the last #include #endif -#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) - namespace boost { namespace chrono { class BOOST_CHRONO_DECL thread_clock { @@ -30,15 +32,37 @@ public: typedef duration::rep rep; typedef duration::period period; typedef chrono::time_point time_point; - BOOST_CHRONO_STATIC_CONSTEXPR bool is_steady = BOOST_CHRONO_THREAD_CLOCK_IS_STEADY; + BOOST_STATIC_CONSTEXPR bool is_steady = BOOST_CHRONO_THREAD_CLOCK_IS_STEADY; - static BOOST_CHRONO_INLINE time_point now( ); + static BOOST_CHRONO_INLINE time_point now( ) BOOST_NOEXCEPT; +#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING static BOOST_CHRONO_INLINE time_point now( system::error_code & ec ); +#endif }; + +template +struct clock_string +{ + static std::basic_string name() + { + static const CharT u[] = + { 't', 'h', 'r', 'e', 'a', 'd', '_', + 'c', 'l','o', 'c', 'k'}; + static const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); + return str; + } + static std::basic_string since() + { + const CharT u[] = + { ' ', 's', 'i', 'n', 'c', 'e', ' ', 't', 'h', 'r', 'e', 'a', 'd', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'}; + const std::basic_string str(u, u + sizeof(u)/sizeof(u[0])); + return str; + } +}; + } // namespace chrono } // namespace boost -#endif #ifndef BOOST_CHRONO_HEADER_ONLY #include // pops abi_prefix.hpp pragmas @@ -46,4 +70,6 @@ public: #include #endif +#endif + #endif // BOOST_CHRONO_THREAD_CLOCK_HPP diff --git a/3party/boost/boost/chrono/time_point.hpp b/3party/boost/boost/chrono/time_point.hpp index 1706112345..9aad25e66c 100644 --- a/3party/boost/boost/chrono/time_point.hpp +++ b/3party/boost/boost/chrono/time_point.hpp @@ -2,7 +2,7 @@ // Copyright 2008 Howard Hinnant // Copyright 2008 Beman Dawes -// Copyright 2009-2010 Vicente J. Botet Escriba +// Copyright 2009-2012 Vicente J. Botet Escriba // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -32,8 +32,11 @@ time2_demo contained this comment: #include #include -#include +#ifndef BOOST_CHRONO_HEADER_ONLY +// this must occur after all of the includes and before any code appears: +#include // must be the last #include +#endif //----------------------------------------------------------------------------// // // @@ -78,24 +81,28 @@ namespace chrono { // time_point arithmetic template + inline BOOST_CONSTEXPR time_point >::type> operator+( const time_point& lhs, const duration& rhs); template + inline BOOST_CONSTEXPR time_point, Duration2>::type> operator+( const duration& lhs, const time_point& rhs); template + inline BOOST_CONSTEXPR time_point >::type> operator-( const time_point& lhs, const duration& rhs); template + inline BOOST_CONSTEXPR typename common_type::type operator-( const time_point& lhs, @@ -104,39 +111,39 @@ namespace chrono { // time_point comparisons template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator==( const time_point& lhs, const time_point& rhs); template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator!=( const time_point& lhs, const time_point& rhs); template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator< ( const time_point& lhs, const time_point& rhs); template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator<=( const time_point& lhs, const time_point& rhs); template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator> ( const time_point& lhs, const time_point& rhs); template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator>=( const time_point& lhs, const time_point& rhs); // time_point_cast template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR time_point time_point_cast(const time_point& t); //----------------------------------------------------------------------------// @@ -156,21 +163,21 @@ namespace chrono { typedef typename duration::rep rep; typedef typename duration::period period; typedef Duration difference_type; - + private: duration d_; public: - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR time_point() : d_(duration::zero()) {} - BOOST_CHRONO_CONSTEXPR explicit time_point(const duration& d) + BOOST_CONSTEXPR explicit time_point(const duration& d) : d_(d) {} // conversions template - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR time_point(const time_point& t , typename boost::enable_if < @@ -182,7 +189,7 @@ namespace chrono { } // observer - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR duration time_since_epoch() const { return d_; @@ -190,32 +197,32 @@ namespace chrono { // arithmetic -#ifdef BOOST_CHRONO_EXTENSIONS - BOOST_CHRONO_CONSTEXPR +#ifdef BOOST_CHRONO_EXTENSIONS + BOOST_CONSTEXPR time_point operator+() const {return *this;} - BOOST_CHRONO_CONSTEXPR + BOOST_CONSTEXPR time_point operator-() const {return time_point(-d_);} time_point& operator++() {++d_; return *this;} time_point operator++(int) {return time_point(d_++);} time_point& operator--() {--d_; return *this;} - time_point operator--(int) {return time_point(d_--);} + time_point operator--(int) {return time_point(d_--);} time_point& operator+=(const rep& r) {d_ += duration(r); return *this;} time_point& operator-=(const rep& r) {d_ -= duration(r); return *this;} #endif - + time_point& operator+=(const duration& d) {d_ += d; return *this;} time_point& operator-=(const duration& d) {d_ -= d; return *this;} // special values - static BOOST_CHRONO_CONSTEXPR time_point + static BOOST_CONSTEXPR time_point min BOOST_PREVENT_MACRO_SUBSTITUTION () { return time_point((duration::min)()); } - static BOOST_CHRONO_CONSTEXPR time_point + static BOOST_CONSTEXPR time_point max BOOST_PREVENT_MACRO_SUBSTITUTION () { return time_point((duration::max)()); @@ -229,25 +236,24 @@ namespace chrono { // time_point operator+(time_point x, duration y); template - inline + inline BOOST_CONSTEXPR time_point >::type> operator+(const time_point& lhs, const duration& rhs) { - typedef time_point< - Clock, - typename common_type >::type - > TimeResult; - TimeResult r(lhs); - r += rhs; - return r; + typedef typename common_type >::type CDuration; + typedef time_point< + Clock, + CDuration + > TimeResult; + return TimeResult(lhs.time_since_epoch() + CDuration(rhs)); } // time_point operator+(duration x, time_point y); template - inline + inline BOOST_CONSTEXPR time_point, Duration2>::type> operator+(const duration& lhs, @@ -259,7 +265,7 @@ namespace chrono { // time_point operator-(time_point x, duration y); template - inline + inline BOOST_CONSTEXPR time_point >::type> operator-(const time_point& lhs, @@ -271,7 +277,7 @@ namespace chrono { // duration operator-(time_point x, time_point y); template - inline + inline BOOST_CONSTEXPR typename common_type::type operator-(const time_point& lhs, const time_point& rhs) @@ -286,7 +292,7 @@ namespace chrono { // time_point == template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator==(const time_point& lhs, const time_point& rhs) @@ -297,7 +303,7 @@ namespace chrono { // time_point != template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator!=(const time_point& lhs, const time_point& rhs) @@ -308,7 +314,7 @@ namespace chrono { // time_point < template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator<(const time_point& lhs, const time_point& rhs) @@ -319,7 +325,7 @@ namespace chrono { // time_point > template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator>(const time_point& lhs, const time_point& rhs) @@ -330,7 +336,7 @@ namespace chrono { // time_point <= template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator<=(const time_point& lhs, const time_point& rhs) @@ -341,7 +347,7 @@ namespace chrono { // time_point >= template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR bool operator>=(const time_point& lhs, const time_point& rhs) @@ -354,7 +360,7 @@ namespace chrono { //----------------------------------------------------------------------------// template - inline BOOST_CHRONO_CONSTEXPR + inline BOOST_CONSTEXPR time_point time_point_cast(const time_point& t) { @@ -365,4 +371,9 @@ namespace chrono { } // namespace chrono } // namespace boost +#ifndef BOOST_CHRONO_HEADER_ONLY +// the suffix header occurs after all of our code: +#include // pops abi_prefix.hpp pragmas +#endif + #endif // BOOST_CHRONO_TIME_POINT_HPP diff --git a/3party/boost/boost/chrono/timer.hpp b/3party/boost/boost/chrono/timer.hpp deleted file mode 100644 index 48859323a2..0000000000 --- a/3party/boost/boost/chrono/timer.hpp +++ /dev/null @@ -1,62 +0,0 @@ -// boost/chrono/timer.hpp ------------------------------------------------------------// - -// Copyright Beman Dawes 2008 -// Copyright 2009 Vicente J. Botet Escriba - -// 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) - -// See http://www.boost.org/libs/system for documentation. - -#ifndef BOOST_CHRONO_TIMER_HPP -#define BOOST_CHRONO_TIMER_HPP - -#include -#include - -namespace boost -{ - namespace chrono - { - -//--------------------------------------------------------------------------------------// -// timer // -//--------------------------------------------------------------------------------------// - - template - class timer - { - public: - typedef Clock clock; - typedef typename Clock::duration duration; - typedef typename Clock::time_point time_point; - - explicit timer( system::error_code & ec = BOOST_CHRONO_THROWS ) - { - start(ec); - } - - ~timer() {} // never throws - - void start( system::error_code & ec = BOOST_CHRONO_THROWS ) - { - m_start = clock::now( ec ); - } - - duration elapsed( system::error_code & ec = BOOST_CHRONO_THROWS ) - { return clock::now( ec ) - m_start; } - - private: - time_point m_start; - }; - - typedef boost::chrono::timer< boost::chrono::system_clock > system_timer; -#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY - typedef boost::chrono::timer< boost::chrono::steady_clock > steady_timer; -#endif - typedef boost::chrono::timer< boost::chrono::high_resolution_clock > high_resolution_timer; - - } // namespace chrono -} // namespace boost - -#endif diff --git a/3party/boost/boost/concept_check.hpp b/3party/boost/boost/concept_check.hpp index 01b2f4ec27..bf5a2af783 100644 --- a/3party/boost/boost/concept_check.hpp +++ b/3party/boost/boost/concept_check.hpp @@ -1052,11 +1052,11 @@ namespace boost c.swap(c); } - void const_constraints(const C& c) { - ci = c.begin(); - ci = c.end(); - n = c.size(); - b = c.empty(); + void const_constraints(const C& cc) { + ci = cc.begin(); + ci = cc.end(); + n = cc.size(); + b = cc.empty(); } private: diff --git a/3party/boost/boost/config/auto_link.hpp b/3party/boost/boost/config/auto_link.hpp index f5a0a007b4..ad021f4077 100644 --- a/3party/boost/boost/config/auto_link.hpp +++ b/3party/boost/boost/config/auto_link.hpp @@ -145,11 +145,16 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. // vc90: # define BOOST_LIB_TOOLSET "vc90" -#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1600) +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1600) // vc10: # define BOOST_LIB_TOOLSET "vc100" +#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1700) + + // vc11: +# define BOOST_LIB_TOOLSET "vc110" + #elif defined(__BORLANDC__) // CBuilder 6: @@ -364,7 +369,7 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. #ifdef BOOST_AUTO_LINK_TAGGED # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") # ifdef BOOST_LIB_DIAGNOSTIC -# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") # endif #elif defined(BOOST_AUTO_LINK_NOMANGLE) # pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") diff --git a/3party/boost/boost/config/compiler/borland.hpp b/3party/boost/boost/config/compiler/borland.hpp index 60f5505547..cffa8ea0ea 100644 --- a/3party/boost/boost/config/compiler/borland.hpp +++ b/3party/boost/boost/config/compiler/borland.hpp @@ -47,7 +47,7 @@ # define BOOST_NO_OPERATORS_IN_NAMESPACE # endif // Variadic macros do not exist for C++ Builder versions 5 and below -#define BOOST_NO_VARIADIC_MACROS +#define BOOST_NO_CXX11_VARIADIC_MACROS # endif // Version 5.51 and below: @@ -150,14 +150,14 @@ // C++0x Macros: // #if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610) -# define BOOST_NO_CHAR16_T -# define BOOST_NO_CHAR32_T -# define BOOST_NO_DECLTYPE -# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -# define BOOST_NO_EXTERN_TEMPLATE -# define BOOST_NO_RVALUE_REFERENCES -# define BOOST_NO_SCOPED_ENUMS -# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_CXX11_CHAR16_T +# define BOOST_NO_CXX11_CHAR32_T +# define BOOST_NO_CXX11_DECLTYPE +# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_CXX11_EXTERN_TEMPLATE +# define BOOST_NO_CXX11_RVALUE_REFERENCES +# define BOOST_NO_CXX11_SCOPED_ENUMS +# define BOOST_NO_CXX11_STATIC_ASSERT #else # define BOOST_HAS_ALIGNOF # define BOOST_HAS_CHAR16_T @@ -169,24 +169,27 @@ # define BOOST_HAS_STATIC_ASSERT #endif -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS // UTF-8 still not supported -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS // UTF-8 still not supported +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #if __BORLANDC__ >= 0x590 # define BOOST_HAS_TR1_HASH diff --git a/3party/boost/boost/config/compiler/clang.hpp b/3party/boost/boost/config/compiler/clang.hpp index 623452cd23..aab3c610c9 100644 --- a/3party/boost/boost/config/compiler/clang.hpp +++ b/3party/boost/boost/config/compiler/clang.hpp @@ -8,15 +8,18 @@ // Clang compiler setup. -#if __has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS) -#else +#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS) # define BOOST_NO_EXCEPTIONS #endif -#if !__has_feature(cxx_rtti) +#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI) # define BOOST_NO_RTTI #endif +#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID) +# define BOOST_NO_TYPEID +#endif + #if defined(__int64) # define BOOST_HAS_MS_INT64 #endif @@ -24,53 +27,100 @@ #define BOOST_HAS_NRVO // Clang supports "long long" in all compilation modes. +#define BOOST_HAS_LONG_LONG -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR +#if !__has_feature(cxx_auto_type) +# define BOOST_NO_CXX11_AUTO_DECLARATIONS +# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#endif + +#if !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L) +# define BOOST_NO_CXX11_CHAR16_T +# define BOOST_NO_CXX11_CHAR32_T +#endif + +#if !__has_feature(cxx_constexpr) +# define BOOST_NO_CXX11_CONSTEXPR +#endif #if !__has_feature(cxx_decltype) -# define BOOST_NO_DECLTYPE +# define BOOST_NO_CXX11_DECLTYPE #endif -#define BOOST_NO_DEFAULTED_FUNCTIONS +#if !__has_feature(cxx_decltype_incomplete_return_types) +# define BOOST_NO_CXX11_DECLTYPE_N3276 +#endif + +#if !__has_feature(cxx_defaulted_functions) +# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#endif #if !__has_feature(cxx_deleted_functions) -# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_CXX11_DELETED_FUNCTIONS #endif -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#if !__has_feature(cxx_explicit_conversions) +# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#endif #if !__has_feature(cxx_default_function_template_args) - #define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #endif -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#if !__has_feature(cxx_generalized_initializers) +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#endif + +#if !__has_feature(cxx_lambdas) +# define BOOST_NO_CXX11_LAMBDAS +#endif + +#if !__has_feature(cxx_local_type_template_args) +# define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#endif + +#if !__has_feature(cxx_noexcept) +# define BOOST_NO_CXX11_NOEXCEPT +#endif + +#if !__has_feature(cxx_nullptr) +# define BOOST_NO_CXX11_NULLPTR +#endif + +#if !__has_feature(cxx_range_for) +# define BOOST_NO_CXX11_RANGE_BASED_FOR +#endif + +#if !__has_feature(cxx_raw_string_literals) +# define BOOST_NO_CXX11_RAW_LITERALS +#endif + +#if !__has_feature(cxx_generalized_initializers) +# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +#endif #if !__has_feature(cxx_rvalue_references) -# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_CXX11_RVALUE_REFERENCES #endif #if !__has_feature(cxx_strong_enums) -# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_CXX11_SCOPED_ENUMS #endif #if !__has_feature(cxx_static_assert) -# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_CXX11_STATIC_ASSERT #endif -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS +#if !__has_feature(cxx_alias_templates) +# define BOOST_NO_CXX11_TEMPLATE_ALIASES +#endif + +#if !__has_feature(cxx_unicode_literals) +# define BOOST_NO_CXX11_UNICODE_LITERALS +#endif #if !__has_feature(cxx_variadic_templates) -# define BOOST_NO_VARIADIC_TEMPLATES +# define BOOST_NO_CXX11_VARIADIC_TEMPLATES #endif // Clang always supports variadic macros diff --git a/3party/boost/boost/config/compiler/codegear.hpp b/3party/boost/boost/config/compiler/codegear.hpp index f1887a0c0b..1a6df33520 100644 --- a/3party/boost/boost/config/compiler/codegear.hpp +++ b/3party/boost/boost/config/compiler/codegear.hpp @@ -76,7 +76,7 @@ // C++0x macros: // #if (__CODEGEARC__ <= 0x620) -#define BOOST_NO_STATIC_ASSERT +#define BOOST_NO_CXX11_STATIC_ASSERT #else #define BOOST_HAS_STATIC_ASSERT #endif @@ -91,24 +91,25 @@ // #define BOOST_HAS_STATIC_ASSERT #define BOOST_HAS_STD_TYPE_TRAITS -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX // // TR1 macros: @@ -120,7 +121,7 @@ #define BOOST_HAS_MACRO_USE_FACET -#define BOOST_NO_INITIALIZER_LISTS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST // On non-Win32 platforms let the platform config figure this out: #ifdef _WIN32 diff --git a/3party/boost/boost/config/compiler/common_edg.hpp b/3party/boost/boost/config/compiler/common_edg.hpp index c98c4751eb..441a055fa2 100644 --- a/3party/boost/boost/config/compiler/common_edg.hpp +++ b/3party/boost/boost/config/compiler/common_edg.hpp @@ -60,38 +60,41 @@ // See above for BOOST_NO_LONG_LONG // #if (__EDG_VERSION__ < 310) -# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_CXX11_EXTERN_TEMPLATE #endif #if (__EDG_VERSION__ <= 310) // No support for initializer lists -# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #endif #if (__EDG_VERSION__ < 400) -# define BOOST_NO_VARIADIC_MACROS +# define BOOST_NO_CXX11_VARIADIC_MACROS #endif -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #ifdef c_plusplus // EDG has "long long" in non-strict mode diff --git a/3party/boost/boost/config/compiler/cray.hpp b/3party/boost/boost/config/compiler/cray.hpp new file mode 100644 index 0000000000..5463ea08c7 --- /dev/null +++ b/3party/boost/boost/config/compiler/cray.hpp @@ -0,0 +1,63 @@ +// (C) Copyright John Maddock 2011. +// Use, modification and distribution are subject to 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) + +// See http://www.boost.org for most recent version. + +// Greenhills C compiler setup: + +#define BOOST_COMPILER "Cray C version " BOOST_STRINGIZE(_RELEASE) + +#if _RELEASE < 7 +# error "Boost is not configured for Cray compilers prior to version 7, please try the configure script." +#endif + +// +// Check this is a recent EDG based compiler, otherwise we don't support it here: +// +#ifndef __EDG_VERSION__ +# error "Unsupported Cray compiler, please try running the configure script." +#endif + +#include "boost/config/compiler/common_edg.hpp" + +// +// Cray peculiarities, probably version 7 specific: +// +#undef BOOST_NO_CXX11_AUTO_DECLARATIONS +#undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_HAS_NRVO +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_HAS_NRVO +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SCOPED_ENUMS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CHAR16_T +//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG +#define BOOST_MATH_DISABLE_STD_FPCLASSIFY +//#define BOOST_HAS_FPCLASSIFY + +#define BOOST_SP_USE_PTHREADS +#define BOOST_AC_USE_PTHREADS + diff --git a/3party/boost/boost/config/compiler/digitalmars.hpp b/3party/boost/boost/config/compiler/digitalmars.hpp index 27d6b8e498..15cc209d00 100644 --- a/3party/boost/boost/config/compiler/digitalmars.hpp +++ b/3party/boost/boost/config/compiler/digitalmars.hpp @@ -60,32 +60,35 @@ // // C++0x features // -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #if (__DMC__ < 0x812) -#define BOOST_NO_VARIADIC_MACROS +#define BOOST_NO_CXX11_VARIADIC_MACROS #endif #if __DMC__ < 0x800 diff --git a/3party/boost/boost/config/compiler/gcc.hpp b/3party/boost/boost/config/compiler/gcc.hpp index 90db8c56df..f42fd790ca 100644 --- a/3party/boost/boost/config/compiler/gcc.hpp +++ b/3party/boost/boost/config/compiler/gcc.hpp @@ -42,9 +42,9 @@ # define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE # define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL # define BOOST_NO_IS_ABSTRACT -# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_CXX11_EXTERN_TEMPLATE // Variadic macros do not exist for gcc versions before 3.0 -# define BOOST_NO_VARIADIC_MACROS +# define BOOST_NO_CXX11_VARIADIC_MACROS #elif __GNUC__ == 3 # if defined (__PATHSCALE__) # define BOOST_NO_TWO_PHASE_NAME_LOOKUP @@ -61,7 +61,7 @@ # if __GNUC_MINOR__ < 4 # define BOOST_NO_IS_ABSTRACT # endif -# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_CXX11_EXTERN_TEMPLATE #endif #if __GNUC__ < 4 // @@ -146,9 +146,6 @@ # endif #endif -// C++0x features not implemented in any GCC version -// -#define BOOST_NO_TEMPLATE_ALIASES // C++0x features in 4.3.n and later // @@ -161,30 +158,30 @@ # define BOOST_HAS_STATIC_ASSERT # define BOOST_HAS_VARIADIC_TMPL #else -# define BOOST_NO_DECLTYPE -# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -# define BOOST_NO_RVALUE_REFERENCES -# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_CXX11_DECLTYPE +# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_CXX11_RVALUE_REFERENCES +# define BOOST_NO_CXX11_STATIC_ASSERT // Variadic templates compiler: // http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html # if defined(__VARIADIC_TEMPLATES) || (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4) && defined(__GXX_EXPERIMENTAL_CXX0X__)) # define BOOST_HAS_VARIADIC_TMPL # else -# define BOOST_NO_VARIADIC_TEMPLATES +# define BOOST_NO_CXX11_VARIADIC_TEMPLATES # endif #endif // C++0x features in 4.4.n and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_NO_AUTO_DECLARATIONS -# define BOOST_NO_AUTO_MULTIDECLARATIONS -# define BOOST_NO_CHAR16_T -# define BOOST_NO_CHAR32_T -# define BOOST_NO_INITIALIZER_LISTS -# define BOOST_NO_DEFAULTED_FUNCTIONS -# define BOOST_NO_DELETED_FUNCTIONS +# define BOOST_NO_CXX11_AUTO_DECLARATIONS +# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CXX11_CHAR16_T +# define BOOST_NO_CXX11_CHAR32_T +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +# define BOOST_NO_CXX11_DELETED_FUNCTIONS #endif #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) @@ -194,29 +191,38 @@ // C++0x features in 4.5.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -# define BOOST_NO_LAMBDAS -# define BOOST_NO_RAW_LITERALS -# define BOOST_NO_UNICODE_LITERALS +# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_CXX11_LAMBDAS +# define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +# define BOOST_NO_CXX11_RAW_LITERALS +# define BOOST_NO_CXX11_UNICODE_LITERALS #endif // C++0x features in 4.5.1 and later // #if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40501) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_SCOPED_ENUMS before 4.5.1 +// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_CXX11_SCOPED_ENUMS before 4.5.1 // See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064 -# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_CXX11_SCOPED_ENUMS #endif // C++0x features in 4.6.n and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #endif +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define BOOST_NO_CXX11_TEMPLATE_ALIASES +#endif +// C++0x features not supported at all yet +// +#define BOOST_NO_CXX11_DECLTYPE_N3276 + #ifndef BOOST_COMPILER # define BOOST_COMPILER "GNU C++ version " __VERSION__ #endif diff --git a/3party/boost/boost/config/compiler/gcc_xml.hpp b/3party/boost/boost/config/compiler/gcc_xml.hpp index 54a9ae1bc6..eaed4b5af4 100644 --- a/3party/boost/boost/config/compiler/gcc_xml.hpp +++ b/3party/boost/boost/config/compiler/gcc_xml.hpp @@ -27,31 +27,33 @@ // C++0x features: // -# define BOOST_NO_CONSTEXPR -# define BOOST_NO_NULLPTR -# define BOOST_NO_TEMPLATE_ALIASES -# define BOOST_NO_DECLTYPE -# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -# define BOOST_NO_RVALUE_REFERENCES -# define BOOST_NO_STATIC_ASSERT -# define BOOST_NO_VARIADIC_TEMPLATES -# define BOOST_NO_VARIADIC_MACROS -# define BOOST_NO_AUTO_DECLARATIONS -# define BOOST_NO_AUTO_MULTIDECLARATIONS -# define BOOST_NO_CHAR16_T -# define BOOST_NO_CHAR32_T -# define BOOST_NO_DEFAULTED_FUNCTIONS -# define BOOST_NO_DELETED_FUNCTIONS -# define BOOST_NO_INITIALIZER_LISTS -# define BOOST_NO_SCOPED_ENUMS +# define BOOST_NO_CXX11_CONSTEXPR +# define BOOST_NO_CXX11_NULLPTR +# define BOOST_NO_CXX11_TEMPLATE_ALIASES +# define BOOST_NO_CXX11_DECLTYPE +# define BOOST_NO_CXX11_DECLTYPE_N3276 +# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_CXX11_RVALUE_REFERENCES +# define BOOST_NO_CXX11_STATIC_ASSERT +# define BOOST_NO_CXX11_VARIADIC_TEMPLATES +# define BOOST_NO_CXX11_VARIADIC_MACROS +# define BOOST_NO_CXX11_AUTO_DECLARATIONS +# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CXX11_CHAR16_T +# define BOOST_NO_CXX11_CHAR32_T +# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +# define BOOST_NO_CXX11_DELETED_FUNCTIONS +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_SCOPED_ENUMS # define BOOST_NO_SFINAE_EXPR -# define BOOST_NO_SCOPED_ENUMS -# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -# define BOOST_NO_LAMBDAS -# define BOOST_NO_RAW_LITERALS -# define BOOST_NO_UNICODE_LITERALS -# define BOOST_NO_NOEXCEPT -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_CXX11_LAMBDAS +# define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +# define BOOST_NO_CXX11_RANGE_BASED_FOR +# define BOOST_NO_CXX11_RAW_LITERALS +# define BOOST_NO_CXX11_UNICODE_LITERALS +# define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ diff --git a/3party/boost/boost/config/compiler/hp_acc.hpp b/3party/boost/boost/config/compiler/hp_acc.hpp index cc0c0af5bc..4f5f81b3c3 100644 --- a/3party/boost/boost/config/compiler/hp_acc.hpp +++ b/3party/boost/boost/config/compiler/hp_acc.hpp @@ -92,29 +92,32 @@ // #if !defined(__EDG__) -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES /* See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and @@ -122,7 +125,7 @@ */ #if (__HP_aCC < 62500) || !defined(HP_CXX0x_SOURCE) - #define BOOST_NO_VARIADIC_MACROS + #define BOOST_NO_CXX11_VARIADIC_MACROS #endif #endif diff --git a/3party/boost/boost/config/compiler/intel.hpp b/3party/boost/boost/config/compiler/intel.hpp index faa080fc6b..8c746c1870 100644 --- a/3party/boost/boost/config/compiler/intel.hpp +++ b/3party/boost/boost/config/compiler/intel.hpp @@ -27,7 +27,7 @@ #endif // Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x' -#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && __STDC_HOSTED__) || defined(__GXX_EXPERIMENTAL_CPP0X__) +#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) # define BOOST_INTEL_STDCXX0X #endif #if defined(_MSC_VER) && (_MSC_VER >= 1600) @@ -179,8 +179,9 @@ template<> struct assert_intrinsic_wchar_t {}; // intel-vc9-win-11.1 may leave a non-POD array uninitialized, in some // cases when it should be value-initialized. // (Niels Dekker, LKEB, May 2010) +// Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression). #if defined(__INTEL_COMPILER) -# if __INTEL_COMPILER <= 1110 +# if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999) # define BOOST_NO_COMPLETE_VALUE_INITIALIZATION # endif #endif @@ -198,26 +199,54 @@ template<> struct assert_intrinsic_wchar_t {}; // - ICC added static_assert in 11.0 (first version with C++0x support) // #if defined(BOOST_INTEL_STDCXX0X) -# undef BOOST_NO_STATIC_ASSERT +# undef BOOST_NO_CXX11_STATIC_ASSERT // // These pass our test cases, but aren't officially supported according to: // http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/ // -//# undef BOOST_NO_LAMBDAS -//# undef BOOST_NO_DECLTYPE -//# undef BOOST_NO_AUTO_DECLARATIONS -//# undef BOOST_NO_AUTO_MULTIDECLARATIONS +//# undef BOOST_NO_CXX11_LAMBDAS +//# undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +//# undef BOOST_NO_CXX11_DECLTYPE +//# undef BOOST_NO_CXX11_AUTO_DECLARATIONS +//# undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #endif #if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION >= 1200) -# undef BOOST_NO_RVALUE_REFERENCES -//# undef BOOST_NO_SCOPED_ENUMS // doesn't really work!! -# undef BOOST_NO_DELETED_FUNCTIONS -# undef BOOST_NO_DEFAULTED_FUNCTIONS -# undef BOOST_NO_LAMBDAS -# undef BOOST_NO_DECLTYPE -# undef BOOST_NO_AUTO_DECLARATIONS -# undef BOOST_NO_AUTO_MULTIDECLARATIONS +//# undef BOOST_NO_CXX11_RVALUE_REFERENCES // Enabling this breaks Filesystem and Exception libraries +//# undef BOOST_NO_CXX11_SCOPED_ENUMS // doesn't really work!! +# undef BOOST_NO_CXX11_DELETED_FUNCTIONS +# undef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +# undef BOOST_NO_CXX11_LAMBDAS +# undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +# undef BOOST_NO_CXX11_DECLTYPE +# undef BOOST_NO_CXX11_AUTO_DECLARATIONS +# undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#endif + +// icl Version 12.1.0.233 Build 20110811 and possibly some other builds +// had an incorrect __INTEL_COMPILER value of 9999. Intel say this has been fixed. +#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION > 1200) +# undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +# undef BOOST_NO_CXX11_NULLPTR +# undef BOOST_NO_CXX11_RVALUE_REFERENCES +# undef BOOST_NO_SFINAE_EXPR +# undef BOOST_NO_CXX11_TEMPLATE_ALIASES +# undef BOOST_NO_CXX11_VARIADIC_TEMPLATES + +// http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/ +// continues to list scoped enum support as "Partial" +//# undef BOOST_NO_CXX11_SCOPED_ENUMS +#endif + +#if defined(_MSC_VER) && (_MSC_VER <= 1700) +// +// Although the Intel compiler is capable of supporting these, it appears not to in MSVC compatibility mode: +// +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_VARIADIC_TEMPLATES +# define BOOST_NO_CXX11_DELETED_FUNCTIONS +# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +# define BOOST_NO_CXX11_TEMPLATE_ALIASES #endif #if (BOOST_INTEL_CXX_VERSION < 1200) diff --git a/3party/boost/boost/config/compiler/metrowerks.hpp b/3party/boost/boost/config/compiler/metrowerks.hpp index fb0401fea4..184cb71c1f 100644 --- a/3party/boost/boost/config/compiler/metrowerks.hpp +++ b/3party/boost/boost/config/compiler/metrowerks.hpp @@ -90,32 +90,35 @@ #if __MWERKS__ > 0x3206 && __option(rvalue_refs) # define BOOST_HAS_RVALUE_REFS #else -# define BOOST_NO_RVALUE_REFERENCES +# define BOOST_NO_CXX11_RVALUE_REFERENCES #endif -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_VARIADIC_MACROS -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_VARIADIC_MACROS +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) diff --git a/3party/boost/boost/config/compiler/mpw.hpp b/3party/boost/boost/config/compiler/mpw.hpp index e372f093ce..14adee0cc6 100644 --- a/3party/boost/boost/config/compiler/mpw.hpp +++ b/3party/boost/boost/config/compiler/mpw.hpp @@ -40,31 +40,34 @@ // // See boost\config\suffix.hpp for BOOST_NO_LONG_LONG // -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_VARIADIC_MACROS -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_VARIADIC_MACROS +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX // // versions check: diff --git a/3party/boost/boost/config/compiler/pathscale.hpp b/3party/boost/boost/config/compiler/pathscale.hpp index 5f9444c477..3041126353 100644 --- a/3party/boost/boost/config/compiler/pathscale.hpp +++ b/3party/boost/boost/config/compiler/pathscale.hpp @@ -32,48 +32,49 @@ # define BOOST_HAS_EXPM1 # define BOOST_HAS_DIRENT_H # define BOOST_HAS_CLOCK_GETTIME -# define BOOST_NO_VARIADIC_TEMPLATES -# define BOOST_NO_UNICODE_LITERALS -# define BOOST_NO_TEMPLATE_ALIASES -# define BOOST_NO_STD_UNORDERED -# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_CXX11_VARIADIC_TEMPLATES +# define BOOST_NO_CXX11_UNICODE_LITERALS +# define BOOST_NO_CXX11_TEMPLATE_ALIASES +# define BOOST_NO_CXX11_STATIC_ASSERT # define BOOST_NO_SFINAE_EXPR -# define BOOST_NO_SCOPED_ENUMS -# define BOOST_NO_RVALUE_REFERENCES -# define BOOST_NO_RAW_LITERALS -# define BOOST_NO_NULLPTR -# define BOOST_NO_NUMERIC_LIMITS_LOWEST -# define BOOST_NO_NOEXCEPT -# define BOOST_NO_LAMBDAS -# define BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_CXX11_SCOPED_ENUMS +# define BOOST_NO_CXX11_RVALUE_REFERENCES +# define BOOST_NO_CXX11_RANGE_BASED_FOR +# define BOOST_NO_CXX11_RAW_LITERALS +# define BOOST_NO_CXX11_NULLPTR +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_NOEXCEPT +# define BOOST_NO_CXX11_LAMBDAS +# define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS # define BOOST_NO_MS_INT64_NUMERIC_LIMITS -# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -# define BOOST_NO_DELETED_FUNCTIONS -# define BOOST_NO_DEFAULTED_FUNCTIONS -# define BOOST_NO_DECLTYPE -# define BOOST_NO_CONSTEXPR +# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_CXX11_DELETED_FUNCTIONS +# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +# define BOOST_NO_CXX11_DECLTYPE +# define BOOST_NO_CXX11_DECLTYPE_N3276 +# define BOOST_NO_CXX11_CONSTEXPR # define BOOST_NO_COMPLETE_VALUE_INITIALIZATION -# define BOOST_NO_CHAR32_T -# define BOOST_NO_CHAR16_T -# define BOOST_NO_AUTO_MULTIDECLARATIONS -# define BOOST_NO_AUTO_DECLARATIONS -# define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CHRONO +# define BOOST_NO_CXX11_CHAR32_T +# define BOOST_NO_CXX11_CHAR16_T +# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CXX11_AUTO_DECLARATIONS +# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CHRONO #endif diff --git a/3party/boost/boost/config/compiler/pgi.hpp b/3party/boost/boost/config/compiler/pgi.hpp index 3c80313344..fa32fefb48 100644 --- a/3party/boost/boost/config/compiler/pgi.hpp +++ b/3party/boost/boost/config/compiler/pgi.hpp @@ -1,6 +1,6 @@ // (C) Copyright Noel Belcourt 2007. -// Use, modification and distribution are subject to the -// Boost Software License, Version 1.0. (See accompanying file +// Use, modification and distribution are subject to 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) // See http://www.boost.org for most recent version. @@ -8,7 +8,7 @@ // PGI C++ compiler setup: #define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__ -#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(_COMPILER_VERSION) +#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) // // Threading support: @@ -16,13 +16,29 @@ // if no threading API is detected. // -// PGI 10.x doesn't seem to define __PGIC__ - -// versions earlier than 10.x do define __PGIC__ -#if __PGIC__ >= 10 +#if __PGIC__ >= 11 // options requested by configure --enable-test #define BOOST_HAS_PTHREADS +#define BOOST_HAS_THREADS +#define BOOST_HAS_PTHREAD_YIELD +#define BOOST_HAS_NRVO +#define BOOST_HAS_LONG_LONG + +// options --enable-test wants undefined +#undef BOOST_NO_STDC_NAMESPACE +#undef BOOST_NO_EXCEPTION_STD_NAMESPACE +#undef BOOST_DEDUCED_TYPENAME + +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS + +#elif __PGIC__ >= 10 + +// options requested by configure --enable-test +#define BOOST_HAS_THREADS #define BOOST_HAS_NRVO #define BOOST_HAS_LONG_LONG @@ -33,11 +49,11 @@ #elif __PGIC__ >= 7 -#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL +#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #define BOOST_NO_TWO_PHASE_NAME_LOOKUP #define BOOST_NO_SWPRINTF -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS #else @@ -49,29 +65,52 @@ // // See boost\config\suffix.hpp for BOOST_NO_LONG_LONG // -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_NUMERIC_LIMITS +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_VARIADIC_MACROS -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_SWPRINTF +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_VARIADIC_MACROS +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX + +#define BOOST_NO_CXX11_HDR_UNORDERED_SET +#define BOOST_NO_CXX11_HDR_UNORDERED_MAP +#define BOOST_NO_CXX11_HDR_TYPEINDEX +#define BOOST_NO_CXX11_HDR_TYPE_TRAITS +#define BOOST_NO_CXX11_HDR_TUPLE +#define BOOST_NO_CXX11_HDR_THREAD +#define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +#define BOOST_NO_CXX11_HDR_REGEX +#define BOOST_NO_CXX11_HDR_RATIO +#define BOOST_NO_CXX11_HDR_RANDOM +#define BOOST_NO_CXX11_HDR_MUTEX +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_HDR_FUTURE +#define BOOST_NO_CXX11_HDR_FORWARD_LIST +#define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +#define BOOST_NO_CXX11_HDR_CODECVT +#define BOOST_NO_CXX11_HDR_CHRONO +#define BOOST_NO_CXX11_HDR_ARRAY // // version check: diff --git a/3party/boost/boost/config/compiler/sunpro_cc.hpp b/3party/boost/boost/config/compiler/sunpro_cc.hpp index 206b53f0fd..65beb50198 100644 --- a/3party/boost/boost/config/compiler/sunpro_cc.hpp +++ b/3party/boost/boost/config/compiler/sunpro_cc.hpp @@ -99,31 +99,34 @@ // # define BOOST_HAS_LONG_LONG -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DECLTYPE -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_EXTERN_TEMPLATE -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS +#define BOOST_NO_CXX11_AUTO_DECLARATIONS +#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_EXTERN_TEMPLATE +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES -#define BOOST_NO_VARIADIC_MACROS -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_VARIADIC_MACROS +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX // // Version diff --git a/3party/boost/boost/config/compiler/vacpp.hpp b/3party/boost/boost/config/compiler/vacpp.hpp index 52500202b4..2410d5a3ab 100644 --- a/3party/boost/boost/config/compiler/vacpp.hpp +++ b/3party/boost/boost/config/compiler/vacpp.hpp @@ -71,48 +71,59 @@ // See boost\config\suffix.hpp for BOOST_NO_LONG_LONG // #if ! __IBMCPP_AUTO_TYPEDEDUCTION -# define BOOST_NO_AUTO_DECLARATIONS -# define BOOST_NO_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CXX11_AUTO_DECLARATIONS +# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS #endif #if ! __IBMCPP_UTF_LITERAL__ -# define BOOST_NO_CHAR16_T -# define BOOST_NO_CHAR32_T +# define BOOST_NO_CXX11_CHAR16_T +# define BOOST_NO_CXX11_CHAR32_T +#endif +#if ! __IBMCPP_CONSTEXPR +# define BOOST_NO_CXX11_CONSTEXPR #endif -#define BOOST_NO_CONSTEXPR #if ! __IBMCPP_DECLTYPE -# define BOOST_NO_DECLTYPE +# define BOOST_NO_CXX11_DECLTYPE #else # define BOOST_HAS_DECLTYPE #endif -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#if ! __IBMCPP_EXPLICIT_CONVERSION_OPERATORS +# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#endif #if ! __IBMCPP_EXTERN_TEMPLATE -# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_CXX11_EXTERN_TEMPLATE #endif #if ! __IBMCPP_VARIADIC_TEMPLATES // not enabled separately at this time -# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#endif +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_LAMBDAS +#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS +#if ! __IBMCPP_RVALUE_REFERENCES +# define BOOST_NO_CXX11_RVALUE_REFERENCES +#endif +#if ! __IBMCPP_SCOPED_ENUM +# define BOOST_NO_CXX11_SCOPED_ENUMS #endif -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_NULLPTR -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #if ! __IBMCPP_STATIC_ASSERT -# define BOOST_NO_STATIC_ASSERT +# define BOOST_NO_CXX11_STATIC_ASSERT #endif -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS #if ! __IBMCPP_VARIADIC_TEMPLATES -# define BOOST_NO_VARIADIC_TEMPLATES +# define BOOST_NO_CXX11_VARIADIC_TEMPLATES #endif #if ! __C99_MACRO_WITH_VA_ARGS -# define BOOST_NO_VARIADIC_MACROS +# define BOOST_NO_CXX11_VARIADIC_MACROS #endif diff --git a/3party/boost/boost/config/compiler/visualc.hpp b/3party/boost/boost/config/compiler/visualc.hpp index d2dfa7ef0a..0b11faaf44 100644 --- a/3party/boost/boost/config/compiler/visualc.hpp +++ b/3party/boost/boost/config/compiler/visualc.hpp @@ -9,38 +9,54 @@ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. - +// // Microsoft Visual C++ compiler setup: +// +// We need to be careful with the checks in this file, as contrary +// to popular belief there are versions with _MSC_VER with the final +// digit non-zero (mainly the MIPS cross compiler). +// +// So we either test _MSC_VER >= XXXX or else _MSC_VER < XXXX. +// No other comparisons (==, >, or <=) are safe. +// #define BOOST_MSVC _MSC_VER +// +// Helper macro BOOST_MSVC_FULL_VER for use in Boost code: +// #if _MSC_FULL_VER > 100000000 # define BOOST_MSVC_FULL_VER _MSC_FULL_VER #else # define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10) #endif -// turn off the warnings before we #include anything +// Attempt to suppress VC6 warnings about the length of decorated names (obsolete): #pragma warning( disable : 4503 ) // warning: decorated name length exceeded +// +// versions check: +// we don't support Visual C++ prior to version 6: +#if _MSC_VER < 1200 +# error "Compiler not supported or configured - please reconfigure" +#endif + #if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1200-1202 == eVC++4 # pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS # define BOOST_NO_VOID_RETURNS # define BOOST_NO_EXCEPTION_STD_NAMESPACE -# if BOOST_MSVC == 1202 +# if _MSC_VER == 1202 # define BOOST_NO_STD_TYPEINFO # endif - // disable min/max macro defines on vc6: - // #endif /// Visual Studio has no fenv.h #define BOOST_NO_FENV_H -#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0 +#if (_MSC_VER < 1310) // 130X == VC++ 7.0 # if !defined(_MSC_EXTENSIONS) && !defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) // VC7 bug with /Za # define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS @@ -72,7 +88,7 @@ # define BOOST_NO_IS_ABSTRACT # define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS // TODO: what version is meant here? Have there really been any fixes in cl 12.01 (as e.g. shipped with eVC4)? -# if (_MSC_VER > 1200) +# if (_MSC_VER >= 1300) # define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS # endif @@ -83,9 +99,9 @@ // it appears not to actually work: # define BOOST_NO_SWPRINTF // Our extern template tests also fail for this compiler: -# define BOOST_NO_EXTERN_TEMPLATE +# define BOOST_NO_CXX11_EXTERN_TEMPLATE // Variadic macros do not exist for VC7.1 and lower -# define BOOST_NO_VARIADIC_MACROS +# define BOOST_NO_CXX11_VARIADIC_MACROS #endif #if defined(UNDER_CE) @@ -93,17 +109,16 @@ # define BOOST_NO_SWPRINTF #endif -#if _MSC_VER <= 1400 // 1400 == VC++ 8.0 +#if _MSC_VER < 1500 // 140X == VC++ 8.0 # define BOOST_NO_MEMBER_TEMPLATE_FRIENDS #endif -#if _MSC_VER == 1500 // 1500 == VC++ 9.0 +#if _MSC_VER < 1600 // 150X == VC++ 9.0 // A bug in VC9: # define BOOST_NO_ADL_BARRIER #endif -#if (_MSC_VER <= 1600) // MSVC (including the latest checked version) has not yet completely // implemented value-initialization, as is reported: // "VC++ does not value-initialize members of derived classes without @@ -117,11 +132,10 @@ // https://connect.microsoft.com/VisualStudio/feedback/details/100744 // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues // (Niels Dekker, LKEB, May 2010) -#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION -#endif +# define BOOST_NO_COMPLETE_VALUE_INITIALIZATION -#if _MSC_VER <= 1500 || !defined(BOOST_STRICT_CONFIG) // 1500 == VC++ 9.0 -# define BOOST_NO_INITIALIZER_LISTS +#if _MSC_VER < 1600 || !defined(BOOST_STRICT_CONFIG) // 150X == VC++ 9.0 +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST #endif #ifndef _NATIVE_WCHAR_T_DEFINED @@ -177,37 +191,44 @@ // C++ features supported by VC++ 10 (aka 2010) // #if _MSC_VER < 1600 -#define BOOST_NO_AUTO_DECLARATIONS -#define BOOST_NO_AUTO_MULTIDECLARATIONS -#define BOOST_NO_LAMBDAS -#define BOOST_NO_RVALUE_REFERENCES -#define BOOST_NO_STATIC_ASSERT -#define BOOST_NO_NULLPTR -#define BOOST_NO_DECLTYPE +# define BOOST_NO_CXX11_AUTO_DECLARATIONS +# define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +# define BOOST_NO_CXX11_LAMBDAS +# define BOOST_NO_CXX11_RVALUE_REFERENCES +# define BOOST_NO_CXX11_STATIC_ASSERT +# define BOOST_NO_CXX11_NULLPTR +# define BOOST_NO_CXX11_DECLTYPE #endif // _MSC_VER < 1600 #if _MSC_VER >= 1600 -#define BOOST_HAS_STDINT_H +# define BOOST_HAS_STDINT_H #endif +// C++ features supported by VC++ 11 (aka 2012) +// +#if _MSC_VER < 1700 +# define BOOST_NO_CXX11_RANGE_BASED_FOR +# define BOOST_NO_CXX11_SCOPED_ENUMS +#endif // _MSC_VER < 1700 + // C++0x features not supported by any versions -#define BOOST_NO_CHAR16_T -#define BOOST_NO_CHAR32_T -#define BOOST_NO_CONSTEXPR -#define BOOST_NO_DEFAULTED_FUNCTIONS -#define BOOST_NO_DELETED_FUNCTIONS -#define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_INITIALIZER_LISTS -#define BOOST_NO_NOEXCEPT -#define BOOST_NO_RAW_LITERALS -#define BOOST_NO_SCOPED_ENUMS -#define BOOST_NO_TEMPLATE_ALIASES -#define BOOST_NO_UNICODE_LITERALS -#define BOOST_NO_VARIADIC_TEMPLATES +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_RAW_LITERALS +#define BOOST_NO_CXX11_TEMPLATE_ALIASES +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_TWO_PHASE_NAME_LOOKUP -#define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX // // prefix and suffix headers: // @@ -218,6 +239,7 @@ # define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp" #endif +#ifndef BOOST_COMPILER // TODO: // these things are mostly bogus. 1200 means version 12.0 of the compiler. The // artificial versions assigned to them only refer to the versions of some IDE @@ -229,12 +251,21 @@ // Note: these are so far off, they are not really supported # elif _MSC_VER < 1300 // eVC++ 4 comes with 1200-1202 # define BOOST_COMPILER_VERSION evc4.0 -# elif _MSC_VER == 1400 +# elif _MSC_VER < 1400 + // Note: I'm not aware of any CE compiler with version 13xx +# if defined(BOOST_ASSERT_CONFIG) +# error "Unknown EVC++ compiler version - please run the configure tests and report the results" +# else +# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") +# endif +# elif _MSC_VER < 1500 # define BOOST_COMPILER_VERSION evc8 -# elif _MSC_VER == 1500 +# elif _MSC_VER < 1600 # define BOOST_COMPILER_VERSION evc9 -# elif _MSC_VER == 1600 +# elif _MSC_VER < 1700 # define BOOST_COMPILER_VERSION evc10 +# elif _MSC_VER < 1800 +# define BOOST_COMPILER_VERSION evc11 # else # if defined(BOOST_ASSERT_CONFIG) # error "Unknown EVC++ compiler version - please run the configure tests and report the results" @@ -248,32 +279,29 @@ # define BOOST_COMPILER_VERSION 5.0 # elif _MSC_VER < 1300 # define BOOST_COMPILER_VERSION 6.0 -# elif _MSC_VER == 1300 +# elif _MSC_VER < 1310 # define BOOST_COMPILER_VERSION 7.0 -# elif _MSC_VER == 1310 +# elif _MSC_VER < 1400 # define BOOST_COMPILER_VERSION 7.1 -# elif _MSC_VER == 1400 +# elif _MSC_VER < 1500 # define BOOST_COMPILER_VERSION 8.0 -# elif _MSC_VER == 1500 +# elif _MSC_VER < 1600 # define BOOST_COMPILER_VERSION 9.0 -# elif _MSC_VER == 1600 +# elif _MSC_VER < 1700 # define BOOST_COMPILER_VERSION 10.0 +# elif _MSC_VER < 1800 +# define BOOST_COMPILER_VERSION 11.0 # else # define BOOST_COMPILER_VERSION _MSC_VER # endif # endif -#define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) +# define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) +#endif // -// versions check: -// we don't support Visual C++ prior to version 6: -#if _MSC_VER < 1200 -#error "Compiler not supported or configured - please reconfigure" -#endif -// -// last known and checked version is 1600 (VC10, aka 2010): -#if (_MSC_VER > 1600) +// last known and checked version is 1700 (VC11, aka 2011): +#if (_MSC_VER > 1700) # if defined(BOOST_ASSERT_CONFIG) # error "Unknown compiler version - please run the configure tests and report the results" # else diff --git a/3party/boost/boost/config/platform/cray.hpp b/3party/boost/boost/config/platform/cray.hpp new file mode 100644 index 0000000000..5c476e4160 --- /dev/null +++ b/3party/boost/boost/config/platform/cray.hpp @@ -0,0 +1,18 @@ +// (C) Copyright John Maddock 2011. +// Use, modification and distribution are subject to 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) + + +// See http://www.boost.org for most recent version. + +// SGI Irix specific config options: + +#define BOOST_PLATFORM "Cray" + +// boilerplate code: +#define BOOST_HAS_UNISTD_H +#include + + + diff --git a/3party/boost/boost/config/platform/win32.hpp b/3party/boost/boost/config/platform/win32.hpp index 72c3dcebdc..39220127b2 100644 --- a/3party/boost/boost/config/platform/win32.hpp +++ b/3party/boost/boost/config/platform/win32.hpp @@ -55,6 +55,8 @@ #ifdef _WIN32_WCE # define BOOST_NO_ANSI_APIS +#else +# define BOOST_HAS_GETSYSTEMTIMEASFILETIME #endif #ifndef BOOST_HAS_PTHREADS diff --git a/3party/boost/boost/config/select_compiler_config.hpp b/3party/boost/boost/config/select_compiler_config.hpp index 34a4da5889..0d47b25424 100644 --- a/3party/boost/boost/config/select_compiler_config.hpp +++ b/3party/boost/boost/config/select_compiler_config.hpp @@ -17,6 +17,10 @@ // GCC-XML emulates other compilers, it has to appear first here! # define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc_xml.hpp" +#elif defined(_CRAYC) +// EDG based Cray compiler: +# define BOOST_COMPILER_CONFIG "boost/config/compiler/cray.hpp" + #elif defined __CUDACC__ // NVIDIA CUDA C++ compiler for GPU # define BOOST_COMPILER_CONFIG "boost/config/compiler/nvcc.hpp" diff --git a/3party/boost/boost/config/select_platform_config.hpp b/3party/boost/boost/config/select_platform_config.hpp index bc1ffaf69f..2af61d2d46 100644 --- a/3party/boost/boost/config/select_platform_config.hpp +++ b/3party/boost/boost/config/select_platform_config.hpp @@ -13,7 +13,7 @@ // in order to prevent macro expansion within the header // name (for example "linux" is a macro on linux systems). -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) +#if (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC) // linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though? # define BOOST_PLATFORM_CONFIG "boost/config/platform/linux.hpp" @@ -69,6 +69,10 @@ // Symbian: # define BOOST_PLATFORM_CONFIG "boost/config/platform/symbian.hpp" +#elif defined(_CRAYC) +// Cray: +# define BOOST_PLATFORM_CONFIG "boost/config/platform/cray.hpp" + #elif defined(__VMS) // VMS: # define BOOST_PLATFORM_CONFIG "boost/config/platform/vms.hpp" diff --git a/3party/boost/boost/config/stdlib/dinkumware.hpp b/3party/boost/boost/config/stdlib/dinkumware.hpp index 2da1bf72ec..e0032b9d49 100644 --- a/3party/boost/boost/config/stdlib/dinkumware.hpp +++ b/3party/boost/boost/config/stdlib/dinkumware.hpp @@ -94,34 +94,37 @@ // C++0x headers implemented in 520 (as shipped by Microsoft) // #if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520 -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_SMART_PTR #endif -#if !defined(_HAS_TR1_IMPORTS) && !defined(BOOST_NO_0X_HDR_TUPLE) -# define BOOST_NO_0X_HDR_TUPLE +#if (!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE) +# define BOOST_NO_CXX11_HDR_TUPLE #endif // // C++0x headers not yet (fully) implemented: // -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR #ifdef _CPPLIB_VER # define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER diff --git a/3party/boost/boost/config/stdlib/libcomo.hpp b/3party/boost/boost/config/stdlib/libcomo.hpp index 341cf9708a..29490f1b13 100644 --- a/3party/boost/boost/config/stdlib/libcomo.hpp +++ b/3party/boost/boost/config/stdlib/libcomo.hpp @@ -35,26 +35,29 @@ // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL // // Intrinsic type_traits support. diff --git a/3party/boost/boost/config/stdlib/libcpp.hpp b/3party/boost/boost/config/stdlib/libcpp.hpp index 07c7043331..3d574407ec 100644 --- a/3party/boost/boost/config/stdlib/libcpp.hpp +++ b/3party/boost/boost/config/stdlib/libcpp.hpp @@ -20,15 +20,16 @@ #define BOOST_HAS_THREADS #ifdef _LIBCPP_HAS_NO_VARIADICS -# define BOOST_NO_0X_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TUPLE #endif // // These appear to be unusable/incomplete so far: // -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR // libc++ uses a non-standard messages_base #define BOOST_NO_STD_MESSAGES diff --git a/3party/boost/boost/config/stdlib/libstdcpp3.hpp b/3party/boost/boost/config/stdlib/libstdcpp3.hpp index 52d5837349..c56dff225c 100644 --- a/3party/boost/boost/config/stdlib/libstdcpp3.hpp +++ b/3party/boost/boost/config/stdlib/libstdcpp3.hpp @@ -33,7 +33,9 @@ #ifdef __GLIBCXX__ // gcc 3.4 and greater: # if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ - || defined(_GLIBCXX__PTHREADS) + || defined(_GLIBCXX__PTHREADS) \ + || defined(_GLIBCXX_HAS_GTHREADS) \ + || defined(_WIN32) // // If the std lib has thread support turned on, then turn it on in Boost // as well. We do this because some gcc-3.4 std lib headers define _REENTANT @@ -103,51 +105,61 @@ // C++0x headers in GCC 4.3.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_HDR_FUNCTIONAL #endif // C++0x headers in GCC 4.4.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_SMART_PTR #else # define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG # define BOOST_HAS_TR1_COMPLEX_OVERLOADS #endif -#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1)) && (!defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_0X_HDR_MUTEX)) -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_MUTEX +#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1)) && (!defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) || !defined(BOOST_NO_CXX11_HDR_MUTEX)) +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_MUTEX #endif // C++0x features in GCC 4.5.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_NO_NUMERIC_LIMITS_LOWEST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_RANDOM +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_RANDOM #endif -// C++0x features in GCC 4.5.0 and later +// C++0x features in GCC 4.6.0 and later // #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6) || !defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_NO_0X_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_TYPEINDEX +#endif + +// C++0x features in GCC 4.7.0 and later +// +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +// Note that although existed prior to 4.7, "stead_clock" is spelled "monotonic_clock" +// so 4.7.0 is the first truely conforming one. +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_ALLOCATOR #endif // C++0x headers not yet (fully!) implemented // -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR // --- end --- diff --git a/3party/boost/boost/config/stdlib/modena.hpp b/3party/boost/boost/config/stdlib/modena.hpp index 626e712b5d..b483b6e024 100644 --- a/3party/boost/boost/config/stdlib/modena.hpp +++ b/3party/boost/boost/config/stdlib/modena.hpp @@ -24,26 +24,29 @@ // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "Modena C++ standard library" diff --git a/3party/boost/boost/config/stdlib/msl.hpp b/3party/boost/boost/config/stdlib/msl.hpp index adb3d4787d..4f9a2da6ee 100644 --- a/3party/boost/boost/config/stdlib/msl.hpp +++ b/3party/boost/boost/config/stdlib/msl.hpp @@ -48,26 +48,29 @@ // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) diff --git a/3party/boost/boost/config/stdlib/roguewave.hpp b/3party/boost/boost/config/stdlib/roguewave.hpp index 95ac36c6b8..cb80f57082 100644 --- a/3party/boost/boost/config/stdlib/roguewave.hpp +++ b/3party/boost/boost/config/stdlib/roguewave.hpp @@ -155,29 +155,32 @@ #endif #if _RWSTD_VER < 0x05000000 -# define BOOST_NO_0X_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_ARRAY #endif // type_traits header is incomplete: -# define BOOST_NO_0X_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS // // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL diff --git a/3party/boost/boost/config/stdlib/sgi.hpp b/3party/boost/boost/config/stdlib/sgi.hpp index c8d77d55d4..ae9b6ad908 100644 --- a/3party/boost/boost/config/stdlib/sgi.hpp +++ b/3party/boost/boost/config/stdlib/sgi.hpp @@ -118,26 +118,29 @@ // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "SGI standard library" diff --git a/3party/boost/boost/config/stdlib/stlport.hpp b/3party/boost/boost/config/stdlib/stlport.hpp index d306999221..bcc30b99e7 100644 --- a/3party/boost/boost/config/stdlib/stlport.hpp +++ b/3party/boost/boost/config/stdlib/stlport.hpp @@ -71,10 +71,6 @@ # endif #endif -#if defined(_STLPORT_VERSION) && ((_STLPORT_VERSION < 0x500) || (_STLPORT_VERSION >= 0x520)) -# define BOOST_NO_STD_UNORDERED -#endif - #if defined(_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x520) # define BOOST_HAS_TR1_UNORDERED_SET # define BOOST_HAS_TR1_UNORDERED_MAP @@ -212,26 +208,29 @@ namespace boost { using std::min; using std::max; } // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) diff --git a/3party/boost/boost/config/stdlib/vacpp.hpp b/3party/boost/boost/config/stdlib/vacpp.hpp index 32a1fc08b7..9d16946552 100644 --- a/3party/boost/boost/config/stdlib/vacpp.hpp +++ b/3party/boost/boost/config/stdlib/vacpp.hpp @@ -24,26 +24,29 @@ // C++0x headers not yet implemented // -# define BOOST_NO_0X_HDR_ARRAY -# define BOOST_NO_0X_HDR_CHRONO -# define BOOST_NO_0X_HDR_CODECVT -# define BOOST_NO_0X_HDR_CONDITION_VARIABLE -# define BOOST_NO_0X_HDR_FORWARD_LIST -# define BOOST_NO_0X_HDR_FUTURE -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -# define BOOST_NO_0X_HDR_MUTEX -# define BOOST_NO_0X_HDR_RANDOM -# define BOOST_NO_0X_HDR_RATIO -# define BOOST_NO_0X_HDR_REGEX -# define BOOST_NO_0X_HDR_SYSTEM_ERROR -# define BOOST_NO_0X_HDR_THREAD -# define BOOST_NO_0X_HDR_TUPLE -# define BOOST_NO_0X_HDR_TYPE_TRAITS -# define BOOST_NO_0X_HDR_TYPEINDEX -# define BOOST_NO_STD_UNORDERED // deprecated; see following -# define BOOST_NO_0X_HDR_UNORDERED_MAP -# define BOOST_NO_0X_HDR_UNORDERED_SET -# define BOOST_NO_NUMERIC_LIMITS_LOWEST +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CODECVT +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +# define BOOST_NO_CXX11_NUMERIC_LIMITS +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_HDR_FUNCTIONAL #define BOOST_STDLIB "Visual Age default standard library" diff --git a/3party/boost/boost/config/suffix.hpp b/3party/boost/boost/config/suffix.hpp index 30622872bc..2d2481327a 100644 --- a/3party/boost/boost/config/suffix.hpp +++ b/3party/boost/boost/config/suffix.hpp @@ -103,13 +103,6 @@ # define BOOST_NO_LONG_LONG_NUMERIC_LIMITS #endif -// -// Normalize BOOST_NO_STATIC_ASSERT and (depricated) BOOST_HAS_STATIC_ASSERT: -// -#if !defined(BOOST_NO_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT) -# define BOOST_HAS_STATIC_ASSERT -#endif - // // if there is no __int64 then there is no specialisation // for numeric_limits<__int64> either: @@ -334,31 +327,6 @@ # define BOOST_HASH_MAP_HEADER #endif -// -// Set BOOST_NO_INITIALIZER_LISTS if there is no library support. -// - -#if defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) -# define BOOST_NO_INITIALIZER_LISTS -#endif -#if defined(BOOST_NO_INITIALIZER_LISTS) && !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST) -# define BOOST_NO_0X_HDR_INITIALIZER_LIST -#endif - -// -// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_RVALUE_REFERENCES is not defined -// -#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS) -#define BOOST_HAS_RVALUE_REFS -#endif - -// -// Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_VARIADIC_TEMPLATES is not defined -// -#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL) -#define BOOST_HAS_VARIADIC_TMPL -#endif - // BOOST_HAS_ABI_HEADERS // This macro gets set if we have headers that fix the ABI, // and prevent ODR violations when linking to external libraries: @@ -654,6 +622,260 @@ namespace std{ using ::type_info; } # define BOOST_GPU_ENABLED # endif +// BOOST_FORCEINLINE ---------------------------------------------// +// Macro to use in place of 'inline' to force a function to be inline +#if !defined(BOOST_FORCEINLINE) +# if defined(_MSC_VER) +# define BOOST_FORCEINLINE __forceinline +# elif defined(__GNUC__) && __GNUC__ > 3 +# define BOOST_FORCEINLINE inline __attribute__ ((always_inline)) +# else +# define BOOST_FORCEINLINE inline +# endif +#endif + +// +// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined +// +#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276) +#define BOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE +#endif + +// -------------------- Deprecated macros for 1.50 --------------------------- +// These will go away in a future release + +// Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP +// instead of BOOST_NO_STD_UNORDERED +#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET) +# ifndef BOOST_NO_STD_UNORDERED +# define BOOST_NO_STD_UNORDERED +# endif +#endif + +// Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS +#if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS) +# define BOOST_NO_INITIALIZER_LISTS +#endif + +// Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY +#if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_BOOST_NO_0X_HDR_ARRAY) +# define BOOST_NO_0X_HDR_ARRAY +#endif +// Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO +#if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO) +# define BOOST_NO_0X_HDR_CHRONO +#endif +// Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT +#if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT) +# define BOOST_NO_0X_HDR_CODECVT +#endif +// Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE +#if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE) +# define BOOST_NO_0X_HDR_CONDITION_VARIABLE +#endif +// Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST +#if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST) +# define BOOST_NO_0X_HDR_FORWARD_LIST +#endif +// Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE +#if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE) +# define BOOST_NO_0X_HDR_FUTURE +#endif + +// Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST +// instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS +#ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST +# ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST +# define BOOST_NO_0X_HDR_INITIALIZER_LIST +# endif +# ifndef BOOST_NO_INITIALIZER_LISTS +# define BOOST_NO_INITIALIZER_LISTS +# endif +#endif + +// Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX +#if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) +# define BOOST_NO_0X_HDR_MUTEX +#endif +// Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM +#if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM) +# define BOOST_NO_0X_HDR_RANDOM +#endif +// Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO +#if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO) +# define BOOST_NO_0X_HDR_RATIO +#endif +// Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX +#if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX) +# define BOOST_NO_0X_HDR_REGEX +#endif +// Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR +#if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR) +# define BOOST_NO_0X_HDR_SYSTEM_ERROR +#endif +// Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD +#if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD) +# define BOOST_NO_0X_HDR_THREAD +#endif +// Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE +#if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE) +# define BOOST_NO_0X_HDR_TUPLE +#endif +// Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS +#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS) +# define BOOST_NO_0X_HDR_TYPE_TRAITS +#endif +// Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX +#if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX) +# define BOOST_NO_0X_HDR_TYPEINDEX +#endif +// Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP +#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP) +# define BOOST_NO_0X_HDR_UNORDERED_MAP +#endif +// Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET +#if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET) +# define BOOST_NO_0X_HDR_UNORDERED_SET +#endif + +// ------------------ End of deprecated macros for 1.50 --------------------------- + +// -------------------- Deprecated macros for 1.51 --------------------------- +// These will go away in a future release + +// Use BOOST_NO_CXX11_AUTO_DECLARATIONS instead of BOOST_NO_AUTO_DECLARATIONS +#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS) +# define BOOST_NO_AUTO_DECLARATIONS +#endif +// Use BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of BOOST_NO_AUTO_MULTIDECLARATIONS +#if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS) +# define BOOST_NO_AUTO_MULTIDECLARATIONS +#endif +// Use BOOST_NO_CXX11_CHAR16_T instead of BOOST_NO_CHAR16_T +#if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T) +# define BOOST_NO_CHAR16_T +#endif +// Use BOOST_NO_CXX11_CHAR32_T instead of BOOST_NO_CHAR32_T +#if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T) +# define BOOST_NO_CHAR32_T +#endif +// Use BOOST_NO_CXX11_TEMPLATE_ALIASES instead of BOOST_NO_TEMPLATE_ALIASES +#if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES) +# define BOOST_NO_TEMPLATE_ALIASES +#endif +// Use BOOST_NO_CXX11_CONSTEXPR instead of BOOST_NO_CONSTEXPR +#if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR) +# define BOOST_NO_CONSTEXPR +#endif +// Use BOOST_NO_CXX11_DECLTYPE_N3276 instead of BOOST_NO_DECLTYPE_N3276 +#if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276) +# define BOOST_NO_DECLTYPE_N3276 +#endif +// Use BOOST_NO_CXX11_DECLTYPE instead of BOOST_NO_DECLTYPE +#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE) +# define BOOST_NO_DECLTYPE +#endif +// Use BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of BOOST_NO_DEFAULTED_FUNCTIONS +#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS) +# define BOOST_NO_DEFAULTED_FUNCTIONS +#endif +// Use BOOST_NO_CXX11_DELETED_FUNCTIONS instead of BOOST_NO_DELETED_FUNCTIONS +#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS) +# define BOOST_NO_DELETED_FUNCTIONS +#endif +// Use BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) +# define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS +#endif +// Use BOOST_NO_CXX11_EXTERN_TEMPLATE instead of BOOST_NO_EXTERN_TEMPLATE +#if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE) +# define BOOST_NO_EXTERN_TEMPLATE +#endif +// Use BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS) +# define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS +#endif +// Use BOOST_NO_CXX11_LAMBDAS instead of BOOST_NO_LAMBDAS +#if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS) +# define BOOST_NO_LAMBDAS +#endif +// Use BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS +#if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS) +# define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS +#endif +// Use BOOST_NO_CXX11_NOEXCEPT instead of BOOST_NO_NOEXCEPT +#if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT) +# define BOOST_NO_NOEXCEPT +#endif +// Use BOOST_NO_CXX11_NULLPTR instead of BOOST_NO_NULLPTR +#if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR) +# define BOOST_NO_NULLPTR +#endif +// Use BOOST_NO_CXX11_RAW_LITERALS instead of BOOST_NO_RAW_LITERALS +#if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS) +# define BOOST_NO_RAW_LITERALS +#endif +// Use BOOST_NO_CXX11_RVALUE_REFERENCES instead of BOOST_NO_RVALUE_REFERENCES +#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES) +# define BOOST_NO_RVALUE_REFERENCES +#endif +// Use BOOST_NO_CXX11_SCOPED_ENUMS instead of BOOST_NO_SCOPED_ENUMS +#if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS) +# define BOOST_NO_SCOPED_ENUMS +#endif +// Use BOOST_NO_CXX11_STATIC_ASSERT instead of BOOST_NO_STATIC_ASSERT +#if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT) +# define BOOST_NO_STATIC_ASSERT +#endif +// Use BOOST_NO_CXX11_STD_UNORDERD instead of BOOST_NO_STD_UNORDERD +#if defined(BOOST_NO_CXX11_STD_UNORDERD) && !defined(BOOST_NO_STD_UNORDERD) +# define BOOST_NO_STD_UNORDERD +#endif +// Use BOOST_NO_CXX11_UNICODE_LITERALS instead of BOOST_NO_UNICODE_LITERALS +#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS) +# define BOOST_NO_UNICODE_LITERALS +#endif +// Use BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX) +# define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX +#endif +// Use BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of BOOST_NO_VARIADIC_TEMPLATES +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES) +# define BOOST_NO_VARIADIC_TEMPLATES +#endif +// Use BOOST_NO_CXX11_VARIADIC_MACROS instead of BOOST_NO_VARIADIC_MACROS +#if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) +# define BOOST_NO_VARIADIC_MACROS +#endif +// Use BOOST_NO_CXX11_NUMERIC_LIMITS instead of BOOST_NO_NUMERIC_LIMITS_LOWEST +#if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST) +# define BOOST_NO_NUMERIC_LIMITS_LOWEST +#endif +// ------------------ End of deprecated macros for 1.51 --------------------------- + + + +// +// Helper macros BOOST_NOEXCEPT, BOOST_NOEXCEPT_IF, BOOST_NOEXCEPT_EXPR +// These aid the transition to C++11 while still supporting C++03 compilers +// +#ifdef BOOST_NO_NOEXCEPT +# define BOOST_NOEXCEPT +# define BOOST_NOEXCEPT_IF(Predicate) +# define BOOST_NOEXCEPT_EXPR(Expression) false +#else +# define BOOST_NOEXCEPT noexcept +# define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate)) +# define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression)) +#endif + +// +// Normalize BOOST_NO_STATIC_ASSERT and (depricated) BOOST_HAS_STATIC_ASSERT: +// +#if !defined(BOOST_NO_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT) +# define BOOST_HAS_STATIC_ASSERT +#endif + // // constexpr workarounds // @@ -667,5 +889,19 @@ namespace std{ using ::type_info; } #define BOOST_STATIC_CONSTEXPR static BOOST_CONSTEXPR_OR_CONST +// +// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_RVALUE_REFERENCES is not defined +// +#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS) +#define BOOST_HAS_RVALUE_REFS #endif +// +// Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_VARIADIC_TEMPLATES is not defined +// +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL) +#define BOOST_HAS_VARIADIC_TMPL +#endif + + +#endif diff --git a/3party/boost/boost/container/allocator_traits.hpp b/3party/boost/boost/container/allocator_traits.hpp new file mode 100644 index 0000000000..8e537ccf6f --- /dev/null +++ b/3party/boost/boost/container/allocator_traits.hpp @@ -0,0 +1,385 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Pablo Halpern 2009. 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) +// +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP +#define BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include //numeric_limits<>::max() +#include //placement new +#include //std::allocator +#include + +///@cond + +namespace boost { +namespace container { +namespace container_detail { + +//workaround needed for C++03 compilers with no construct() +//supporting rvalue references +template +struct is_std_allocator +{ static const bool value = false; }; + +template +struct is_std_allocator< std::allocator > +{ static const bool value = true; }; + +} //namespace container_detail { + +///@endcond + +//! The class template allocator_traits supplies a uniform interface to all allocator types. +//! This class is a C++03-compatible implementation of std::allocator_traits +template +struct allocator_traits +{ + //allocator_type + typedef Alloc allocator_type; + //value_type + typedef typename Alloc::value_type value_type; + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Alloc::pointer if such a type exists; otherwise, value_type* + //! + typedef unspecified pointer; + //! Alloc::const_pointer if such a type exists ; otherwise, pointer_traits::rebind::rebind. + //! + typedef unspecified void_pointer; + //! Alloc::const_void_pointer if such a type exists ; otherwis e, pointer_traits::rebind::difference_type. + //! + typedef unspecified difference_type; + //! Alloc::size_type if such a type exists ; otherwise, make_unsigned::type + //! + typedef unspecified size_type; + //! Alloc::propagate_on_container_copy_assignment if such a type exists, otherwise an integral_constant + //! type with internal constant static member `value` == false. + typedef unspecified propagate_on_container_copy_assignment; + //! Alloc::propagate_on_container_move_assignment if such a type exists, otherwise an integral_constant + //! type with internal constant static member `value` == false. + typedef unspecified propagate_on_container_move_assignment; + //! Alloc::propagate_on_container_swap if such a type exists, otherwise an integral_constant + //! type with internal constant static member `value` == false. + typedef unspecified propagate_on_container_swap; + //! Defines an allocator: Alloc::rebind::other if such a type exists; otherwise, Alloc + //! if Alloc is a class template instantiation of the form Alloc, where Args is zero or + //! more type arguments ; otherwise, the instantiation of rebind_alloc is ill-formed. + //! + //! In C++03 compilers `rebind_alloc` is a struct derived from an allocator + //! deduced by previously detailed rules. + template using rebind_alloc = unspecified; + + //! In C++03 compilers `rebind_traits` is a struct derived from + //! `allocator_traits`, where `OtherAlloc` is + //! the allocator deduced by rules explained in `rebind_alloc`. + template using rebind_traits = allocator_traits >; + + //! Non-standard extension: Portable allocator rebind for C++03 and C++11 compilers. + //! `type` is an allocator related to Alloc deduced deduced by rules explained in `rebind_alloc`. + template + struct portable_rebind_alloc + { typedef unspecified_type type; }; + #else + //pointer + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + pointer, value_type*) + pointer; + //const_pointer + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Alloc, + const_pointer, typename boost::intrusive::pointer_traits::template + rebind_pointer) + const_pointer; + //reference + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + reference, typename container_detail::unvoid::type&) + reference; + //const_reference + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + const_reference, const typename container_detail::unvoid::type&) + const_reference; + //void_pointer + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Alloc, + void_pointer, typename boost::intrusive::pointer_traits::template + rebind_pointer) + void_pointer; + //const_void_pointer + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Alloc, + const_void_pointer, typename boost::intrusive::pointer_traits::template + rebind_pointer) + const_void_pointer; + //difference_type + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + difference_type, std::ptrdiff_t) + difference_type; + //size_type + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + size_type, std::size_t) + size_type; + //propagate_on_container_copy_assignment + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + propagate_on_container_copy_assignment, boost::false_type) + propagate_on_container_copy_assignment; + //propagate_on_container_move_assignment + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + propagate_on_container_move_assignment, boost::false_type) + propagate_on_container_move_assignment; + //propagate_on_container_swap + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, + propagate_on_container_swap, boost::false_type) + propagate_on_container_swap; + + #if !defined(BOOST_NO_TEMPLATE_ALIASES) + //C++11 + template using rebind_alloc = typename boost::intrusive::detail::type_rebinder::type; + template using rebind_traits = allocator_traits< rebind_alloc >; + #else // #if !defined(BOOST_NO_TEMPLATE_ALIASES) + //Some workaround for C++03 or C++11 compilers with no template aliases + template + struct rebind_alloc : boost::intrusive::detail::type_rebinder::type + { + typedef typename boost::intrusive::detail::type_rebinder::type Base; + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + rebind_alloc(BOOST_FWD_REF(Args)... args) + : Base(boost::forward(args)...) + {} + #else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + rebind_alloc(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + : Base(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)) \ + {} \ + // + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + #endif // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + }; + + template + struct rebind_traits + : allocator_traits::type> + {}; + #endif // #if !defined(BOOST_NO_TEMPLATE_ALIASES) + template + struct portable_rebind_alloc + { typedef typename boost::intrusive::detail::type_rebinder::type type; }; + #endif //BOOST_CONTAINER_DOXYGEN_INVOKED + + //! Returns: `a.allocate(n)` + //! + static pointer allocate(Alloc &a, size_type n) + { return a.allocate(n); } + + //! Returns: `a.deallocate(p, n)` + //! + //! Throws: Nothing + static void deallocate(Alloc &a, pointer p, size_type n) + { return a.deallocate(p, n); } + + //! Effects: calls `a.allocate(n, p)` if that call is well-formed; + //! otherwise, invokes `a.allocate(n)` + static pointer allocate(Alloc &a, size_type n, const_void_pointer p) + { + const bool value = boost::container::container_detail:: + has_member_function_callable_with_allocate + ::value; + ::boost::integral_constant flag; + return allocator_traits::priv_allocate(flag, a, n, p); + } + + //! Effects: calls `a.destroy(p)` if that call is well-formed; + //! otherwise, invokes `p->~T()`. + template + static void destroy(Alloc &a, T*p) + { + typedef T* destroy_pointer; + const bool value = boost::container::container_detail:: + has_member_function_callable_with_destroy + ::value; + ::boost::integral_constant flag; + allocator_traits::priv_destroy(flag, a, p); + } + + //! Returns: `a.max_size()` if that expression is well-formed; otherwise, + //! `numeric_limits::max()`. + static size_type max_size(const Alloc &a) + { + const bool value = boost::container::container_detail:: + has_member_function_callable_with_max_size + ::value; + ::boost::integral_constant flag; + return allocator_traits::priv_max_size(flag, a); + } + + //! Returns: `a.select_on_container_copy_construction()` if that expression is well-formed; + //! otherwise, a. + static Alloc select_on_container_copy_construction(const Alloc &a) + { + const bool value = boost::container::container_detail:: + has_member_function_callable_with_select_on_container_copy_construction + ::value; + ::boost::integral_constant flag; + return allocator_traits::priv_select_on_container_copy_construction(flag, a); + } + + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: calls `a.construct(p, std::forward(args)...)` if that call is well-formed; + //! otherwise, invokes `::new (static_cast(p)) T(std::forward(args)...)` + template + static void construct(Alloc & a, T* p, BOOST_FWD_REF(Args)... args) + { + ::boost::integral_constant::value> flag; + allocator_traits::priv_construct(flag, a, p, ::boost::forward(args)...); + } + #endif + ///@cond + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + private: + static pointer priv_allocate(boost::true_type, Alloc &a, size_type n, const_void_pointer p) + { return a.allocate(n, p); } + + static pointer priv_allocate(boost::false_type, Alloc &a, size_type n, const_void_pointer) + { return allocator_traits::allocate(a, n); } + + template + static void priv_destroy(boost::true_type, Alloc &a, T* p) + { a.destroy(p); } + + template + static void priv_destroy(boost::false_type, Alloc &, T* p) + { p->~T(); (void)p; } + + static size_type priv_max_size(boost::true_type, const Alloc &a) + { return a.max_size(); } + + static size_type priv_max_size(boost::false_type, const Alloc &) + { return (std::numeric_limits::max)(); } + + static Alloc priv_select_on_container_copy_construction(boost::true_type, const Alloc &a) + { return a.select_on_container_copy_construction(); } + + static Alloc priv_select_on_container_copy_construction(boost::false_type, const Alloc &a) + { return a; } + + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + static void priv_construct(boost::false_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args) + { + const bool value = boost::container::container_detail:: + has_member_function_callable_with_construct + < Alloc, T*, Args... >::value; + ::boost::integral_constant flag; + priv_construct_dispatch2(flag, a, p, ::boost::forward(args)...); + } + + template + static void priv_construct(boost::true_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args) + { + priv_construct_dispatch2(boost::false_type(), a, p, ::boost::forward(args)...); + } + + template + static void priv_construct_dispatch2(boost::true_type, Alloc &a, T *p, BOOST_FWD_REF(Args) ...args) + { a.construct( p, ::boost::forward(args)...); } + + template + static void priv_construct_dispatch2(boost::false_type, Alloc &, T *p, BOOST_FWD_REF(Args) ...args) + { ::new((void*)p) T(::boost::forward(args)...); } + #else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + public: + #define BOOST_PP_LOCAL_MACRO(n) \ + template \ + static void construct(Alloc &a, T *p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + ::boost::integral_constant::value> flag; \ + allocator_traits::priv_construct(flag, a, p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + } \ + // + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + private: + #define BOOST_PP_LOCAL_MACRO(n) \ + template \ + static void priv_construct(boost::false_type, Alloc &a, T *p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST,_)) \ + { \ + const bool value = \ + boost::container::container_detail::has_member_function_callable_with_construct \ + < Alloc, T* BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_FWD_TYPE, _) >::value; \ + ::boost::integral_constant flag; \ + priv_construct_dispatch2(flag, a, p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + } \ + \ + template \ + static void priv_construct(boost::true_type, Alloc &a, T *p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST,_)) \ + { \ + priv_construct_dispatch2(boost::false_type(), a, p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + } \ + \ + template \ + static void priv_construct_dispatch2(boost::true_type, Alloc &a, T *p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST,_)) \ + { a.construct( p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); } \ + \ + template \ + static void priv_construct_dispatch2(boost::false_type, Alloc &, T *p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \ + { ::new((void*)p) T(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + // + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + #endif // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + ///@endcond +}; + +} //namespace container { +} //namespace boost { + +#include + +#endif // ! defined(BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP) diff --git a/3party/boost/boost/interprocess/containers/container/container_fwd.hpp b/3party/boost/boost/container/container_fwd.hpp similarity index 68% rename from 3party/boost/boost/interprocess/containers/container/container_fwd.hpp rename to 3party/boost/boost/container/container_fwd.hpp index d1554eb986..c52b04a1c9 100644 --- a/3party/boost/boost/interprocess/containers/container/container_fwd.hpp +++ b/3party/boost/boost/container/container_fwd.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,8 +8,8 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_CONTAINERS_FWD_HPP -#define BOOST_CONTAINERS_CONTAINERS_FWD_HPP +#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP +#define BOOST_CONTAINER_CONTAINER_FWD_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -21,32 +21,22 @@ /// @cond -namespace boost{ -namespace intrusive{ +namespace boost{ +namespace intrusive{ //Create namespace to avoid compilation errors }} -namespace boost{ namespace container{ namespace containers_detail{ +namespace boost{ namespace container{ namespace container_detail{ namespace bi = boost::intrusive; }}} -namespace std { - -template -class allocator; - -template -struct less; - -template -struct pair; - -template -struct char_traits; - -} //namespace std { +#include +#include +#include +#include +#include /// @endcond @@ -79,89 +69,85 @@ class list; //slist class template > + ,class A = std::allocator > class slist; //set class template - ,class Alloc = std::allocator > + ,class A = std::allocator > class set; //multiset class template - ,class Alloc = std::allocator > + ,class A = std::allocator > class multiset; //map class template - ,class Alloc = std::allocator > > + ,class A = std::allocator > > class map; //multimap class template - ,class Alloc = std::allocator > > + ,class A = std::allocator > > class multimap; //flat_set class template - ,class Alloc = std::allocator > + ,class A = std::allocator > class flat_set; //flat_multiset class template - ,class Alloc = std::allocator > + ,class A = std::allocator > class flat_multiset; //flat_map class template - ,class Alloc = std::allocator > > + ,class A = std::allocator > > class flat_map; //flat_multimap class template - ,class Alloc = std::allocator > > + ,class A = std::allocator > > class flat_multimap; //basic_string class template - ,class Alloc = std::allocator > + ,class A = std::allocator > class basic_string; //! Type used to tag that the input range is //! guaranteed to be ordered -struct ordered_range_impl_t {}; +struct ordered_range_t +{}; //! Type used to tag that the input range is //! guaranteed to be ordered and unique -struct ordered_unique_range_impl_t{}; - -/// @cond - -typedef ordered_range_impl_t * ordered_range_t; -typedef ordered_unique_range_impl_t *ordered_unique_range_t; - -/// @endcond +struct ordered_unique_range_t + : public ordered_range_t +{}; //! Value used to tag that the input range is //! guaranteed to be ordered -static const ordered_range_t ordered_range = 0; +static const ordered_range_t ordered_range = ordered_range_t(); //! Value used to tag that the input range is //! guaranteed to be ordered and unique -static const ordered_unique_range_t ordered_unique_range = 0; +static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t(); /// @cond @@ -184,4 +170,4 @@ struct dummy }} //namespace boost { namespace container { -#endif //#ifndef BOOST_CONTAINERS_CONTAINERS_FWD_HPP +#endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP diff --git a/3party/boost/boost/container/deque.hpp b/3party/boost/boost/container/deque.hpp new file mode 100644 index 0000000000..6a85ae9486 --- /dev/null +++ b/3party/boost/boost/container/deque.hpp @@ -0,0 +1,2051 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 1996,1997 +// Silicon Graphics Computer Systems, Inc. +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Silicon Graphics makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. +// +// +// Copyright (c) 1994 +// Hewlett-Packard Company +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Hewlett-Packard Company makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. + +#ifndef BOOST_CONTAINER_DEQUE_HPP +#define BOOST_CONTAINER_DEQUE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace container { + +/// @cond +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template > +#else +template +#endif +class deque; + +template +struct deque_value_traits +{ + typedef T value_type; + typedef A allocator_type; + static const bool trivial_dctr = boost::has_trivial_destructor::value; + static const bool trivial_dctr_after_move = false; + //::boost::has_trivial_destructor_after_move::value || trivial_dctr; + static const bool trivial_copy = has_trivial_copy::value; + static const bool nothrow_copy = has_nothrow_copy::value; + static const bool trivial_assign = has_trivial_assign::value; + //static const bool nothrow_assign = has_nothrow_assign::value; + static const bool nothrow_assign = false; +}; + +// Note: this function is simply a kludge to work around several compilers' +// bugs in handling constant expressions. +inline std::size_t deque_buf_size(std::size_t size) + { return size < 512 ? std::size_t(512 / size) : std::size_t(1); } + +// Deque base class. It has two purposes. First, its constructor +// and destructor allocate (but don't initialize) storage. This makes +// exception safety easier. +template +class deque_base +{ + BOOST_COPYABLE_AND_MOVABLE(deque_base) + public: + typedef allocator_traits val_alloc_traits_type; + typedef typename val_alloc_traits_type::value_type val_alloc_val; + typedef typename val_alloc_traits_type::pointer val_alloc_ptr; + typedef typename val_alloc_traits_type::const_pointer val_alloc_cptr; + typedef typename val_alloc_traits_type::reference val_alloc_ref; + typedef typename val_alloc_traits_type::const_reference val_alloc_cref; + typedef typename val_alloc_traits_type::difference_type val_alloc_diff; + typedef typename val_alloc_traits_type::size_type val_alloc_size; + typedef typename val_alloc_traits_type::template + portable_rebind_alloc::type ptr_alloc_t; + typedef allocator_traits ptr_alloc_traits_type; + typedef typename ptr_alloc_traits_type::value_type ptr_alloc_val; + typedef typename ptr_alloc_traits_type::pointer ptr_alloc_ptr; + typedef typename ptr_alloc_traits_type::const_pointer ptr_alloc_cptr; + typedef typename ptr_alloc_traits_type::reference ptr_alloc_ref; + typedef typename ptr_alloc_traits_type::const_reference ptr_alloc_cref; + typedef A allocator_type; + typedef allocator_type stored_allocator_type; + typedef val_alloc_size size_type; + + protected: + + typedef deque_value_traits traits_t; + typedef ptr_alloc_t map_allocator_type; + + static size_type s_buffer_size() { return deque_buf_size(sizeof(T)); } + + val_alloc_ptr priv_allocate_node() + { return this->alloc().allocate(s_buffer_size()); } + + void priv_deallocate_node(val_alloc_ptr p) + { this->alloc().deallocate(p, s_buffer_size()); } + + ptr_alloc_ptr priv_allocate_map(size_type n) + { return this->ptr_alloc().allocate(n); } + + void priv_deallocate_map(ptr_alloc_ptr p, size_type n) + { this->ptr_alloc().deallocate(p, n); } + + public: + // Class invariants: + // For any nonsingular iterator i: + // i.node is the address of an element in the map array. The + // contents of i.node is a pointer to the beginning of a node. + // i.first == //(i.node) + // i.last == i.first + node_size + // i.cur is a pointer in the range [i.first, i.last). NOTE: + // the implication of this is that i.cur is always a dereferenceable + // pointer, even if i is a past-the-end iterator. + // Start and Finish are always nonsingular iterators. NOTE: this means + // that an empty deque must have one node, and that a deque + // with N elements, where N is the buffer size, must have two nodes. + // For every node other than start.node and finish.node, every element + // in the node is an initialized object. If start.node == finish.node, + // then [start.cur, finish.cur) are initialized objects, and + // the elements outside that range are uninitialized storage. Otherwise, + // [start.cur, start.last) and [finish.first, finish.cur) are initialized + // objects, and [start.first, start.cur) and [finish.cur, finish.last) + // are uninitialized storage. + // [map, map + map_size) is a valid, non-empty range. + // [start.node, finish.node] is a valid range contained within + // [map, map + map_size). + // A pointer in the range [map, map + map_size) points to an allocated node + // if and only if the pointer is in the range [start.node, finish.node]. + class const_iterator + : public std::iterator + { + public: + static size_type s_buffer_size() { return deque_base::s_buffer_size(); } + + typedef std::random_access_iterator_tag iterator_category; + typedef val_alloc_val value_type; + typedef val_alloc_cptr pointer; + typedef val_alloc_cref reference; + typedef val_alloc_diff difference_type; + + typedef ptr_alloc_ptr index_pointer; + typedef const_iterator self_t; + + friend class deque; + friend class deque_base; + + protected: + val_alloc_ptr m_cur; + val_alloc_ptr m_first; + val_alloc_ptr m_last; + index_pointer m_node; + + public: + const_iterator(val_alloc_ptr x, index_pointer y) + : m_cur(x), m_first(*y), + m_last(*y + s_buffer_size()), m_node(y) {} + + const_iterator() : m_cur(0), m_first(0), m_last(0), m_node(0) {} + + const_iterator(const const_iterator& x) + : m_cur(x.m_cur), m_first(x.m_first), + m_last(x.m_last), m_node(x.m_node) {} + + reference operator*() const + { return *this->m_cur; } + + pointer operator->() const + { return this->m_cur; } + + difference_type operator-(const self_t& x) const + { + if(!this->m_cur && !x.m_cur){ + return 0; + } + return difference_type(this->s_buffer_size()) * (this->m_node - x.m_node - 1) + + (this->m_cur - this->m_first) + (x.m_last - x.m_cur); + } + + self_t& operator++() + { + ++this->m_cur; + if (this->m_cur == this->m_last) { + this->priv_set_node(this->m_node + 1); + this->m_cur = this->m_first; + } + return *this; + } + + self_t operator++(int) + { + self_t tmp = *this; + ++*this; + return tmp; + } + + self_t& operator--() + { + if (this->m_cur == this->m_first) { + this->priv_set_node(this->m_node - 1); + this->m_cur = this->m_last; + } + --this->m_cur; + return *this; + } + + self_t operator--(int) + { + self_t tmp = *this; + --*this; + return tmp; + } + + self_t& operator+=(difference_type n) + { + difference_type offset = n + (this->m_cur - this->m_first); + if (offset >= 0 && offset < difference_type(this->s_buffer_size())) + this->m_cur += n; + else { + difference_type node_offset = + offset > 0 ? offset / difference_type(this->s_buffer_size()) + : -difference_type((-offset - 1) / this->s_buffer_size()) - 1; + this->priv_set_node(this->m_node + node_offset); + this->m_cur = this->m_first + + (offset - node_offset * difference_type(this->s_buffer_size())); + } + return *this; + } + + self_t operator+(difference_type n) const + { self_t tmp = *this; return tmp += n; } + + self_t& operator-=(difference_type n) + { return *this += -n; } + + self_t operator-(difference_type n) const + { self_t tmp = *this; return tmp -= n; } + + reference operator[](difference_type n) const + { return *(*this + n); } + + bool operator==(const self_t& x) const + { return this->m_cur == x.m_cur; } + + bool operator!=(const self_t& x) const + { return !(*this == x); } + + bool operator<(const self_t& x) const + { + return (this->m_node == x.m_node) ? + (this->m_cur < x.m_cur) : (this->m_node < x.m_node); + } + + bool operator>(const self_t& x) const + { return x < *this; } + + bool operator<=(const self_t& x) const + { return !(x < *this); } + + bool operator>=(const self_t& x) const + { return !(*this < x); } + + void priv_set_node(index_pointer new_node) + { + this->m_node = new_node; + this->m_first = *new_node; + this->m_last = this->m_first + difference_type(this->s_buffer_size()); + } + + friend const_iterator operator+(difference_type n, const const_iterator& x) + { return x + n; } + }; + + //Deque iterator + class iterator : public const_iterator + { + public: + typedef std::random_access_iterator_tag iterator_category; + typedef val_alloc_val value_type; + typedef val_alloc_ptr pointer; + typedef val_alloc_ref reference; + typedef val_alloc_diff difference_type; + typedef ptr_alloc_ptr index_pointer; + typedef const_iterator self_t; + + friend class deque; + friend class deque_base; + + private: + explicit iterator(const const_iterator& x) : const_iterator(x){} + + public: + //Constructors + iterator(val_alloc_ptr x, index_pointer y) : const_iterator(x, y){} + iterator() : const_iterator(){} + //iterator(const const_iterator &cit) : const_iterator(cit){} + iterator(const iterator& x) : const_iterator(x){} + + //Pointer like operators + reference operator*() const { return *this->m_cur; } + pointer operator->() const { return this->m_cur; } + + reference operator[](difference_type n) const { return *(*this + n); } + + //Increment / Decrement + iterator& operator++() + { this->const_iterator::operator++(); return *this; } + + iterator operator++(int) + { iterator tmp = *this; ++*this; return tmp; } + + iterator& operator--() + { this->const_iterator::operator--(); return *this; } + + iterator operator--(int) + { iterator tmp = *this; --*this; return tmp; } + + // Arithmetic + iterator& operator+=(difference_type off) + { this->const_iterator::operator+=(off); return *this; } + + iterator operator+(difference_type off) const + { return iterator(this->const_iterator::operator+(off)); } + + friend iterator operator+(difference_type off, const iterator& right) + { return iterator(off+static_cast(right)); } + + iterator& operator-=(difference_type off) + { this->const_iterator::operator-=(off); return *this; } + + iterator operator-(difference_type off) const + { return iterator(this->const_iterator::operator-(off)); } + + difference_type operator-(const const_iterator& right) const + { return static_cast(*this) - right; } + }; + + deque_base(size_type num_elements, const allocator_type& a) + : members_(a) + { this->priv_initialize_map(num_elements); } + + explicit deque_base(const allocator_type& a) + : members_(a) + {} + + deque_base() + : members_() + {} + + explicit deque_base(BOOST_RV_REF(deque_base) x) + : members_( boost::move(x.ptr_alloc()) + , boost::move(x.alloc()) ) + {} + + ~deque_base() + { + if (this->members_.m_map) { + this->priv_destroy_nodes(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1); + this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); + } + } + + private: + deque_base(const deque_base&); + + protected: + + void swap_members(deque_base &x) + { + std::swap(this->members_.m_start, x.members_.m_start); + std::swap(this->members_.m_finish, x.members_.m_finish); + std::swap(this->members_.m_map, x.members_.m_map); + std::swap(this->members_.m_map_size, x.members_.m_map_size); + } + + void priv_initialize_map(size_type num_elements) + { +// if(num_elements){ + size_type num_nodes = num_elements / s_buffer_size() + 1; + + this->members_.m_map_size = container_detail::max_value((size_type) InitialMapSize, num_nodes + 2); + this->members_.m_map = this->priv_allocate_map(this->members_.m_map_size); + + ptr_alloc_ptr nstart = this->members_.m_map + (this->members_.m_map_size - num_nodes) / 2; + ptr_alloc_ptr nfinish = nstart + num_nodes; + + BOOST_TRY { + this->priv_create_nodes(nstart, nfinish); + } + BOOST_CATCH(...){ + this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); + this->members_.m_map = 0; + this->members_.m_map_size = 0; + BOOST_RETHROW + } + BOOST_CATCH_END + + this->members_.m_start.priv_set_node(nstart); + this->members_.m_finish.priv_set_node(nfinish - 1); + this->members_.m_start.m_cur = this->members_.m_start.m_first; + this->members_.m_finish.m_cur = this->members_.m_finish.m_first + + num_elements % s_buffer_size(); +// } + } + + void priv_create_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish) + { + ptr_alloc_ptr cur; + BOOST_TRY { + for (cur = nstart; cur < nfinish; ++cur) + *cur = this->priv_allocate_node(); + } + BOOST_CATCH(...){ + this->priv_destroy_nodes(nstart, cur); + BOOST_RETHROW + } + BOOST_CATCH_END + } + + void priv_destroy_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish) + { + for (ptr_alloc_ptr n = nstart; n < nfinish; ++n) + this->priv_deallocate_node(*n); + } + + void priv_clear_map() + { + if (this->members_.m_map) { + this->priv_destroy_nodes(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1); + this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); + this->members_.m_map = 0; + this->members_.m_map_size = 0; + this->members_.m_start = iterator(); + this->members_.m_finish = this->members_.m_start; + } + } + + enum { InitialMapSize = 8 }; + + protected: + struct members_holder + : public ptr_alloc_t + , public allocator_type + { + members_holder() + : map_allocator_type(), allocator_type() + , m_map(0), m_map_size(0) + , m_start(), m_finish(m_start) + {} + + explicit members_holder(const allocator_type &a) + : map_allocator_type(a), allocator_type(a) + , m_map(0), m_map_size(0) + , m_start(), m_finish(m_start) + {} + + template + members_holder(BOOST_FWD_REF(PtrAllocConvertible) pa, BOOST_FWD_REF(ValAllocConvertible) va) + : map_allocator_type(boost::forward(pa)) + , allocator_type (boost::forward(va)) + , m_map(0), m_map_size(0) + , m_start(), m_finish(m_start) + {} + + ptr_alloc_ptr m_map; + val_alloc_size m_map_size; + iterator m_start; + iterator m_finish; + } members_; + + ptr_alloc_t &ptr_alloc() + { return members_; } + + const ptr_alloc_t &ptr_alloc() const + { return members_; } + + allocator_type &alloc() + { return members_; } + + const allocator_type &alloc() const + { return members_; } +}; +/// @endcond + +//! Deque class +//! +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template > +#else +template +#endif +class deque : protected deque_base +{ + /// @cond + private: + typedef deque_base Base; + typedef typename Base::val_alloc_val val_alloc_val; + typedef typename Base::val_alloc_ptr val_alloc_ptr; + typedef typename Base::val_alloc_cptr val_alloc_cptr; + typedef typename Base::val_alloc_ref val_alloc_ref; + typedef typename Base::val_alloc_cref val_alloc_cref; + typedef typename Base::val_alloc_size val_alloc_size; + typedef typename Base::val_alloc_diff val_alloc_diff; + + typedef typename Base::ptr_alloc_t ptr_alloc_t; + typedef typename Base::ptr_alloc_val ptr_alloc_val; + typedef typename Base::ptr_alloc_ptr ptr_alloc_ptr; + typedef typename Base::ptr_alloc_cptr ptr_alloc_cptr; + typedef typename Base::ptr_alloc_ref ptr_alloc_ref; + typedef typename Base::ptr_alloc_cref ptr_alloc_cref; + /// @endcond + + public: // Basic types + typedef T value_type; + typedef val_alloc_ptr pointer; + typedef val_alloc_cptr const_pointer; + typedef val_alloc_ref reference; + typedef val_alloc_cref const_reference; + typedef val_alloc_size size_type; + typedef val_alloc_diff difference_type; + typedef typename Base::allocator_type allocator_type; + + public: // Iterators + typedef typename Base::iterator iterator; + typedef typename Base::const_iterator const_iterator; + + typedef std::reverse_iterator const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + + typedef allocator_type stored_allocator_type; + + /// @cond + + private: // Internal typedefs + BOOST_COPYABLE_AND_MOVABLE(deque) + typedef ptr_alloc_ptr index_pointer; + static size_type s_buffer_size() + { return Base::s_buffer_size(); } + typedef container_detail::advanced_insert_aux_int advanced_insert_aux_int_t; + typedef repeat_iterator r_iterator; + typedef boost::move_iterator move_it; + typedef allocator_traits allocator_traits_type; + + /// @endcond + + public: + + //! Effects: Returns a copy of the internal allocator. + //! + //! Throws: If allocator's copy constructor throws. + //! + //! Complexity: Constant. + allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT + { return Base::alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT + { return Base::alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT + { return Base::alloc(); } + + //! Effects: Returns an iterator to the first element contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator begin() BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start; } + + //! Effects: Returns an iterator to the end of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator end() BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish; } + + //! Effects: Returns a const_iterator to the first element contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator begin() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start; } + + //! Effects: Returns a const_iterator to the end of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator end() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish; } + + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT + { return reverse_iterator(this->members_.m_finish); } + + //! Effects: Returns a reverse_iterator pointing to the end + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT + { return reverse_iterator(this->members_.m_start); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_finish); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_start); } + + //! Effects: Returns a const_iterator to the first element contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start; } + + //! Effects: Returns a const_iterator to the end of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish; } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_finish); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_start); } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start[difference_type(n)]; } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start[difference_type(n)]; } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + reference at(size_type n) + { this->priv_range_check(n); return (*this)[n]; } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + const_reference at(size_type n) const + { this->priv_range_check(n); return (*this)[n]; } + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the first + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference front() BOOST_CONTAINER_NOEXCEPT + { return *this->members_.m_start; } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the first element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference front() const BOOST_CONTAINER_NOEXCEPT + { return *this->members_.m_start; } + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference back() BOOST_CONTAINER_NOEXCEPT + { return *(end()-1); } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference back() const BOOST_CONTAINER_NOEXCEPT + { return *(cend()-1); } + + //! Effects: Returns the number of the elements contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type size() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish - this->members_.m_start; } + + //! Effects: Returns the largest possible size of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type max_size() const BOOST_CONTAINER_NOEXCEPT + { return allocator_traits_type::max_size(this->alloc()); } + + //! Effects: Returns true if the deque contains no elements. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + bool empty() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish == this->members_.m_start; } + + //! Effects: Default constructors a deque. + //! + //! Throws: If allocator_type's default constructor throws. + //! + //! Complexity: Constant. + deque() + : Base() + {} + + //! Effects: Constructs a deque taking the allocator as parameter. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + explicit deque(const allocator_type& a) + : Base(a) + {} + + //! Effects: Constructs a deque that will use a copy of allocator a + //! and inserts n default contructed values. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's default or copy constructor throws. + //! + //! Complexity: Linear to n. + explicit deque(size_type n) + : Base(n, allocator_type()) + { + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); + proxy.uninitialized_copy_remaining_to(this->begin()); + //deque_base will deallocate in case of exception... + } + + //! Effects: Constructs a deque that will use a copy of allocator a + //! and inserts n copies of value. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's default or copy constructor throws. + //! + //! Complexity: Linear to n. + deque(size_type n, const value_type& value, + const allocator_type& a = allocator_type()) + : Base(n, a) + { this->priv_fill_initialize(value); } + + //! Effects: Copy constructs a deque. + //! + //! Postcondition: x == *this. + //! + //! Complexity: Linear to the elements x contains. + deque(const deque& x) + : Base(allocator_traits_type::select_on_container_copy_construction(x.alloc())) + { + if(x.size()){ + this->priv_initialize_map(x.size()); + boost::container::uninitialized_copy_alloc + (this->alloc(), x.begin(), x.end(), this->members_.m_start); + } + } + + //! Effects: Move constructor. Moves mx's resources to *this. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + deque(BOOST_RV_REF(deque) x) + : Base(boost::move(static_cast(x))) + { this->swap_members(x); } + + //! Effects: Copy constructs a vector using the specified allocator. + //! + //! Postcondition: x == *this. + //! + //! Throws: If allocation + //! throws or T's copy constructor throws. + //! + //! Complexity: Linear to the elements x contains. + deque(const deque& x, const allocator_type &a) + : Base(a) + { + if(x.size()){ + this->priv_initialize_map(x.size()); + boost::container::uninitialized_copy_alloc + (this->alloc(), x.begin(), x.end(), this->members_.m_start); + } + } + + //! Effects: Move constructor using the specified allocator. + //! Moves mx's resources to *this if a == allocator_type(). + //! Otherwise copies values from x to *this. + //! + //! Throws: If allocation or T's copy constructor throws. + //! + //! Complexity: Constant if a == mx.get_allocator(), linear otherwise. + deque(BOOST_RV_REF(deque) mx, const allocator_type &a) + : Base(a) + { + if(mx.alloc() == a){ + this->swap_members(mx); + } + else{ + if(mx.size()){ + this->priv_initialize_map(mx.size()); + boost::container::uninitialized_copy_alloc + (this->alloc(), mx.begin(), mx.end(), this->members_.m_start); + } + } + } + + //! Effects: Constructs a deque that will use a copy of allocator a + //! and inserts a copy of the range [first, last) in the deque. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's constructor taking an dereferenced InIt throws. + //! + //! Complexity: Linear to the range [first, last). + template + deque(InpIt first, InpIt last, const allocator_type& a = allocator_type()) + : Base(a) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + this->priv_initialize_dispatch(first, last, Result()); + } + + //! Effects: Destroys the deque. All stored values are destroyed + //! and used memory is deallocated. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements. + ~deque() BOOST_CONTAINER_NOEXCEPT + { + priv_destroy_range(this->members_.m_start, this->members_.m_finish); + } + + //! Effects: Makes *this contain the same elements as x. + //! + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to the number of elements in x. + deque& operator= (BOOST_COPY_ASSIGN_REF(deque) x) + { + if (&x != this){ + allocator_type &this_alloc = this->alloc(); + const allocator_type &x_alloc = x.alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + this->shrink_to_fit(); + } + container_detail::assign_alloc(this->alloc(), x.alloc(), flag); + container_detail::assign_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); + this->assign(x.cbegin(), x.cend()); + } + return *this; + } + + //! Effects: Move assignment. All mx's values are transferred to *this. + //! + //! Postcondition: x.empty(). *this contains a the elements x had + //! before the function. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Linear. + deque& operator= (BOOST_RV_REF(deque) x) + { + if (&x != this){ + allocator_type &this_alloc = this->alloc(); + allocator_type &x_alloc = x.alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy objects but retain memory in case x reuses it in the future + this->clear(); + this->swap_members(x); + //Move allocator if needed + container_detail::bool_ flag; + container_detail::move_alloc(this_alloc, x_alloc, flag); + container_detail::move_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); + } + //If unequal allocators, then do a one by one move + else{ + typedef typename std::iterator_traits::iterator_category ItCat; + this->assign( boost::make_move_iterator(x.begin()) + , boost::make_move_iterator(x.end())); + } + } + return *this; + } + + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(deque &x) + { + this->swap_members(x); + container_detail::bool_ flag; + container_detail::swap_alloc(this->alloc(), x.alloc(), flag); + container_detail::swap_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); + } + + //! Effects: Assigns the n copies of val to *this. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + void assign(size_type n, const T& val) + { this->priv_fill_assign(n, val); } + + //! Effects: Assigns the the range [first, last) to *this. + //! + //! Throws: If memory allocation throws or + //! T's constructor from dereferencing InpIt throws. + //! + //! Complexity: Linear to n. + template + void assign(InpIt first, InpIt last) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + this->priv_assign_dispatch(first, last, Result()); + } + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the end of the deque. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_back(const T &x); + + //! Effects: Constructs a new element in the end of the deque + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_back(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the front of the deque. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_front(const T &x); + + //! Effects: Constructs a new element in the front of the deque + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_front(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) + #endif + + //! Effects: Removes the last element from the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant time. + void pop_back() BOOST_CONTAINER_NOEXCEPT + { + if (this->members_.m_finish.m_cur != this->members_.m_finish.m_first) { + --this->members_.m_finish.m_cur; + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_finish.m_cur) + ); + } + else + this->priv_pop_back_aux(); + } + + //! Effects: Removes the first element from the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant time. + void pop_front() BOOST_CONTAINER_NOEXCEPT + { + if (this->members_.m_start.m_cur != this->members_.m_start.m_last - 1) { + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_start.m_cur) + ); + ++this->members_.m_start.m_cur; + } + else + this->priv_pop_front_aux(); + } + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a copy of x before position. + //! + //! Throws: If memory allocation throws or x's copy constructor throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, const T &x); + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a new element before position with mx's resources. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert n copies of x before pos. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + void insert(const_iterator pos, size_type n, const value_type& x) + { this->priv_fill_insert(pos, n, x); } + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert a copy of the [first, last) range before pos. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InpIt throws or T's copy constructor throws. + //! + //! Complexity: Linear to std::distance [first, last). + template + void insert(const_iterator pos, InpIt first, InpIt last) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + this->priv_insert_dispatch(pos, first, last, Result()); + } + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the end of the deque. + //! + //! Throws: If memory allocation throws or the in-place constructor throws. + //! + //! Complexity: Amortized constant time + template + void emplace_back(Args&&... args) + { + if(this->priv_push_back_simple_available()){ + allocator_traits_type::construct + ( this->alloc() + , this->priv_push_back_simple_pos() + , boost::forward(args)...); + this->priv_push_back_simple_commit(); + } + else{ + typedef container_detail::advanced_insert_aux_non_movable_emplace type; + type &&proxy = type(this->alloc(), boost::forward(args)...); + this->priv_insert_back_aux_impl(1, proxy); + } + } + + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the beginning of the deque. + //! + //! Throws: If memory allocation throws or the in-place constructor throws. + //! + //! Complexity: Amortized constant time + template + void emplace_front(Args&&... args) + { + if(this->priv_push_front_simple_available()){ + allocator_traits_type::construct + ( this->alloc() + , this->priv_push_front_simple_pos() + , boost::forward(args)...); + this->priv_push_front_simple_commit(); + } + else{ + typedef container_detail::advanced_insert_aux_non_movable_emplace type; + type &&proxy = type(this->alloc(), boost::forward(args)...); + this->priv_insert_front_aux_impl(1, proxy); + } + } + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... before position + //! + //! Throws: If memory allocation throws or the in-place constructor throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + template + iterator emplace(const_iterator p, Args&&... args) + { + if(p == this->cbegin()){ + this->emplace_front(boost::forward(args)...); + return this->begin(); + } + else if(p == this->cend()){ + this->emplace_back(boost::forward(args)...); + return (this->end()-1); + } + else{ + size_type n = p - this->cbegin(); + typedef container_detail::advanced_insert_aux_emplace type; + type &&proxy = type(this->alloc(), boost::forward(args)...); + this->priv_insert_aux_impl(p, 1, proxy); + return iterator(this->begin() + n); + } + } + + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + //advanced_insert_int.hpp includes all necessary preprocessor machinery... + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + if(priv_push_back_simple_available()){ \ + allocator_traits_type::construct \ + ( this->alloc() \ + , this->priv_push_back_simple_pos() \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_push_back_simple_commit(); \ + } \ + else{ \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT( \ + advanced_insert_aux_non_movable_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_insert_back_aux_impl(1, proxy); \ + } \ + } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, > ) \ + void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + if(priv_push_front_simple_available()){ \ + allocator_traits_type::construct \ + ( this->alloc() \ + , this->priv_push_front_simple_pos() \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_push_front_simple_commit(); \ + } \ + else{ \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT \ + (advanced_insert_aux_non_movable_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_insert_front_aux_impl(1, proxy); \ + } \ + } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(const_iterator p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + if(p == this->cbegin()){ \ + this->emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + return this->begin(); \ + } \ + else if(p == cend()){ \ + this->emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + return (this->end()-1); \ + } \ + else{ \ + size_type pos_num = p - this->cbegin(); \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + this->priv_insert_aux_impl(p, 1, proxy); \ + return iterator(this->begin() + pos_num); \ + } \ + } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size, const value_type& x) + { + const size_type len = size(); + if (new_size < len) + this->erase(this->members_.m_start + new_size, this->members_.m_finish); + else + this->insert(this->members_.m_finish, new_size - len, x); + } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size) + { + const size_type len = size(); + if (new_size < len) + this->priv_erase_last_n(len - new_size); + else{ + size_type n = new_size - this->size(); + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); + priv_insert_back_aux_impl(n, proxy); + } + } + + //! Effects: Erases the element at position pos. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the elements between pos and the + //! last element (if pos is near the end) or the first element + //! if(pos is near the beginning). + //! Constant if pos is the first or the last element. + iterator erase(const_iterator pos) BOOST_CONTAINER_NOEXCEPT + { + const_iterator next = pos; + ++next; + difference_type index = pos - this->members_.m_start; + if (size_type(index) < (this->size() >> 1)) { + boost::move_backward(begin(), iterator(pos), iterator(next)); + pop_front(); + } + else { + boost::move(iterator(next), end(), iterator(pos)); + pop_back(); + } + return this->members_.m_start + index; + } + + //! Effects: Erases the elements pointed by [first, last). + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the distance between first and + //! last plus the elements between pos and the + //! last element (if pos is near the end) or the first element + //! if(pos is near the beginning). + iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT + { + if (first == this->members_.m_start && last == this->members_.m_finish) { + this->clear(); + return this->members_.m_finish; + } + else { + difference_type n = last - first; + difference_type elems_before = first - this->members_.m_start; + if (elems_before < static_cast(this->size() - n) - elems_before) { + boost::move_backward(begin(), iterator(first), iterator(last)); + iterator new_start = this->members_.m_start + n; + if(!Base::traits_t::trivial_dctr_after_move) + this->priv_destroy_range(this->members_.m_start, new_start); + this->priv_destroy_nodes(this->members_.m_start.m_node, new_start.m_node); + this->members_.m_start = new_start; + } + else { + boost::move(iterator(last), end(), iterator(first)); + iterator new_finish = this->members_.m_finish - n; + if(!Base::traits_t::trivial_dctr_after_move) + this->priv_destroy_range(new_finish, this->members_.m_finish); + this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1); + this->members_.m_finish = new_finish; + } + return this->members_.m_start + elems_before; + } + } + + void priv_erase_last_n(size_type n) + { + if(n == this->size()) { + this->clear(); + } + else { + iterator new_finish = this->members_.m_finish - n; + if(!Base::traits_t::trivial_dctr_after_move) + this->priv_destroy_range(new_finish, this->members_.m_finish); + this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1); + this->members_.m_finish = new_finish; + } + } + + //! Effects: Erases all the elements of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements in the deque. + void clear() BOOST_CONTAINER_NOEXCEPT + { + for (index_pointer node = this->members_.m_start.m_node + 1; + node < this->members_.m_finish.m_node; + ++node) { + this->priv_destroy_range(*node, *node + this->s_buffer_size()); + this->priv_deallocate_node(*node); + } + + if (this->members_.m_start.m_node != this->members_.m_finish.m_node) { + this->priv_destroy_range(this->members_.m_start.m_cur, this->members_.m_start.m_last); + this->priv_destroy_range(this->members_.m_finish.m_first, this->members_.m_finish.m_cur); + this->priv_deallocate_node(this->members_.m_finish.m_first); + } + else + this->priv_destroy_range(this->members_.m_start.m_cur, this->members_.m_finish.m_cur); + + this->members_.m_finish = this->members_.m_start; + } + + //! Effects: Tries to deallocate the excess of memory created + //! with previous allocations. The size of the deque is unchanged + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Constant. + void shrink_to_fit() + { + //This deque implementation already + //deallocates excess nodes when erasing + //so there is nothing to do except for + //empty deque + if(this->empty()){ + this->priv_clear_map(); + } + } + + /// @cond + private: + void priv_range_check(size_type n) const + { if (n >= this->size()) BOOST_RETHROW std::out_of_range("deque"); } + + iterator priv_insert(const_iterator position, const value_type &x) + { + if (position == cbegin()){ + this->push_front(x); + return begin(); + } + else if (position == cend()){ + this->push_back(x); + return (end()-1); + } + else { + size_type n = position - cbegin(); + this->priv_insert_aux(position, size_type(1), x); + return iterator(this->begin() + n); + } + } + + iterator priv_insert(const_iterator position, BOOST_RV_REF(value_type) mx) + { + if (position == cbegin()) { + this->push_front(boost::move(mx)); + return begin(); + } + else if (position == cend()) { + this->push_back(boost::move(mx)); + return(end()-1); + } + else { + //Just call more general insert(pos, size, value) and return iterator + size_type n = position - begin(); + this->priv_insert_aux(position, move_it(r_iterator(mx, 1)), move_it(r_iterator())); + return iterator(this->begin() + n); + } + } + + void priv_push_front(const value_type &t) + { + if(this->priv_push_front_simple_available()){ + allocator_traits_type::construct + ( this->alloc(), this->priv_push_front_simple_pos(), t); + this->priv_push_front_simple_commit(); + } + else{ + this->priv_insert_aux(cbegin(), size_type(1), t); + } + } + + void priv_push_front(BOOST_RV_REF(value_type) t) + { + if(this->priv_push_front_simple_available()){ + allocator_traits_type::construct + ( this->alloc(), this->priv_push_front_simple_pos(), boost::move(t)); + this->priv_push_front_simple_commit(); + } + else{ + this->priv_insert_aux(cbegin(), move_it(r_iterator(t, 1)), move_it(r_iterator())); + } + } + + void priv_push_back(const value_type &t) + { + if(this->priv_push_back_simple_available()){ + allocator_traits_type::construct + ( this->alloc(), this->priv_push_back_simple_pos(), t); + this->priv_push_back_simple_commit(); + } + else{ + this->priv_insert_aux(cend(), size_type(1), t); + } + } + + void priv_push_back(BOOST_RV_REF(T) t) + { + if(this->priv_push_back_simple_available()){ + allocator_traits_type::construct + ( this->alloc(), this->priv_push_back_simple_pos(), boost::move(t)); + this->priv_push_back_simple_commit(); + } + else{ + this->priv_insert_aux(cend(), move_it(r_iterator(t, 1)), move_it(r_iterator())); + } + } + + bool priv_push_back_simple_available() const + { + return this->members_.m_map && + (this->members_.m_finish.m_cur != (this->members_.m_finish.m_last - 1)); + } + + T *priv_push_back_simple_pos() const + { + return container_detail::to_raw_pointer(this->members_.m_finish.m_cur); + } + + void priv_push_back_simple_commit() + { + ++this->members_.m_finish.m_cur; + } + + bool priv_push_front_simple_available() const + { + return this->members_.m_map && + (this->members_.m_start.m_cur != this->members_.m_start.m_first); + } + + T *priv_push_front_simple_pos() const + { return container_detail::to_raw_pointer(this->members_.m_start.m_cur) - 1; } + + void priv_push_front_simple_commit() + { --this->members_.m_start.m_cur; } + + template + void priv_insert_aux(const_iterator pos, InpIt first, InpIt last, std::input_iterator_tag) + { + for(;first != last; ++first){ + this->insert(pos, boost::move(value_type(*first))); + } + } + + template + void priv_insert_aux(const_iterator pos, FwdIt first, FwdIt last, std::forward_iterator_tag) + { this->priv_insert_aux(pos, first, last); } + + // assign(), a generalized assignment member function. Two + // versions: one that takes a count, and one that takes a range. + // The range version is a member template, so we dispatch on whether + // or not the type is an integer. + void priv_fill_assign(size_type n, const T& val) + { + if (n > size()) { + std::fill(begin(), end(), val); + this->insert(cend(), n - size(), val); + } + else { + this->erase(cbegin() + n, cend()); + std::fill(begin(), end(), val); + } + } + + template + void priv_initialize_dispatch(Integer n, Integer x, container_detail::true_) + { + this->priv_initialize_map(n); + this->priv_fill_initialize(x); + } + + template + void priv_initialize_dispatch(InpIt first, InpIt last, container_detail::false_) + { + typedef typename std::iterator_traits::iterator_category ItCat; + this->priv_range_initialize(first, last, ItCat()); + } + + void priv_destroy_range(iterator p, iterator p2) + { + for(;p != p2; ++p){ + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(&*p) + ); + } + } + + void priv_destroy_range(pointer p, pointer p2) + { + for(;p != p2; ++p){ + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(&*p) + ); + } + } + + template + void priv_assign_dispatch(Integer n, Integer val, container_detail::true_) + { this->priv_fill_assign((size_type) n, (value_type)val); } + + template + void priv_assign_dispatch(InpIt first, InpIt last, container_detail::false_) + { + typedef typename std::iterator_traits::iterator_category ItCat; + this->priv_assign_aux(first, last, ItCat()); + } + + template + void priv_assign_aux(InpIt first, InpIt last, std::input_iterator_tag) + { + iterator cur = begin(); + for ( ; first != last && cur != end(); ++cur, ++first) + *cur = *first; + if (first == last) + this->erase(cur, cend()); + else + this->insert(cend(), first, last); + } + + template + void priv_assign_aux(FwdIt first, FwdIt last, std::forward_iterator_tag) + { + size_type len = std::distance(first, last); + if (len > size()) { + FwdIt mid = first; + std::advance(mid, size()); + boost::copy_or_move(first, mid, begin()); + this->insert(cend(), mid, last); + } + else + this->erase(boost::copy_or_move(first, last, begin()), cend()); + } + + template + void priv_insert_dispatch(const_iterator pos, Integer n, Integer x, container_detail::true_) + { this->priv_fill_insert(pos, (size_type) n, (value_type)x); } + + template + void priv_insert_dispatch(const_iterator pos,InpIt first, InpIt last, container_detail::false_) + { + typedef typename std::iterator_traits::iterator_category ItCat; + this->priv_insert_aux(pos, first, last, ItCat()); + } + + void priv_insert_aux(const_iterator pos, size_type n, const value_type& x) + { + typedef constant_iterator c_it; + this->priv_insert_aux(pos, c_it(x, n), c_it()); + } + + //Just forward all operations to priv_insert_aux_impl + template + void priv_insert_aux(const_iterator p, FwdIt first, FwdIt last) + { + container_detail::advanced_insert_aux_proxy proxy(this->alloc(), first, last); + priv_insert_aux_impl(p, (size_type)std::distance(first, last), proxy); + } + + void priv_insert_aux_impl(const_iterator p, size_type n, advanced_insert_aux_int_t &interf) + { + iterator pos(p); + if(!this->members_.m_map){ + this->priv_initialize_map(0); + pos = this->begin(); + } + + const difference_type elemsbefore = pos - this->members_.m_start; + size_type length = this->size(); + if (elemsbefore < static_cast(length / 2)) { + iterator new_start = this->priv_reserve_elements_at_front(n); + iterator old_start = this->members_.m_start; + pos = this->members_.m_start + elemsbefore; + if (elemsbefore >= difference_type(n)) { + iterator start_n = this->members_.m_start + difference_type(n); + ::boost::container::uninitialized_move_alloc + (this->alloc(), this->members_.m_start, start_n, new_start); + this->members_.m_start = new_start; + boost::move(start_n, pos, old_start); + interf.copy_remaining_to(pos - difference_type(n)); + } + else { + difference_type mid_count = (difference_type(n) - elemsbefore); + iterator mid_start = old_start - mid_count; + interf.uninitialized_copy_some_and_update(mid_start, mid_count, true); + this->members_.m_start = mid_start; + ::boost::container::uninitialized_move_alloc + (this->alloc(), old_start, pos, new_start); + this->members_.m_start = new_start; + interf.copy_remaining_to(old_start); + } + } + else { + iterator new_finish = this->priv_reserve_elements_at_back(n); + iterator old_finish = this->members_.m_finish; + const difference_type elemsafter = + difference_type(length) - elemsbefore; + pos = this->members_.m_finish - elemsafter; + if (elemsafter >= difference_type(n)) { + iterator finish_n = this->members_.m_finish - difference_type(n); + ::boost::container::uninitialized_move_alloc + (this->alloc(), finish_n, this->members_.m_finish, this->members_.m_finish); + this->members_.m_finish = new_finish; + boost::move_backward(pos, finish_n, old_finish); + interf.copy_remaining_to(pos); + } + else { + interf.uninitialized_copy_some_and_update(old_finish, elemsafter, false); + this->members_.m_finish += n-elemsafter; + ::boost::container::uninitialized_move_alloc + (this->alloc(), pos, old_finish, this->members_.m_finish); + this->members_.m_finish = new_finish; + interf.copy_remaining_to(pos); + } + } + } + + void priv_insert_back_aux_impl(size_type n, advanced_insert_aux_int_t &interf) + { + if(!this->members_.m_map){ + this->priv_initialize_map(0); + } + + iterator new_finish = this->priv_reserve_elements_at_back(n); + iterator old_finish = this->members_.m_finish; + interf.uninitialized_copy_some_and_update(old_finish, n, true); + this->members_.m_finish = new_finish; + } + + void priv_insert_front_aux_impl(size_type n, advanced_insert_aux_int_t &interf) + { + if(!this->members_.m_map){ + this->priv_initialize_map(0); + } + + iterator new_start = this->priv_reserve_elements_at_front(n); + interf.uninitialized_copy_some_and_update(new_start, difference_type(n), true); + this->members_.m_start = new_start; + } + + + void priv_fill_insert(const_iterator pos, size_type n, const value_type& x) + { + typedef constant_iterator c_it; + this->insert(pos, c_it(x, n), c_it()); + } + + // Precondition: this->members_.m_start and this->members_.m_finish have already been initialized, + // but none of the deque's elements have yet been constructed. + void priv_fill_initialize(const value_type& value) + { + index_pointer cur; + BOOST_TRY { + for (cur = this->members_.m_start.m_node; cur < this->members_.m_finish.m_node; ++cur){ + boost::container::uninitialized_fill_alloc + (this->alloc(), *cur, *cur + this->s_buffer_size(), value); + } + boost::container::uninitialized_fill_alloc + (this->alloc(), this->members_.m_finish.m_first, this->members_.m_finish.m_cur, value); + } + BOOST_CATCH(...){ + this->priv_destroy_range(this->members_.m_start, iterator(*cur, cur)); + BOOST_RETHROW + } + BOOST_CATCH_END + } + + template + void priv_range_initialize(InpIt first, InpIt last, std::input_iterator_tag) + { + this->priv_initialize_map(0); + BOOST_TRY { + for ( ; first != last; ++first) + this->push_back(*first); + } + BOOST_CATCH(...){ + this->clear(); + BOOST_RETHROW + } + BOOST_CATCH_END + } + + template + void priv_range_initialize(FwdIt first, FwdIt last, std::forward_iterator_tag) + { + size_type n = 0; + n = std::distance(first, last); + this->priv_initialize_map(n); + + index_pointer cur_node; + BOOST_TRY { + for (cur_node = this->members_.m_start.m_node; + cur_node < this->members_.m_finish.m_node; + ++cur_node) { + FwdIt mid = first; + std::advance(mid, this->s_buffer_size()); + ::boost::container::uninitialized_copy_or_move_alloc + (this->alloc(), first, mid, *cur_node); + first = mid; + } + ::boost::container::uninitialized_copy_or_move_alloc + (this->alloc(), first, last, this->members_.m_finish.m_first); + } + BOOST_CATCH(...){ + this->priv_destroy_range(this->members_.m_start, iterator(*cur_node, cur_node)); + BOOST_RETHROW + } + BOOST_CATCH_END + } + + // Called only if this->members_.m_finish.m_cur == this->members_.m_finish.m_first. + void priv_pop_back_aux() + { + this->priv_deallocate_node(this->members_.m_finish.m_first); + this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node - 1); + this->members_.m_finish.m_cur = this->members_.m_finish.m_last - 1; + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_finish.m_cur) + ); + } + + // Called only if this->members_.m_start.m_cur == this->members_.m_start.m_last - 1. Note that + // if the deque has at least one element (a precondition for this member + // function), and if this->members_.m_start.m_cur == this->members_.m_start.m_last, then the deque + // must have at least two nodes. + void priv_pop_front_aux() + { + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_start.m_cur) + ); + this->priv_deallocate_node(this->members_.m_start.m_first); + this->members_.m_start.priv_set_node(this->members_.m_start.m_node + 1); + this->members_.m_start.m_cur = this->members_.m_start.m_first; + } + + iterator priv_reserve_elements_at_front(size_type n) + { + size_type vacancies = this->members_.m_start.m_cur - this->members_.m_start.m_first; + if (n > vacancies){ + size_type new_elems = n-vacancies; + size_type new_nodes = (new_elems + this->s_buffer_size() - 1) / + this->s_buffer_size(); + size_type s = (size_type)(this->members_.m_start.m_node - this->members_.m_map); + if (new_nodes > s){ + this->priv_reallocate_map(new_nodes, true); + } + size_type i = 1; + BOOST_TRY { + for (; i <= new_nodes; ++i) + *(this->members_.m_start.m_node - i) = this->priv_allocate_node(); + } + BOOST_CATCH(...) { + for (size_type j = 1; j < i; ++j) + this->priv_deallocate_node(*(this->members_.m_start.m_node - j)); + BOOST_RETHROW + } + BOOST_CATCH_END + } + return this->members_.m_start - difference_type(n); + } + + iterator priv_reserve_elements_at_back(size_type n) + { + size_type vacancies = (this->members_.m_finish.m_last - this->members_.m_finish.m_cur) - 1; + if (n > vacancies){ + size_type new_elems = n - vacancies; + size_type new_nodes = (new_elems + this->s_buffer_size() - 1)/s_buffer_size(); + size_type s = (size_type)(this->members_.m_map_size - (this->members_.m_finish.m_node - this->members_.m_map)); + if (new_nodes + 1 > s){ + this->priv_reallocate_map(new_nodes, false); + } + size_type i; + BOOST_TRY { + for (i = 1; i <= new_nodes; ++i) + *(this->members_.m_finish.m_node + i) = this->priv_allocate_node(); + } + BOOST_CATCH(...) { + for (size_type j = 1; j < i; ++j) + this->priv_deallocate_node(*(this->members_.m_finish.m_node + j)); + BOOST_RETHROW + } + BOOST_CATCH_END + } + return this->members_.m_finish + difference_type(n); + } + + void priv_reallocate_map(size_type nodes_to_add, bool add_at_front) + { + size_type old_num_nodes = this->members_.m_finish.m_node - this->members_.m_start.m_node + 1; + size_type new_num_nodes = old_num_nodes + nodes_to_add; + + index_pointer new_nstart; + if (this->members_.m_map_size > 2 * new_num_nodes) { + new_nstart = this->members_.m_map + (this->members_.m_map_size - new_num_nodes) / 2 + + (add_at_front ? nodes_to_add : 0); + if (new_nstart < this->members_.m_start.m_node) + boost::move(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart); + else + boost::move_backward + (this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart + old_num_nodes); + } + else { + size_type new_map_size = + this->members_.m_map_size + container_detail::max_value(this->members_.m_map_size, nodes_to_add) + 2; + + index_pointer new_map = this->priv_allocate_map(new_map_size); + new_nstart = new_map + (new_map_size - new_num_nodes) / 2 + + (add_at_front ? nodes_to_add : 0); + boost::move(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart); + this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); + + this->members_.m_map = new_map; + this->members_.m_map_size = new_map_size; + } + + this->members_.m_start.priv_set_node(new_nstart); + this->members_.m_finish.priv_set_node(new_nstart + old_num_nodes - 1); + } + /// @endcond +}; + +// Nonmember functions. +template +inline bool operator==(const deque& x, + const deque& y) +{ + return x.size() == y.size() && equal(x.begin(), x.end(), y.begin()); +} + +template +inline bool operator<(const deque& x, + const deque& y) +{ + return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); +} + +template +inline bool operator!=(const deque& x, + const deque& y) + { return !(x == y); } + +template +inline bool operator>(const deque& x, + const deque& y) + { return y < x; } + +template +inline bool operator<=(const deque& x, + const deque& y) + { return !(y < x); } + +template +inline bool operator>=(const deque& x, + const deque& y) + { return !(x < y); } + + +template +inline void swap(deque& x, deque& y) +{ x.swap(y); } + +}} + +/// @cond + +namespace boost { +/* +//!has_trivial_destructor_after_move<> == true_type +//!specialization for optimizations +template +struct has_trivial_destructor_after_move > +{ + enum { value = has_trivial_destructor::value }; +}; +*/ +} + +/// @endcond + +#include + +#endif // #ifndef BOOST_CONTAINER_DEQUE_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/adaptive_node_pool_impl.hpp b/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp similarity index 73% rename from 3party/boost/boost/interprocess/containers/container/detail/adaptive_node_pool_impl.hpp rename to 3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp index d2c88d9139..afba6b5f1b 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/adaptive_node_pool_impl.hpp +++ b/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -16,32 +16,33 @@ #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include +#include +#include +#include +#include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_POOL_COMMON_HPP +#include +#include +#include +#include #include #include namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { -struct hdr_offset_holder +template +struct hdr_offset_holder_t { - hdr_offset_holder(std::size_t offset = 0) + hdr_offset_holder_t(size_type offset = 0) : hdr_offset(offset) {} - std::size_t hdr_offset; + size_type hdr_offset; }; -template +template struct adaptive_pool_types { typedef VoidPointer void_pointer; @@ -50,9 +51,11 @@ struct adaptive_pool_types , bi::optimize_size , bi::constant_time_size , bi::link_mode >::type multiset_hook_t; + + typedef hdr_offset_holder_t hdr_offset_holder; struct block_info_t - : + : public hdr_offset_holder, public multiset_hook_t { @@ -77,23 +80,23 @@ struct adaptive_pool_types >::type block_multiset_t; }; - -inline std::size_t calculate_alignment - ( std::size_t overhead_percent, std::size_t real_node_size - , std::size_t hdr_size, std::size_t hdr_offset_size, std::size_t payload_per_allocation) +template +inline size_type calculate_alignment + ( size_type overhead_percent, size_type real_node_size + , size_type hdr_size, size_type hdr_offset_size, size_type payload_per_allocation) { //to-do: handle real_node_size != node_size - const std::size_t divisor = overhead_percent*real_node_size; - const std::size_t dividend = hdr_offset_size*100; - std::size_t elements_per_subblock = (dividend - 1)/divisor + 1; - std::size_t candidate_power_of_2 = + const size_type divisor = overhead_percent*real_node_size; + const size_type dividend = hdr_offset_size*100; + size_type elements_per_subblock = (dividend - 1)/divisor + 1; + size_type candidate_power_of_2 = upper_power_of_2(elements_per_subblock*real_node_size + hdr_offset_size); bool overhead_satisfied = false; //Now calculate the wors-case overhead for a subblock - const std::size_t max_subblock_overhead = hdr_size + payload_per_allocation; + const size_type max_subblock_overhead = hdr_size + payload_per_allocation; while(!overhead_satisfied){ elements_per_subblock = (candidate_power_of_2 - max_subblock_overhead)/real_node_size; - const std::size_t overhead_size = candidate_power_of_2 - elements_per_subblock*real_node_size; + const size_type overhead_size = candidate_power_of_2 - elements_per_subblock*real_node_size; if(overhead_size*100/candidate_power_of_2 < overhead_percent){ overhead_satisfied = true; } @@ -104,22 +107,23 @@ inline std::size_t calculate_alignment return candidate_power_of_2; } +template inline void calculate_num_subblocks - (std::size_t alignment, std::size_t real_node_size, std::size_t elements_per_block - , std::size_t &num_subblocks, std::size_t &real_num_node, std::size_t overhead_percent - , std::size_t hdr_size, std::size_t hdr_offset_size, std::size_t payload_per_allocation) + (size_type alignment, size_type real_node_size, size_type elements_per_block + , size_type &num_subblocks, size_type &real_num_node, size_type overhead_percent + , size_type hdr_size, size_type hdr_offset_size, size_type payload_per_allocation) { - std::size_t elements_per_subblock = (alignment - hdr_offset_size)/real_node_size; - std::size_t possible_num_subblock = (elements_per_block - 1)/elements_per_subblock + 1; - std::size_t hdr_subblock_elements = (alignment - hdr_size - payload_per_allocation)/real_node_size; + size_type elements_per_subblock = (alignment - hdr_offset_size)/real_node_size; + size_type possible_num_subblock = (elements_per_block - 1)/elements_per_subblock + 1; + size_type hdr_subblock_elements = (alignment - hdr_size - payload_per_allocation)/real_node_size; while(((possible_num_subblock-1)*elements_per_subblock + hdr_subblock_elements) < elements_per_block){ ++possible_num_subblock; } elements_per_subblock = (alignment - hdr_offset_size)/real_node_size; bool overhead_satisfied = false; while(!overhead_satisfied){ - const std::size_t total_data = (elements_per_subblock*(possible_num_subblock-1) + hdr_subblock_elements)*real_node_size; - const std::size_t total_size = alignment*possible_num_subblock; + const size_type total_data = (elements_per_subblock*(possible_num_subblock-1) + hdr_subblock_elements)*real_node_size; + const size_type total_size = alignment*possible_num_subblock; if((total_size - total_data)*100/total_size < overhead_percent){ overhead_satisfied = true; } @@ -141,7 +145,8 @@ class private_adaptive_node_pool_impl typedef private_adaptive_node_pool_impl this_type; typedef typename SegmentManagerBase::void_pointer void_pointer; - static const std::size_t PayloadPerAllocation = SegmentManagerBase::PayloadPerAllocation; + static const typename SegmentManagerBase:: + size_type PayloadPerAllocation = SegmentManagerBase::PayloadPerAllocation; typedef bool_ IsAlignOnly; typedef true_ AlignOnlyTrue; typedef false_ AlignOnlyFalse; @@ -150,15 +155,17 @@ class private_adaptive_node_pool_impl typedef typename node_slist::node_t node_t; typedef typename node_slist::node_slist_t free_nodes_t; typedef typename SegmentManagerBase::multiallocation_chain multiallocation_chain; + typedef typename SegmentManagerBase::size_type size_type; private: - typedef typename adaptive_pool_types::block_info_t block_info_t; - typedef typename adaptive_pool_types::block_multiset_t block_multiset_t; - typedef typename block_multiset_t::iterator block_iterator; + typedef typename adaptive_pool_types::block_info_t block_info_t; + typedef typename adaptive_pool_types::block_multiset_t block_multiset_t; + typedef typename block_multiset_t::iterator block_iterator; + typedef typename adaptive_pool_types::hdr_offset_holder hdr_offset_holder; - static const std::size_t MaxAlign = alignment_of::value; - static const std::size_t HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign; - static const std::size_t HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign; + static const size_type MaxAlign = alignment_of::value; + static const size_type HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign; + static const size_type HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign; public: @@ -168,20 +175,20 @@ class private_adaptive_node_pool_impl //!Constructor from a segment manager. Never throws private_adaptive_node_pool_impl ( segment_manager_base_type *segment_mngr_base - , std::size_t node_size - , std::size_t nodes_per_block - , std::size_t max_free_blocks + , size_type node_size + , size_type nodes_per_block + , size_type max_free_blocks , unsigned char overhead_percent ) : m_max_free_blocks(max_free_blocks) - , m_real_node_size(lcm(node_size, std::size_t(alignment_of::value))) + , m_real_node_size(lcm(node_size, size_type(alignment_of::value))) //Round the size to a power of two value. //This is the total memory size (including payload) that we want to //allocate from the general-purpose allocator , m_real_block_alignment (AlignOnly ? upper_power_of_2(HdrSize + m_real_node_size*nodes_per_block) : - calculate_alignment( overhead_percent, m_real_node_size + calculate_alignment( (size_type)overhead_percent, m_real_node_size , HdrSize, HdrOffsetSize, PayloadPerAllocation)) //This is the real number of nodes per block , m_num_subblocks(0) @@ -198,7 +205,7 @@ class private_adaptive_node_pool_impl , nodes_per_block , m_num_subblocks , m_real_num_node - , overhead_percent + , (size_type)overhead_percent , HdrSize , HdrOffsetSize , PayloadPerAllocation); @@ -209,19 +216,19 @@ class private_adaptive_node_pool_impl ~private_adaptive_node_pool_impl() { priv_clear(); } - std::size_t get_real_num_node() const + size_type get_real_num_node() const { return m_real_num_node; } //!Returns the segment manager. Never throws segment_manager_base_type* get_segment_manager_base()const - { return containers_detail::get_pointer(mp_segment_mngr_base); } + { return container_detail::to_raw_pointer(mp_segment_mngr_base); } //!Allocates array of count elements. Can throw void *allocate_node() { priv_invariants(); //If there are no free nodes we allocate a new block - if (m_block_multiset.empty()){ + if (m_block_multiset.empty()){ priv_alloc_block(1); } //We take the first free node the multiset can't be empty @@ -241,12 +248,12 @@ class private_adaptive_node_pool_impl priv_invariants(); } - //!Allocates n nodes. + //!Allocates n nodes. //!Can throw - multiallocation_chain allocate_nodes(const std::size_t n) + multiallocation_chain allocate_nodes(const size_type n) { multiallocation_chain chain; - std::size_t i = 0; + size_type i = 0; try{ priv_invariants(); while(i != n){ @@ -255,12 +262,12 @@ class private_adaptive_node_pool_impl priv_alloc_block(((n - i) - 1)/m_real_num_node + 1); } free_nodes_t &free_nodes = m_block_multiset.begin()->free_nodes; - const std::size_t free_nodes_count_before = free_nodes.size(); + const size_type free_nodes_count_before = free_nodes.size(); if(free_nodes_count_before == m_real_num_node){ --m_totally_free_blocks; } - const std::size_t num_elems = ((n-i) < free_nodes_count_before) ? (n-i) : free_nodes_count_before; - for(std::size_t j = 0; j != num_elems; ++j){ + const size_type num_elems = ((n-i) < free_nodes_count_before) ? (n-i) : free_nodes_count_before; + for(size_type j = 0; j != num_elems; ++j){ void *new_node = &free_nodes.front(); free_nodes.pop_front(); chain.push_back(new_node); @@ -273,11 +280,11 @@ class private_adaptive_node_pool_impl } } catch(...){ - this->deallocate_nodes(BOOST_CONTAINER_MOVE_NAMESPACE::move(chain)); + this->deallocate_nodes(boost::move(chain)); throw; } priv_invariants(); - return BOOST_CONTAINER_MOVE_NAMESPACE::move(chain); + return boost::move(chain); } //!Deallocates a linked list of nodes. Never throws @@ -292,10 +299,10 @@ class private_adaptive_node_pool_impl void deallocate_free_blocks() { this->priv_deallocate_free_blocks(0); } - std::size_t num_free_nodes() + size_type num_free_nodes() { typedef typename block_multiset_t::const_iterator citerator; - std::size_t count = 0; + size_type count = 0; citerator it (m_block_multiset.begin()), itend(m_block_multiset.end()); for(; it != itend; ++it){ count += it->free_nodes.size(); @@ -319,7 +326,7 @@ class private_adaptive_node_pool_impl { this->priv_deallocate_free_blocks(0); } private: - void priv_deallocate_free_blocks(std::size_t max_free_blocks) + void priv_deallocate_free_blocks(size_type max_free_blocks) { priv_invariants(); //Now check if we've reached the free nodes limit @@ -337,11 +344,11 @@ class private_adaptive_node_pool_impl } } - void priv_reinsert_nodes_in_block(multiallocation_chain &chain, std::size_t n) + void priv_reinsert_nodes_in_block(multiallocation_chain &chain, size_type n) { block_iterator block_it(m_block_multiset.end()); while(n--){ - void *pElem = containers_detail::get_pointer(chain.front()); + void *pElem = container_detail::to_raw_pointer(chain.front()); chain.pop_front(); priv_invariants(); block_info_t *block_info = this->priv_block_from_node(pElem); @@ -355,7 +362,7 @@ class private_adaptive_node_pool_impl ++next_block; //Cache the free nodes from the block - std::size_t this_block_free_nodes = this_block->free_nodes.size(); + size_type this_block_free_nodes = this_block->free_nodes.size(); if(this_block_free_nodes == 1){ m_block_multiset.insert(m_block_multiset.begin(), *block_info); @@ -364,7 +371,7 @@ class private_adaptive_node_pool_impl block_iterator next_block(this_block); ++next_block; if(next_block != block_it){ - std::size_t next_free_nodes = next_block->free_nodes.size(); + size_type next_free_nodes = next_block->free_nodes.size(); if(this_block_free_nodes > next_free_nodes){ //Now move the block to the new position m_block_multiset.erase(this_block); @@ -386,7 +393,7 @@ class private_adaptive_node_pool_impl //We take the first free node the multiset can't be empty free_nodes_t &free_nodes = m_block_multiset.begin()->free_nodes; node_t *first_node = &free_nodes.front(); - const std::size_t free_nodes_count = free_nodes.size(); + const size_type free_nodes_count = free_nodes.size(); BOOST_ASSERT(0 != free_nodes_count); free_nodes.pop_front(); if(free_nodes_count == 1){ @@ -415,7 +422,7 @@ class private_adaptive_node_pool_impl private: void do_destroy(typename block_multiset_t::pointer to_deallocate, AlignOnlyTrue) { - std::size_t free_nodes = to_deallocate->free_nodes.size(); + size_type free_nodes = to_deallocate->free_nodes.size(); (void)free_nodes; BOOST_ASSERT(free_nodes == mp_impl->m_real_num_node); mp_impl->mp_segment_mngr_base->deallocate(to_deallocate); @@ -423,11 +430,11 @@ class private_adaptive_node_pool_impl void do_destroy(typename block_multiset_t::pointer to_deallocate, AlignOnlyFalse) { - std::size_t free_nodes = to_deallocate->free_nodes.size(); + size_type free_nodes = to_deallocate->free_nodes.size(); (void)free_nodes; BOOST_ASSERT(free_nodes == mp_impl->m_real_num_node); BOOST_ASSERT(0 == to_deallocate->hdr_offset); - hdr_offset_holder *hdr_off_holder = mp_impl->priv_first_subblock_from_block(containers_detail::get_pointer(to_deallocate)); + hdr_offset_holder *hdr_off_holder = mp_impl->priv_first_subblock_from_block(container_detail::to_raw_pointer(to_deallocate)); mp_impl->mp_segment_mngr_base->deallocate(hdr_off_holder); } @@ -441,13 +448,13 @@ class private_adaptive_node_pool_impl #undef BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS { //We iterate through the block tree to free the memory - block_iterator it(m_block_multiset.begin()), + block_iterator it(m_block_multiset.begin()), itend(m_block_multiset.end()), to_deallocate; if(it != itend){ for(++it; it != itend; ++it){ block_iterator prev(it); --prev; - std::size_t sp = prev->free_nodes.size(), + size_type sp = prev->free_nodes.size(), si = it->free_nodes.size(); BOOST_ASSERT(sp <= si); (void)sp; (void)si; @@ -456,7 +463,7 @@ class private_adaptive_node_pool_impl //Check that the total free nodes are correct it = m_block_multiset.begin(); itend = m_block_multiset.end(); - std::size_t total_free_nodes = 0; + size_type total_free_nodes = 0; for(; it != itend; ++it){ total_free_nodes += it->free_nodes.size(); } @@ -476,9 +483,9 @@ class private_adaptive_node_pool_impl it = m_block_multiset.begin(); for(; it != itend; ++it){ hdr_offset_holder *hdr_off_holder = priv_first_subblock_from_block(&*it); - for(std::size_t i = 0, max = m_num_subblocks; i < max; ++i){ - BOOST_ASSERT(hdr_off_holder->hdr_offset == std::size_t(reinterpret_cast(&*it)- reinterpret_cast(hdr_off_holder))); - BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1))); + for(size_type i = 0, max = m_num_subblocks; i < max; ++i){ + BOOST_ASSERT(hdr_off_holder->hdr_offset == size_type(reinterpret_cast(&*it)- reinterpret_cast(hdr_off_holder))); + BOOST_ASSERT(0 == ((size_type)hdr_off_holder & (m_real_block_alignment - 1))); BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1))); hdr_off_holder = reinterpret_cast(reinterpret_cast(hdr_off_holder) + m_real_block_alignment); } @@ -495,7 +502,7 @@ class private_adaptive_node_pool_impl #ifndef NDEBUG block_iterator it = m_block_multiset.begin(); block_iterator itend = m_block_multiset.end(); - std::size_t num_free_nodes = 0; + size_type num_free_nodes = 0; for(; it != itend; ++it){ //Check for memory leak BOOST_ASSERT(it->free_nodes.size() == m_real_num_node); @@ -512,7 +519,7 @@ class private_adaptive_node_pool_impl block_info_t *priv_block_from_node(void *node, AlignOnlyFalse) const { hdr_offset_holder *hdr_off_holder = - reinterpret_cast((std::size_t)node & std::size_t(~(m_real_block_alignment - 1))); + reinterpret_cast((std::size_t)node & size_type(~(m_real_block_alignment - 1))); BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1))); BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1))); block_info_t *block = reinterpret_cast @@ -533,44 +540,44 @@ class private_adaptive_node_pool_impl { hdr_offset_holder *hdr_off_holder = reinterpret_cast (reinterpret_cast(block) - (m_num_subblocks-1)*m_real_block_alignment); - BOOST_ASSERT(hdr_off_holder->hdr_offset == std::size_t(reinterpret_cast(block) - reinterpret_cast(hdr_off_holder))); - BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1))); + BOOST_ASSERT(hdr_off_holder->hdr_offset == size_type(reinterpret_cast(block) - reinterpret_cast(hdr_off_holder))); + BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1))); BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1))); return hdr_off_holder; } //!Allocates a several blocks of nodes. Can throw - void priv_alloc_block(std::size_t n, AlignOnlyTrue) + void priv_alloc_block(size_type n, AlignOnlyTrue) { - std::size_t real_block_size = m_real_block_alignment - PayloadPerAllocation; - for(std::size_t i = 0; i != n; ++i){ + size_type real_block_size = m_real_block_alignment - PayloadPerAllocation; + for(size_type i = 0; i != n; ++i){ //We allocate a new NodeBlock and put it the last //element of the tree char *mem_address = static_cast (mp_segment_mngr_base->allocate_aligned(real_block_size, m_real_block_alignment)); if(!mem_address) throw std::bad_alloc(); ++m_totally_free_blocks; - block_info_t *c_info = new(mem_address)block_info_t; + block_info_t *c_info = new(mem_address)block_info_t(); m_block_multiset.insert(m_block_multiset.end(), *c_info); - + mem_address += HdrSize; - //We initialize all Nodes in Node Block to insert + //We initialize all Nodes in Node Block to insert //them in the free Node list typename free_nodes_t::iterator prev_insert_pos = c_info->free_nodes.before_begin(); - for(std::size_t i = 0; i < m_real_num_node; ++i){ + for(size_type i = 0; i < m_real_num_node; ++i){ prev_insert_pos = c_info->free_nodes.insert_after(prev_insert_pos, *(node_t*)mem_address); mem_address += m_real_node_size; } } } - void priv_alloc_block(std::size_t n, AlignOnlyFalse) + void priv_alloc_block(size_type n, AlignOnlyFalse) { - std::size_t real_block_size = m_real_block_alignment*m_num_subblocks - PayloadPerAllocation; - std::size_t elements_per_subblock = (m_real_block_alignment - HdrOffsetSize)/m_real_node_size; - std::size_t hdr_subblock_elements = (m_real_block_alignment - HdrSize - PayloadPerAllocation)/m_real_node_size; + size_type real_block_size = m_real_block_alignment*m_num_subblocks - PayloadPerAllocation; + size_type elements_per_subblock = (m_real_block_alignment - HdrOffsetSize)/m_real_node_size; + size_type hdr_subblock_elements = (m_real_block_alignment - HdrSize - PayloadPerAllocation)/m_real_node_size; - for(std::size_t i = 0; i != n; ++i){ + for(size_type i = 0; i != n; ++i){ //We allocate a new NodeBlock and put it the last //element of the tree char *mem_address = static_cast @@ -580,27 +587,27 @@ class private_adaptive_node_pool_impl //First initialize header information on the last subblock char *hdr_addr = mem_address + m_real_block_alignment*(m_num_subblocks-1); - block_info_t *c_info = new(hdr_addr)block_info_t; + block_info_t *c_info = new(hdr_addr)block_info_t(); //Some structural checks BOOST_ASSERT(static_cast(&static_cast(c_info)->hdr_offset) == static_cast(c_info)); typename free_nodes_t::iterator prev_insert_pos = c_info->free_nodes.before_begin(); - for( std::size_t subblock = 0, maxsubblock = m_num_subblocks - 1 + for( size_type subblock = 0, maxsubblock = m_num_subblocks - 1 ; subblock < maxsubblock ; ++subblock, mem_address += m_real_block_alignment){ //Initialize header offset mark - new(mem_address) hdr_offset_holder(std::size_t(hdr_addr - mem_address)); + new(mem_address) hdr_offset_holder(size_type(hdr_addr - mem_address)); char *pNode = mem_address + HdrOffsetSize; - for(std::size_t i = 0; i < elements_per_subblock; ++i){ + for(size_type i = 0; i < elements_per_subblock; ++i){ prev_insert_pos = c_info->free_nodes.insert_after(prev_insert_pos, *new (pNode) node_t); pNode += m_real_node_size; } } { char *pNode = hdr_addr + HdrSize; - //We initialize all Nodes in Node Block to insert + //We initialize all Nodes in Node Block to insert //them in the free Node list - for(std::size_t i = 0; i < hdr_subblock_elements; ++i){ + for(size_type i = 0; i < hdr_subblock_elements; ++i){ prev_insert_pos = c_info->free_nodes.insert_after(prev_insert_pos, *new (pNode) node_t); pNode += m_real_node_size; } @@ -611,31 +618,31 @@ class private_adaptive_node_pool_impl } //!Allocates a block of nodes. Can throw std::bad_alloc - void priv_alloc_block(std::size_t n) + void priv_alloc_block(size_type n) { return priv_alloc_block(n, IsAlignOnly()); } private: - typedef typename boost::pointer_to_other - ::type segment_mngr_base_ptr_t; - const std::size_t m_max_free_blocks; - const std::size_t m_real_node_size; + typedef typename boost::intrusive::pointer_traits + ::template rebind_pointer::type segment_mngr_base_ptr_t; + const size_type m_max_free_blocks; + const size_type m_real_node_size; //Round the size to a power of two value. //This is the total memory size (including payload) that we want to //allocate from the general-purpose allocator - const std::size_t m_real_block_alignment; - std::size_t m_num_subblocks; + const size_type m_real_block_alignment; + size_type m_num_subblocks; //This is the real number of nodes per block //const - std::size_t m_real_num_node; + size_type m_real_num_node; segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager block_multiset_t m_block_multiset; //Intrusive block list - std::size_t m_totally_free_blocks; //Free blocks + size_type m_totally_free_blocks; //Free blocks }; -} //namespace containers_detail { +} //namespace container_detail { } //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include #endif //#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP diff --git a/3party/boost/boost/container/detail/advanced_insert_int.hpp b/3party/boost/boost/container/detail/advanced_insert_int.hpp new file mode 100644 index 0000000000..a97af282e0 --- /dev/null +++ b/3party/boost/boost/container/detail/advanced_insert_int.hpp @@ -0,0 +1,451 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2008-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP +#define BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include "config_begin.hpp" +#include +#include +#include +#include +#include +#include //std::iterator_traits +#include + +namespace boost { namespace container { namespace container_detail { + +//This class will be interface for operations dependent on FwdIt types used advanced_insert_aux_impl +template +struct advanced_insert_aux_int +{ + typedef typename std::iterator_traits::difference_type difference_type; + virtual void copy_remaining_to(Iterator p) = 0; + virtual void uninitialized_copy_remaining_to(Iterator p) = 0; + virtual void uninitialized_copy_some_and_update(Iterator pos, difference_type division_count, bool first) = 0; + virtual void copy_some_and_update(Iterator pos, difference_type division_count, bool first) = 0; + virtual ~advanced_insert_aux_int() {} +}; + +//This class template will adapt each FwIt types to advanced_insert_aux_int +template +struct advanced_insert_aux_proxy + : public advanced_insert_aux_int +{ + typedef typename allocator_traits::size_type size_type; + typedef typename allocator_traits::value_type value_type; + typedef typename advanced_insert_aux_int::difference_type difference_type; + + advanced_insert_aux_proxy(A& a, FwdIt first, FwdIt last) + : a_(a), first_(first), last_(last) + {} + + virtual ~advanced_insert_aux_proxy() + {} + + virtual void copy_remaining_to(Iterator p) + { ::boost::copy_or_move(this->first_, this->last_, p); } + + virtual void uninitialized_copy_remaining_to(Iterator p) + { ::boost::container::uninitialized_copy_or_move_alloc(this->a_, this->first_, this->last_, p); } + + virtual void uninitialized_copy_some_and_update(Iterator pos, difference_type division_count, bool first_n) + { + FwdIt mid = this->first_; + std::advance(mid, division_count); + if(first_n){ + ::boost::container::uninitialized_copy_or_move_alloc(this->a_, this->first_, mid, pos); + this->first_ = mid; + } + else{ + ::boost::container::uninitialized_copy_or_move_alloc(this->a_, mid, this->last_, pos); + this->last_ = mid; + } + } + + virtual void copy_some_and_update(Iterator pos, difference_type division_count, bool first_n) + { + FwdIt mid = this->first_; + std::advance(mid, division_count); + if(first_n){ + ::boost::copy_or_move(this->first_, mid, pos); + this->first_ = mid; + } + else{ + ::boost::copy_or_move(mid, this->last_, pos); + this->last_ = mid; + } + } + A &a_; + FwdIt first_, last_; +}; + +//This class template will adapt default construction insertions to advanced_insert_aux_int +template +struct default_construct_aux_proxy + : public advanced_insert_aux_int +{ + typedef ::boost::container::allocator_traits alloc_traits; + typedef typename allocator_traits::size_type size_type; + typedef typename allocator_traits::value_type value_type; + typedef typename advanced_insert_aux_int::difference_type difference_type; + + default_construct_aux_proxy(A &a, size_type count) + : a_(a), count_(count) + {} + + virtual ~default_construct_aux_proxy() + {} + + virtual void copy_remaining_to(Iterator) + { //This should never be called with any count + BOOST_ASSERT(this->count_ == 0); + } + + virtual void uninitialized_copy_remaining_to(Iterator p) + { this->priv_uninitialized_copy(p, this->count_); } + + virtual void uninitialized_copy_some_and_update(Iterator pos, difference_type division_count, bool first_n) + { + size_type new_count; + if(first_n){ + new_count = division_count; + } + else{ + BOOST_ASSERT(difference_type(this->count_)>= division_count); + new_count = this->count_ - division_count; + } + this->priv_uninitialized_copy(pos, new_count); + } + + virtual void copy_some_and_update(Iterator , difference_type division_count, bool first_n) + { + BOOST_ASSERT(this->count_ == 0); + size_type new_count; + if(first_n){ + new_count = division_count; + } + else{ + BOOST_ASSERT(difference_type(this->count_)>= division_count); + new_count = this->count_ - division_count; + } + //This function should never called with a count different to zero + BOOST_ASSERT(new_count == 0); + (void)new_count; + } + + private: + void priv_uninitialized_copy(Iterator p, const size_type n) + { + BOOST_ASSERT(n <= this->count_); + Iterator orig_p = p; + size_type i = 0; + try{ + for(; i < n; ++i, ++p){ + alloc_traits::construct(this->a_, container_detail::to_raw_pointer(&*p)); + } + } + catch(...){ + while(i--){ + alloc_traits::destroy(this->a_, container_detail::to_raw_pointer(&*orig_p++)); + } + throw; + } + this->count_ -= n; + } + A &a_; + size_type count_; +}; + +}}} //namespace boost { namespace container { namespace container_detail { + +#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + +#include +#include +#include +#include +//#include //For debugging purposes + +namespace boost { +namespace container { +namespace container_detail { + + +//This class template will adapt emplace construction insertions of movable types +//to advanced_insert_aux_int +template +struct advanced_insert_aux_non_movable_emplace + : public advanced_insert_aux_int +{ + typedef boost::container::allocator_traits alloc_traits; + typedef typename allocator_traits::size_type size_type; + typedef typename allocator_traits::value_type value_type; + typedef typename advanced_insert_aux_int::difference_type difference_type; + typedef typename build_number_seq::type index_tuple_t; + + explicit advanced_insert_aux_non_movable_emplace(A &a, Args&&... args) + : a_(a) + , args_(args...) + , used_(false) + {} + + ~advanced_insert_aux_non_movable_emplace() + {} + + virtual void copy_remaining_to(Iterator) + //This code can't be called since value_type is not movable or copyable + { BOOST_ASSERT(false); } + + virtual void uninitialized_copy_remaining_to(Iterator p) + { this->priv_uninitialized_copy_remaining_to(index_tuple_t(), p); } + + virtual void uninitialized_copy_some_and_update(Iterator p, difference_type division_count, bool first_n) + { this->priv_uninitialized_copy_some_and_update(index_tuple_t(), p, division_count, first_n); } + + virtual void copy_some_and_update(Iterator, difference_type, bool ) + //This code can't be called since value_type is not movable or copyable + { BOOST_ASSERT(false); } + + private: + template + void priv_uninitialized_copy_some_and_update(const index_tuple&, Iterator p, difference_type division_count, bool first_n) + { + BOOST_ASSERT(division_count <=1); + if((first_n && division_count == 1) || (!first_n && division_count == 0)){ + if(!this->used_){ + alloc_traits::construct( this->a_ + , container_detail::to_raw_pointer(&*p) + , ::boost::container::container_detail:: + stored_ref::forward(get(this->args_))... + ); + this->used_ = true; + } + } + } + + template + void priv_uninitialized_copy_remaining_to(const index_tuple&, Iterator p) + { + if(!this->used_){ + alloc_traits::construct( this->a_ + , container_detail::to_raw_pointer(&*p) + , ::boost::container::container_detail:: + stored_ref::forward(get(this->args_))... + ); + this->used_ = true; + } + } + + protected: + A &a_; + tuple args_; + bool used_; +}; + +//This class template will adapt emplace construction insertions of movable types +//to advanced_insert_aux_int +template +struct advanced_insert_aux_emplace + : public advanced_insert_aux_non_movable_emplace +{ + typedef advanced_insert_aux_non_movable_emplace base_t; + typedef boost::container::allocator_traits alloc_traits; + typedef typename base_t::value_type value_type; + typedef typename base_t::difference_type difference_type; + typedef typename base_t::index_tuple_t index_tuple_t; + + explicit advanced_insert_aux_emplace(A &a, Args&&... args) + : base_t(a, ::boost::forward(args)...) + {} + + ~advanced_insert_aux_emplace() + {} + + //Override only needed functions + virtual void copy_remaining_to(Iterator p) + { this->priv_copy_remaining_to(index_tuple_t(), p); } + + virtual void copy_some_and_update(Iterator p, difference_type division_count, bool first_n) + { this->priv_copy_some_and_update(index_tuple_t(), p, division_count, first_n); } + + private: + template + void priv_copy_remaining_to(const index_tuple&, Iterator p) + { + if(!this->used_){ + aligned_storage::value> v; + value_type *vp = static_cast(static_cast(&v)); + alloc_traits::construct(this->a_, vp, + ::boost::container::container_detail::stored_ref::forward(get(this->args_))...); + scoped_destructor d(this->a_, vp); + *p = ::boost::move(*vp); + d.release(); + this->used_ = true; + } + } + + template + void priv_copy_some_and_update(const index_tuple&, Iterator p, difference_type division_count, bool first_n) + { + BOOST_ASSERT(division_count <=1); + if((first_n && division_count == 1) || (!first_n && division_count == 0)){ + if(!this->used_){ + aligned_storage::value> v; + value_type *vp = static_cast(static_cast(&v)); + alloc_traits::construct(this->a_, vp, + ::boost::container::container_detail::stored_ref::forward(get(this->args_))...); + try { + *p = ::boost::move(*vp); + } catch (...) { + alloc_traits::destroy(this->a_, vp); + throw; + } + alloc_traits::destroy(this->a_, vp); + this->used_ = true; + } + } + } +}; + +}}} //namespace boost { namespace container { namespace container_detail { + +#else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + +#include +#include + +namespace boost { +namespace container { +namespace container_detail { + +#define BOOST_PP_LOCAL_MACRO(n) \ +template \ +struct BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_non_movable_emplace, n), arg) \ + : public advanced_insert_aux_int \ +{ \ + typedef boost::container::allocator_traits alloc_traits; \ + typedef typename allocator_traits::size_type size_type; \ + typedef typename allocator_traits::value_type value_type; \ + typedef typename advanced_insert_aux_int::difference_type \ + difference_type; \ + \ + BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_non_movable_emplace, n), arg) \ + ( A &a BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \ + : a_(a) \ + , used_(false) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_INIT, _) \ + {} \ + \ + virtual void copy_remaining_to(Iterator) \ + { BOOST_ASSERT(false); } \ + \ + virtual void uninitialized_copy_remaining_to(Iterator p) \ + { \ + if(!this->used_){ \ + alloc_traits::construct \ + ( this->a_ \ + , container_detail::to_raw_pointer(&*p) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _) \ + ); \ + this->used_ = true; \ + } \ + } \ + \ + virtual void uninitialized_copy_some_and_update \ + (Iterator p, difference_type division_count, bool first_n) \ + { \ + BOOST_ASSERT(division_count <=1); \ + if((first_n && division_count == 1) || (!first_n && division_count == 0)){ \ + if(!this->used_){ \ + alloc_traits::construct \ + ( this->a_ \ + , container_detail::to_raw_pointer(&*p) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _) \ + ); \ + this->used_ = true; \ + } \ + } \ + } \ + \ + virtual void copy_some_and_update(Iterator, difference_type, bool) \ + { BOOST_ASSERT(false); } \ + \ + A &a_; \ + bool used_; \ + BOOST_PP_REPEAT(n, BOOST_CONTAINER_PP_PARAM_DEFINE, _) \ +}; \ + \ +template \ +struct BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + : BOOST_PP_CAT(BOOST_PP_CAT( \ + advanced_insert_aux_non_movable_emplace, n), arg) \ + < A, Iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P) > \ +{ \ + typedef BOOST_PP_CAT(BOOST_PP_CAT( \ + advanced_insert_aux_non_movable_emplace, n), arg) \ + base_t; \ + typedef typename base_t::value_type value_type; \ + typedef typename base_t::difference_type difference_type; \ + typedef boost::container::allocator_traits alloc_traits; \ + \ + BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + ( A &a BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \ + : base_t(a BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ) \ + {} \ + \ + virtual void copy_remaining_to(Iterator p) \ + { \ + if(!this->used_){ \ + aligned_storage::value> v; \ + value_type *vp = static_cast(static_cast(&v)); \ + alloc_traits::construct(this->a_, vp \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _)); \ + scoped_destructor d(this->a_, vp); \ + *p = ::boost::move(*vp); \ + d.release(); \ + this->used_ = true; \ + } \ + } \ + \ + virtual void copy_some_and_update \ + (Iterator p, difference_type division_count, bool first_n) \ + { \ + BOOST_ASSERT(division_count <=1); \ + if((first_n && division_count == 1) || (!first_n && division_count == 0)){ \ + if(!this->used_){ \ + aligned_storage::value> v; \ + value_type *vp = static_cast(static_cast(&v)); \ + alloc_traits::construct(this->a_, vp \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _)); \ + scoped_destructor d(this->a_, vp); \ + *p = ::boost::move(*vp); \ + d.release(); \ + this->used_ = true; \ + } \ + } \ + } \ +}; \ +//! + +#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) +#include BOOST_PP_LOCAL_ITERATE() + +}}} //namespace boost { namespace container { namespace container_detail { + +#endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + +#include + +#endif //#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP diff --git a/3party/boost/boost/container/detail/algorithms.hpp b/3party/boost/boost/container/detail/algorithms.hpp new file mode 100644 index 0000000000..dc09575b24 --- /dev/null +++ b/3party/boost/boost/container/detail/algorithms.hpp @@ -0,0 +1,60 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. +// +// 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP +#define BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include "config_begin.hpp" +#include + +#include +#include +#include + +#include +#include +#include + + +#include + +namespace boost { +namespace container { + +template +inline void construct_in_place(A &a, T* dest, InpIt source) +{ boost::container::allocator_traits::construct(a, dest, *source); } +//#endif + +template +inline void construct_in_place(A &a, T *dest, default_construct_iterator) +{ + boost::container::allocator_traits::construct(a, dest); +} + +template +inline void construct_in_place(A &a, T *dest, emplace_iterator ei) +{ + ei.construct_in_place(a, dest); +} + +} //namespace container { +} //namespace boost { + +#include + +#endif //#ifndef BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP + diff --git a/3party/boost/boost/interprocess/containers/container/detail/allocation_type.hpp b/3party/boost/boost/container/detail/allocation_type.hpp similarity index 83% rename from 3party/boost/boost/interprocess/containers/container/detail/allocation_type.hpp rename to 3party/boost/boost/container/detail/allocation_type.hpp index 88f08ba8db..1ebf20ed70 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/allocation_type.hpp +++ b/3party/boost/boost/container/detail/allocation_type.hpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,22 +8,22 @@ // /////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_ALLOCATION_TYPE_HPP -#define BOOST_CONTAINERS_ALLOCATION_TYPE_HPP +#ifndef BOOST_CONTAINER_ALLOCATION_TYPE_HPP +#define BOOST_CONTAINER_ALLOCATION_TYPE_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include namespace boost { namespace container { /// @cond enum allocation_type_v -{ +{ // constants for allocation commands allocate_new_v = 0x01, expand_fwd_v = 0x02, @@ -49,6 +49,6 @@ static const allocation_type zero_memory = (allocation_type)zero_memory_v } //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //BOOST_CONTAINERS_ALLOCATION_TYPE_HPP +#endif //BOOST_CONTAINER_ALLOCATION_TYPE_HPP diff --git a/3party/boost/boost/container/detail/config_begin.hpp b/3party/boost/boost/container/detail/config_begin.hpp new file mode 100644 index 0000000000..83c2cfe40c --- /dev/null +++ b/3party/boost/boost/container/detail/config_begin.hpp @@ -0,0 +1,49 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED +#define BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED +#include + +#endif //BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED + +#ifdef BOOST_MSVC + #ifndef _CRT_SECURE_NO_DEPRECATE + #define BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE + #define _CRT_SECURE_NO_DEPRECATE + #endif + #pragma warning (push) + #pragma warning (disable : 4702) // unreachable code + #pragma warning (disable : 4706) // assignment within conditional expression + #pragma warning (disable : 4127) // conditional expression is constant + #pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned + #pragma warning (disable : 4284) // odd return type for operator-> + #pragma warning (disable : 4244) // possible loss of data + #pragma warning (disable : 4251) // "identifier" : class "type" needs to have dll-interface to be used by clients of class "type2" + #pragma warning (disable : 4267) // conversion from "X" to "Y", possible loss of data + #pragma warning (disable : 4275) // non DLL-interface classkey "identifier" used as base for DLL-interface classkey "identifier" + #pragma warning (disable : 4355) // "this" : used in base member initializer list + #pragma warning (disable : 4503) // "identifier" : decorated name length exceeded, name was truncated + #pragma warning (disable : 4511) // copy constructor could not be generated + #pragma warning (disable : 4512) // assignment operator could not be generated + #pragma warning (disable : 4514) // unreferenced inline removed + #pragma warning (disable : 4521) // Disable "multiple copy constructors specified" + #pragma warning (disable : 4522) // "class" : multiple assignment operators specified + #pragma warning (disable : 4675) // "method" should be declared "static" and have exactly one parameter + #pragma warning (disable : 4710) // function not inlined + #pragma warning (disable : 4711) // function selected for automatic inline expansion + #pragma warning (disable : 4786) // identifier truncated in debug info + #pragma warning (disable : 4996) // "function": was declared deprecated + #pragma warning (disable : 4197) // top-level volatile in cast is ignored + #pragma warning (disable : 4541) // 'typeid' used on polymorphic type 'boost::exception' + // with /GR-; unpredictable behavior may result + #pragma warning (disable : 4673) // throwing '' the following types will not be considered at the catch site + #pragma warning (disable : 4671) // the copy constructor is inaccessible + #pragma warning (disable : 4584) // X is already a base-class of Y +#endif //BOOST_MSVC diff --git a/3party/boost/boost/interprocess/containers/container/detail/config_end.hpp b/3party/boost/boost/container/detail/config_end.hpp similarity index 71% rename from 3party/boost/boost/interprocess/containers/container/detail/config_end.hpp rename to 3party/boost/boost/container/detail/config_end.hpp index 4738322783..34513718cc 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/config_end.hpp +++ b/3party/boost/boost/container/detail/config_end.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -9,8 +9,8 @@ ////////////////////////////////////////////////////////////////////////////// #if defined BOOST_MSVC #pragma warning (pop) - #ifdef BOOST_CONTAINERS_DETAIL_CRT_SECURE_NO_DEPRECATE - #undef BOOST_CONTAINERS_DETAIL_CRT_SECURE_NO_DEPRECATE + #ifdef BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE + #undef BOOST_CONTAINER_DETAIL_CRT_SECURE_NO_DEPRECATE #undef _CRT_SECURE_NO_DEPRECATE #endif #endif diff --git a/3party/boost/boost/container/detail/destroyers.hpp b/3party/boost/boost/container/detail/destroyers.hpp new file mode 100644 index 0000000000..d1b118cdcc --- /dev/null +++ b/3party/boost/boost/container/detail/destroyers.hpp @@ -0,0 +1,253 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. +// +// 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DESTROYERS_HPP +#define BOOST_CONTAINER_DESTROYERS_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include "config_begin.hpp" +#include +#include +#include +#include + +namespace boost { +namespace container { +namespace container_detail { + +//!A deleter for scoped_ptr that deallocates the memory +//!allocated for an array of objects using a STL allocator. +template +struct scoped_array_deallocator +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::pointer pointer; + typedef typename AllocTraits::size_type size_type; + + scoped_array_deallocator(pointer p, Allocator& a, size_type length) + : m_ptr(p), m_alloc(a), m_length(length) {} + + ~scoped_array_deallocator() + { if (m_ptr) m_alloc.deallocate(m_ptr, m_length); } + + void release() + { m_ptr = 0; } + + private: + pointer m_ptr; + Allocator& m_alloc; + size_type m_length; +}; + +template +struct null_scoped_array_deallocator +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::pointer pointer; + typedef typename AllocTraits::size_type size_type; + + null_scoped_array_deallocator(pointer, Allocator&, size_type) + {} + + void release() + {} +}; + +template +struct scoped_destroy_deallocator +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::pointer pointer; + typedef typename AllocTraits::size_type size_type; + typedef container_detail::integral_constant::value> alloc_version; + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + + scoped_destroy_deallocator(pointer p, Allocator& a) + : m_ptr(p), m_alloc(a) {} + + ~scoped_destroy_deallocator() + { + if(m_ptr){ + AllocTraits::destroy(m_alloc, container_detail::to_raw_pointer(m_ptr)); + priv_deallocate(m_ptr, alloc_version()); + } + } + + void release() + { m_ptr = 0; } + + private: + + void priv_deallocate(const pointer &p, allocator_v1) + { AllocTraits::deallocate(m_alloc, p, 1); } + + void priv_deallocate(const pointer &p, allocator_v2) + { m_alloc.deallocate_one(p); } + + pointer m_ptr; + Allocator& m_alloc; +}; + + +//!A deleter for scoped_ptr that destroys +//!an object using a STL allocator. +template +struct scoped_destructor_n +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::pointer pointer; + typedef typename AllocTraits::value_type value_type; + typedef typename AllocTraits::size_type size_type; + + scoped_destructor_n(pointer p, Allocator& a, size_type n) + : m_p(p), m_a(a), m_n(n) + {} + + void release() + { m_p = 0; } + + void increment_size(size_type inc) + { m_n += inc; } + + void increment_size_backwards(size_type inc) + { m_n += inc; m_p -= inc; } + + ~scoped_destructor_n() + { + if(!m_p) return; + value_type *raw_ptr = container_detail::to_raw_pointer(m_p); + for(size_type i = 0; i < m_n; ++i, ++raw_ptr) + AllocTraits::destroy(m_a, raw_ptr); + } + + private: + pointer m_p; + Allocator & m_a; + size_type m_n; +}; + +//!A deleter for scoped_ptr that destroys +//!an object using a STL allocator. +template +struct null_scoped_destructor_n +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::pointer pointer; + typedef typename AllocTraits::size_type size_type; + + null_scoped_destructor_n(pointer, Allocator&, size_type) + {} + + void increment_size(size_type) + {} + + void increment_size_backwards(size_type) + {} + + void release() + {} +}; + +template +class scoped_destructor +{ + typedef boost::container::allocator_traits AllocTraits; + public: + typedef typename A::value_type value_type; + scoped_destructor(A &a, value_type *pv) + : pv_(pv), a_(a) + {} + + ~scoped_destructor() + { + if(pv_){ + AllocTraits::destroy(a_, pv_); + } + } + + void release() + { pv_ = 0; } + + private: + value_type *pv_; + A &a_; +}; + + +template +class value_destructor +{ + typedef boost::container::allocator_traits AllocTraits; + public: + typedef typename A::value_type value_type; + value_destructor(A &a, value_type &rv) + : rv_(rv), a_(a) + {} + + ~value_destructor() + { + AllocTraits::destroy(a_, &rv_); + } + + private: + value_type &rv_; + A &a_; +}; + +template +class allocator_destroyer +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::value_type value_type; + typedef typename AllocTraits::pointer pointer; + typedef container_detail::integral_constant::value> alloc_version; + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + + private: + Allocator & a_; + + private: + void priv_deallocate(const pointer &p, allocator_v1) + { AllocTraits::deallocate(a_,p, 1); } + + void priv_deallocate(const pointer &p, allocator_v2) + { a_.deallocate_one(p); } + + public: + allocator_destroyer(Allocator &a) + : a_(a) + {} + + void operator()(const pointer &p) + { + AllocTraits::destroy(a_, container_detail::to_raw_pointer(p)); + priv_deallocate(p, alloc_version()); + } +}; + + +} //namespace container_detail { +} //namespace container { +} //namespace boost { + +#include + +#endif //#ifndef BOOST_CONTAINER_DESTROYERS_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/flat_tree.hpp b/3party/boost/boost/container/detail/flat_tree.hpp similarity index 52% rename from 3party/boost/boost/interprocess/containers/container/detail/flat_tree.hpp rename to 3party/boost/boost/container/detail/flat_tree.hpp index eb69df90f1..23be0bfd13 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/flat_tree.hpp +++ b/3party/boost/boost/container/detail/flat_tree.hpp @@ -1,60 +1,45 @@ //////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // // See http://www.boost.org/libs/container for documentation. // //////////////////////////////////////////////////////////////////////////////// -// The Loki Library -// Copyright (c) 2001 by Andrei Alexandrescu -// This code accompanies the book: -// Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design -// Patterns Applied". Copyright (c) 2001. Addison-Wesley. -// Permission to use, copy, modify, distribute and sell this software for any -// purpose is hereby granted without fee, provided that the above copyright -// notice appear in all copies and that both that copyright notice and this -// permission notice appear in supporting documentation. -// The author or Addison-Welsey Longman make no representations about the -// suitability of this software for any purpose. It is provided "as is" -// without express or implied warranty. -/////////////////////////////////////////////////////////////////////////////// -// -// Parts of this file come from AssocVector.h file from Loki library -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_FLAT_TREE_HPP -#define BOOST_CONTAINERS_FLAT_TREE_HPP +#ifndef BOOST_CONTAINER_FLAT_TREE_HPP +#define BOOST_CONTAINER_FLAT_TREE_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include #include #include #include #include -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP +#include -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_PAIR_HPP -#include INCLUDE_BOOST_CONTAINER_VECTOR_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_DESTROYERS_HPP +#include +#include +#include +#include +#include +#include +#include namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { template class flat_tree_value_compare @@ -63,20 +48,24 @@ class flat_tree_value_compare typedef Value first_argument_type; typedef Value second_argument_type; typedef bool return_type; - public: - flat_tree_value_compare(const Compare &pred) + public: + flat_tree_value_compare() + : Compare() + {} + + flat_tree_value_compare(const Compare &pred) : Compare(pred) {} bool operator()(const Value& lhs, const Value& rhs) const - { + { KeyOfValue key_extract; - return Compare::operator()(key_extract(lhs), key_extract(rhs)); + return Compare::operator()(key_extract(lhs), key_extract(rhs)); } const Compare &get_comp() const { return *this; } - + Compare &get_comp() { return *this; } }; @@ -84,66 +73,87 @@ class flat_tree_value_compare template struct get_flat_tree_iterators { - typedef typename containers_detail:: + typedef typename container_detail:: vector_iterator iterator; - typedef typename containers_detail:: + typedef typename container_detail:: vector_const_iterator const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; }; -template +template class flat_tree { - typedef boost::container::vector vector_t; - typedef Alloc allocator_t; + typedef boost::container::vector vector_t; + typedef A allocator_t; public: typedef flat_tree_value_compare value_compare; private: - struct Data + struct Data //Inherit from value_compare to do EBO : public value_compare { - private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(Data) + BOOST_COPYABLE_AND_MOVABLE(Data) + public: - Data(const Data &d) - : value_compare(d), m_vect(d.m_vect) + Data() + : value_compare(), m_vect() {} - Data(const Compare &comp, - const vector_t &vect) - : value_compare(comp), m_vect(vect){} - Data(const value_compare &comp, - const vector_t &vect) - : value_compare(comp), m_vect(vect){} + Data(const Data &d) + : value_compare(static_cast(d)), m_vect(d.m_vect) + {} + + Data(BOOST_RV_REF(Data) d) + : value_compare(boost::move(static_cast(d))), m_vect(boost::move(d.m_vect)) + {} + + Data(const Data &d, const A &a) + : value_compare(static_cast(d)), m_vect(d.m_vect, a) + {} + + Data(BOOST_RV_REF(Data) d, const A &a) + : value_compare(boost::move(static_cast(d))), m_vect(boost::move(d.m_vect), a) + {} + + Data(const Compare &comp) + : value_compare(comp), m_vect() + {} Data(const Compare &comp, - const allocator_t &alloc) - : value_compare(comp), m_vect(alloc){} + const allocator_t &alloc) + : value_compare(comp), m_vect(alloc) + {} - Data& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(Data) d) + Data& operator=(BOOST_COPY_ASSIGN_REF(Data) d) { this->value_compare::operator=(d); m_vect = d.m_vect; return *this; } - Data& operator=(BOOST_MOVE_MACRO_RV_REF(Data) d) + Data& operator=(BOOST_RV_REF(Data) d) { - this->value_compare::operator=(BOOST_CONTAINER_MOVE_NAMESPACE::move(static_cast(d))); - m_vect = BOOST_CONTAINER_MOVE_NAMESPACE::move(d.m_vect); + this->value_compare::operator=(boost::move(static_cast(d))); + m_vect = boost::move(d.m_vect); return *this; } + void swap(Data &d) + { + value_compare& mycomp = *this, & othercomp = d; + container_detail::do_swap(mycomp, othercomp); + this->m_vect.swap(d.m_vect); + } + vector_t m_vect; }; Data m_data; - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(flat_tree) + BOOST_COPYABLE_AND_MOVABLE(flat_tree) public: @@ -155,27 +165,46 @@ class flat_tree typedef Key key_type; typedef Compare key_compare; typedef typename vector_t::allocator_type allocator_type; - typedef allocator_type stored_allocator_type; - typedef typename allocator_type::size_type size_type; - typedef typename allocator_type::difference_type difference_type; + typedef typename vector_t::size_type size_type; + typedef typename vector_t::difference_type difference_type; typedef typename vector_t::iterator iterator; typedef typename vector_t::const_iterator const_iterator; - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; - + typedef typename vector_t::reverse_iterator reverse_iterator; + typedef typename vector_t::const_reverse_iterator const_reverse_iterator; - // allocation/deallocation - flat_tree(const Compare& comp = Compare(), - const allocator_type& a = allocator_type()) + //!Standard extension + typedef allocator_type stored_allocator_type; + + private: + typedef allocator_traits stored_allocator_traits; + + public: + flat_tree() + : m_data() + { } + + explicit flat_tree(const Compare& comp) + : m_data(comp) + { } + + flat_tree(const Compare& comp, const allocator_type& a) : m_data(comp, a) { } - flat_tree(const flat_tree& x) - : m_data(x.m_data, x.m_data.m_vect) + flat_tree(const flat_tree& x) + : m_data(x.m_data) { } - flat_tree(BOOST_MOVE_MACRO_RV_REF(flat_tree) x) - : m_data(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_data)) + flat_tree(BOOST_RV_REF(flat_tree) x) + : m_data(boost::move(x.m_data)) + { } + + flat_tree(const flat_tree& x, const allocator_type &a) + : m_data(x.m_data, a) + { } + + flat_tree(BOOST_RV_REF(flat_tree) x, const allocator_type &a) + : m_data(boost::move(x.m_data), a) { } template @@ -188,80 +217,73 @@ class flat_tree ~flat_tree() { } - flat_tree& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(flat_tree) x) + flat_tree& operator=(BOOST_COPY_ASSIGN_REF(flat_tree) x) { m_data = x.m_data; return *this; } - flat_tree& operator=(BOOST_MOVE_MACRO_RV_REF(flat_tree) mx) - { m_data = BOOST_CONTAINER_MOVE_NAMESPACE::move(mx.m_data); return *this; } + flat_tree& operator=(BOOST_RV_REF(flat_tree) mx) + { m_data = boost::move(mx.m_data); return *this; } - public: + public: // accessors: - Compare key_comp() const + Compare key_comp() const { return this->m_data.get_comp(); } - allocator_type get_allocator() const + allocator_type get_allocator() const { return this->m_data.m_vect.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return this->m_data.m_vect.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return this->m_data.m_vect.get_stored_allocator(); } - iterator begin() + iterator begin() { return this->m_data.m_vect.begin(); } - const_iterator begin() const + const_iterator begin() const { return this->cbegin(); } - const_iterator cbegin() const + const_iterator cbegin() const { return this->m_data.m_vect.begin(); } - iterator end() + iterator end() { return this->m_data.m_vect.end(); } - const_iterator end() const + const_iterator end() const { return this->cend(); } - const_iterator cend() const + const_iterator cend() const { return this->m_data.m_vect.end(); } - reverse_iterator rbegin() + reverse_iterator rbegin() { return reverse_iterator(this->end()); } - const_reverse_iterator rbegin() const + const_reverse_iterator rbegin() const { return this->crbegin(); } - const_reverse_iterator crbegin() const + const_reverse_iterator crbegin() const { return const_reverse_iterator(this->cend()); } - reverse_iterator rend() + reverse_iterator rend() { return reverse_iterator(this->begin()); } - const_reverse_iterator rend() const - { return this->crend(); } + const_reverse_iterator rend() const + { return this->crend(); } - const_reverse_iterator crend() const - { return const_reverse_iterator(this->cbegin()); } + const_reverse_iterator crend() const + { return const_reverse_iterator(this->cbegin()); } - bool empty() const + bool empty() const { return this->m_data.m_vect.empty(); } - size_type size() const + size_type size() const { return this->m_data.m_vect.size(); } - size_type max_size() const + size_type max_size() const { return this->m_data.m_vect.max_size(); } - void swap(flat_tree& other) - { - value_compare& mycomp = this->m_data; - value_compare& othercomp = other.m_data; - containers_detail::do_swap(mycomp, othercomp); - vector_t & myvect = this->m_data.m_vect; - vector_t & othervect = other.m_data.m_vect; - myvect.swap(othervect); - } + void swap(flat_tree& other) + { this->m_data.swap(other.m_data); } public: // insert/erase @@ -275,17 +297,16 @@ class flat_tree return ret; } - std::pair insert_unique(BOOST_MOVE_MACRO_RV_REF(value_type) val) + std::pair insert_unique(BOOST_RV_REF(value_type) val) { insert_commit_data data; std::pair ret = priv_insert_unique_prepare(val, data); if(ret.second){ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); + ret.first = priv_insert_commit(data, boost::move(val)); } return ret; } - iterator insert_equal(const value_type& val) { iterator i = this->upper_bound(KeyOfValue()(val)); @@ -293,10 +314,10 @@ class flat_tree return i; } - iterator insert_equal(BOOST_MOVE_MACRO_RV_REF(value_type) mval) + iterator insert_equal(BOOST_RV_REF(value_type) mval) { iterator i = this->upper_bound(KeyOfValue()(mval)); - i = this->m_data.m_vect.insert(i, BOOST_CONTAINER_MOVE_NAMESPACE::move(mval)); + i = this->m_data.m_vect.insert(i, boost::move(mval)); return i; } @@ -310,12 +331,12 @@ class flat_tree return ret.first; } - iterator insert_unique(const_iterator pos, BOOST_MOVE_MACRO_RV_REF(value_type) mval) + iterator insert_unique(const_iterator pos, BOOST_RV_REF(value_type) mval) { insert_commit_data data; std::pair ret = priv_insert_unique_prepare(pos, mval, data); if(ret.second){ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(mval)); + ret.first = priv_insert_commit(data, boost::move(mval)); } return ret.first; } @@ -323,15 +344,15 @@ class flat_tree iterator insert_equal(const_iterator pos, const value_type& val) { insert_commit_data data; - priv_insert_equal_prepare(pos, val, data); + this->priv_insert_equal_prepare(pos, val, data); return priv_insert_commit(data, val); } - iterator insert_equal(const_iterator pos, BOOST_MOVE_MACRO_RV_REF(value_type) mval) + iterator insert_equal(const_iterator pos, BOOST_RV_REF(value_type) mval) { insert_commit_data data; - priv_insert_equal_prepare(pos, mval, data); - return priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(mval)); + this->priv_insert_equal_prepare(pos, mval, data); + return priv_insert_commit(data, boost::move(mval)); } template @@ -344,34 +365,58 @@ class flat_tree template void insert_equal(InIt first, InIt last) { - typedef typename + typedef typename std::iterator_traits::iterator_category ItCat; - priv_insert_equal(first, last, ItCat()); + this->priv_insert_equal(first, last, ItCat()); } - #ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + template + void insert_equal(ordered_range_t, InIt first, InIt last) + { + typedef typename + std::iterator_traits::iterator_category ItCat; + this->priv_insert_equal(ordered_range_t(), first, last, ItCat()); + } + + template + void insert_unique(ordered_unique_range_t, InIt first, InIt last) + { + typedef typename + std::iterator_traits::iterator_category ItCat; + this->priv_insert_unique(ordered_unique_range_t(), first, last, ItCat()); + } + + #ifdef BOOST_CONTAINER_PERFECT_FORWARDING template - iterator emplace_unique(Args&&... args) + std::pair emplace_unique(Args&&... args) { - value_type && val = value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + aligned_storage::value> v; + value_type &val = *static_cast(static_cast(&v)); + stored_allocator_type &a = this->get_stored_allocator(); + stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); + value_destructor d(a, val); insert_commit_data data; std::pair ret = priv_insert_unique_prepare(val, data); if(ret.second){ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); + ret.first = priv_insert_commit(data, boost::move(val)); } - return ret.first; + return ret; } template iterator emplace_hint_unique(const_iterator hint, Args&&... args) { - value_type && val = value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + aligned_storage::value> v; + value_type &val = *static_cast(static_cast(&v)); + stored_allocator_type &a = this->get_stored_allocator(); + stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); + value_destructor d(a, val); insert_commit_data data; std::pair ret = priv_insert_unique_prepare(hint, val, data); if(ret.second){ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); + ret.first = priv_insert_commit(data, boost::move(val)); } return ret.first; } @@ -379,115 +424,104 @@ class flat_tree template iterator emplace_equal(Args&&... args) { - value_type &&val = value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + aligned_storage::value> v; + value_type &val = *static_cast(static_cast(&v)); + stored_allocator_type &a = this->get_stored_allocator(); + stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); + value_destructor d(a, val); iterator i = this->upper_bound(KeyOfValue()(val)); - i = this->m_data.m_vect.insert(i, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); + i = this->m_data.m_vect.insert(i, boost::move(val)); return i; } template iterator emplace_hint_equal(const_iterator hint, Args&&... args) { - value_type &&val = value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + aligned_storage::value> v; + value_type &val = *static_cast(static_cast(&v)); + stored_allocator_type &a = this->get_stored_allocator(); + stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); + value_destructor d(a, val); insert_commit_data data; - priv_insert_equal_prepare(hint, val, data); - return priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); - } - - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - iterator emplace_unique() - { - containers_detail::value_init vval; - value_type &val = vval.m_t; - insert_commit_data data; - std::pair ret = - priv_insert_unique_prepare(val, data); - if(ret.second){ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); - } - return ret.first; - } - - iterator emplace_hint_unique(const_iterator hint) - { - containers_detail::value_init vval; - value_type &val = vval.m_t; - insert_commit_data data; - std::pair ret = priv_insert_unique_prepare(hint, val, data); - if(ret.second){ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); - } - return ret.first; - } - - iterator emplace_equal() - { - containers_detail::value_init vval; - value_type &val = vval.m_t; - iterator i = this->upper_bound(KeyOfValue()(val)); - i = this->m_data.m_vect.insert(i, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); + this->priv_insert_equal_prepare(hint, val, data); + iterator i = priv_insert_commit(data, boost::move(val)); return i; } - iterator emplace_hint_equal(const_iterator hint) - { - containers_detail::value_init vval; - value_type &val = vval.m_t; - insert_commit_data data; - priv_insert_equal_prepare(hint, val, data); - return priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); - } + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair \ + emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - value_type val(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + aligned_storage::value> v; \ + value_type &val = *static_cast(static_cast(&v)); \ + stored_allocator_type &a = this->get_stored_allocator(); \ + stored_allocator_traits::construct(a, &val \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + value_destructor d(a, val); \ insert_commit_data data; \ std::pair ret = priv_insert_unique_prepare(val, data); \ if(ret.second){ \ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); \ + ret.first = priv_insert_commit(data, boost::move(val)); \ } \ - return ret.first; \ + return ret; \ } \ \ - template \ - iterator emplace_hint_unique(const_iterator hint, \ - BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint_unique(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - value_type val(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + aligned_storage::value> v; \ + value_type &val = *static_cast(static_cast(&v)); \ + stored_allocator_type &a = this->get_stored_allocator(); \ + stored_allocator_traits::construct(a, &val \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + value_destructor d(a, val); \ insert_commit_data data; \ std::pair ret = priv_insert_unique_prepare(hint, val, data); \ if(ret.second){ \ - ret.first = priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); \ + ret.first = priv_insert_commit(data, boost::move(val)); \ } \ return ret.first; \ } \ \ - template \ - iterator emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - value_type val(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + aligned_storage::value> v; \ + value_type &val = *static_cast(static_cast(&v)); \ + stored_allocator_type &a = this->get_stored_allocator(); \ + stored_allocator_traits::construct(a, &val \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + value_destructor d(a, val); \ iterator i = this->upper_bound(KeyOfValue()(val)); \ - i = this->m_data.m_vect.insert(i, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); \ + i = this->m_data.m_vect.insert(i, boost::move(val)); \ return i; \ } \ \ - template \ - iterator emplace_hint_equal(const_iterator hint, \ - BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint_equal(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - value_type val(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + aligned_storage::value> v; \ + value_type &val = *static_cast(static_cast(&v)); \ + stored_allocator_type &a = this->get_stored_allocator(); \ + stored_allocator_traits::construct(a, &val \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + value_destructor d(a, val); \ insert_commit_data data; \ - priv_insert_equal_prepare(hint, val, data); \ - return priv_insert_commit(data, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); \ + this->priv_insert_equal_prepare(hint, val, data); \ + iterator i = priv_insert_commit(data, boost::move(val)); \ + return i; \ } \ + //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING iterator erase(const_iterator position) { return this->m_data.m_vect.erase(position); } @@ -523,8 +557,8 @@ class flat_tree const Compare &key_comp = this->m_data.get_comp(); iterator i = this->lower_bound(k); - if (i != this->end() && key_comp(k, KeyOfValue()(*i))){ - i = this->end(); + if (i != this->end() && key_comp(k, KeyOfValue()(*i))){ + i = this->end(); } return i; } @@ -534,8 +568,8 @@ class flat_tree const Compare &key_comp = this->m_data.get_comp(); const_iterator i = this->lower_bound(k); - if (i != this->end() && key_comp(k, KeyOfValue()(*i))){ - i = this->end(); + if (i != this->end() && key_comp(k, KeyOfValue()(*i))){ + i = this->end(); } return i; } @@ -565,10 +599,10 @@ class flat_tree std::pair equal_range(const key_type& k) const { return this->priv_equal_range(this->begin(), this->end(), k); } - size_type capacity() const + size_type capacity() const { return this->m_data.m_vect.capacity(); } - void reserve(size_type count) + void reserve(size_type count) { this->m_data.m_vect.reserve(count); } private: @@ -588,8 +622,6 @@ class flat_tree // insert val before pos // else // insert val before upper_bound(val) - // else if pos+1 == end || val <= *(pos+1) - // insert val after pos // else // insert val before lower_bound(val) const value_compare &value_comp = this->m_data; @@ -599,16 +631,12 @@ class flat_tree data.position = pos; } else{ - data.position = + data.position = this->priv_upper_bound(this->cbegin(), pos, KeyOfValue()(val)); } } - //Works, but increases code complexity - //else if (++pos == this->end() || !value_comp(*pos, val)){ - // return this->m_data.m_vect.insert(pos, val); - //} else{ - data.position = + data.position = this->priv_lower_bound(pos, this->cend(), KeyOfValue()(val)); } } @@ -677,11 +705,11 @@ class flat_tree template iterator priv_insert_commit - (insert_commit_data &commit_data, BOOST_MOVE_MACRO_FWD_REF(Convertible) convertible) + (insert_commit_data &commit_data, BOOST_FWD_REF(Convertible) convertible) { return this->m_data.m_vect.insert ( commit_data.position - , BOOST_CONTAINER_MOVE_NAMESPACE::forward(convertible)); + , boost::forward(convertible)); } template @@ -728,7 +756,7 @@ class flat_tree } else{ first = ++middle; - len = len - half - 1; + len = len - half - 1; } } return first; @@ -766,110 +794,176 @@ class flat_tree return std::pair(first, first); } - template - void priv_insert_equal(FwdIt first, FwdIt last, std::forward_iterator_tag) + template + void priv_insert_equal(ordered_range_t, BidirIt first, BidirIt last, std::bidirectional_iterator_tag) { size_type len = static_cast(std::distance(first, last)); + const size_type BurstSize = 16; + size_type positions[BurstSize]; + + //Prereserve all memory so that iterators are not invalidated + this->reserve(this->size()+len); + const const_iterator beg(this->cbegin()); + const_iterator pos(beg); + //Loop in burst sizes + while(len){ + const size_type burst = len < BurstSize ? len : BurstSize; + const const_iterator cend(this->cend()); + len -= burst; + for(size_type i = 0; i != burst; ++i){ + //Get the insertion position for each key + pos = const_cast(*this).priv_upper_bound(pos, cend, KeyOfValue()(*first)); + positions[i] = static_cast(pos - beg); + ++first; + } + //Insert all in a single step in the precalculated positions + this->m_data.m_vect.insert_ordered_at(burst, positions + burst, first); + //Next search position updated + pos += burst; + } + } + + template + void priv_insert_unique(ordered_unique_range_t, BidirIt first, BidirIt last, std::bidirectional_iterator_tag) + { + size_type len = static_cast(std::distance(first, last)); + const size_type BurstSize = 16; + size_type positions[BurstSize]; + size_type skips[BurstSize]; + + //Prereserve all memory so that iterators are not invalidated + this->reserve(this->size()+len); + const const_iterator beg(this->cbegin()); + const_iterator pos(beg); + const value_compare &value_comp = this->m_data; + //Loop in burst sizes + while(len){ + skips[0u] = 0u; + const size_type burst = len < BurstSize ? len : BurstSize; + size_type unique_burst = 0u; + const const_iterator cend(this->cend()); + while(unique_burst < burst && len > 0){ + //Get the insertion position for each key + const value_type & val = *first++; + --len; + pos = const_cast(*this).priv_lower_bound(pos, cend, KeyOfValue()(val)); + //Check if already present + if(pos != cend && !value_comp(*pos, val)){ + ++skips[unique_burst]; + continue; + } + + //If not present, calculate position + positions[unique_burst] = static_cast(pos - beg); + if(++unique_burst < burst) + skips[unique_burst] = 0u; + } + //Insert all in a single step in the precalculated positions + this->m_data.m_vect.insert_ordered_at(unique_burst, positions + unique_burst, skips + unique_burst, first); + //Next search position updated + pos += unique_burst; + } + } +/* + template + void priv_insert_equal_forward(ordered_range_t, FwdIt first, FwdIt last, std::forward_iterator_tag) + { this->priv_insert_equal(first, last, std::forward_iterator_tag()); } +*/ + template + void priv_insert_equal(ordered_range_t, InIt first, InIt last, std::input_iterator_tag) + { this->priv_insert_equal(first, last, std::input_iterator_tag()); } + + template + void priv_insert_unique(ordered_unique_range_t, InIt first, InIt last, std::input_iterator_tag) + { this->priv_insert_unique(first, last, std::input_iterator_tag()); } +/* + template + void priv_insert_equal_forward(FwdIt first, FwdIt last, std::forward_iterator_tag) + { + const size_type len = static_cast(std::distance(first, last)); this->reserve(this->size()+len); this->priv_insert_equal(first, last, std::input_iterator_tag()); } - +*/ template void priv_insert_equal(InIt first, InIt last, std::input_iterator_tag) { for ( ; first != last; ++first) this->insert_equal(*first); } - -/* - template - void priv_insert_unique(FwdIt first, FwdIt last, std::forward_iterator_tag) - { - size_type len = static_cast(std::distance(first, last)); - this->reserve(this->size()+len); - priv_insert_unique(first, last, std::input_iterator_tag()); - } - - template - void priv_insert_unique(InIt first, InIt last, std::input_iterator_tag) - { - for ( ; first != last; ++first) - this->insert_unique(*first); - } -*/ }; -template -inline bool -operator==(const flat_tree& x, - const flat_tree& y) +template +inline bool +operator==(const flat_tree& x, + const flat_tree& y) { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); } -template -inline bool -operator<(const flat_tree& x, - const flat_tree& y) +template +inline bool +operator<(const flat_tree& x, + const flat_tree& y) { - return std::lexicographical_compare(x.begin(), x.end(), + return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } -template -inline bool -operator!=(const flat_tree& x, - const flat_tree& y) +template +inline bool +operator!=(const flat_tree& x, + const flat_tree& y) { return !(x == y); } -template -inline bool -operator>(const flat_tree& x, - const flat_tree& y) +template +inline bool +operator>(const flat_tree& x, + const flat_tree& y) { return y < x; } -template -inline bool -operator<=(const flat_tree& x, - const flat_tree& y) +template +inline bool +operator<=(const flat_tree& x, + const flat_tree& y) { return !(y < x); } -template -inline bool -operator>=(const flat_tree& x, - const flat_tree& y) +template +inline bool +operator>=(const flat_tree& x, + const flat_tree& y) { return !(x < y); } -template -inline void -swap(flat_tree& x, - flat_tree& y) +template +inline void +swap(flat_tree& x, + flat_tree& y) { x.swap(y); } -} //namespace containers_detail { +} //namespace container_detail { } //namespace container { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +struct has_trivial_destructor_after_move > { static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif // BOOST_CONTAINERS_FLAT_TREE_HPP +#endif // BOOST_CONTAINER_FLAT_TREE_HPP diff --git a/3party/boost/boost/container/detail/function_detector.hpp b/3party/boost/boost/container/detail/function_detector.hpp new file mode 100644 index 0000000000..5a5f6fd77d --- /dev/null +++ b/3party/boost/boost/container/detail/function_detector.hpp @@ -0,0 +1,88 @@ +///////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2009-2012. +// +// 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) +// +// See http://www.boost.org/libs/container for documentation. +// +///////////////////////////////////////////////////////////////////////////// +// This code was modified from the code posted by Alexandre Courpron in his +// article "Interface Detection" in The Code Project: +// http://www.codeproject.com/KB/architecture/Detector.aspx +/////////////////////////////////////////////////////////////////////////////// +// Copyright 2007 Alexandre Courpron +// +// Permission to use, copy, modify, redistribute and sell this software, +// provided that this copyright notice appears on all copies of the software. +/////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DETAIL_FUNCTION_DETECTOR_HPP +#define BOOST_CONTAINER_DETAIL_FUNCTION_DETECTOR_HPP + +#include + +namespace boost { +namespace container { +namespace function_detector { + + typedef char NotFoundType; + struct StaticFunctionType { NotFoundType x [2]; }; + struct NonStaticFunctionType { NotFoundType x [3]; }; + + enum + { NotFound = 0, + StaticFunction = sizeof( StaticFunctionType ) - sizeof( NotFoundType ), + NonStaticFunction = sizeof( NonStaticFunctionType ) - sizeof( NotFoundType ) + }; + +} //namespace boost { +} //namespace container { +} //namespace function_detector { + +#define BOOST_CONTAINER_CREATE_FUNCTION_DETECTOR(Identifier, InstantiationKey) \ + namespace boost { \ + namespace container { \ + namespace function_detector { \ + template < class T, \ + class NonStaticType, \ + class NonStaticConstType, \ + class StaticType > \ + class DetectMember_##InstantiationKey_##Identifier { \ + template < NonStaticType > \ + struct TestNonStaticNonConst ; \ + \ + template < NonStaticConstType > \ + struct TestNonStaticConst ; \ + \ + template < StaticType > \ + struct TestStatic ; \ + \ + template \ + static NonStaticFunctionType Test( TestNonStaticNonConst<&U::Identifier>*, int ); \ + \ + template \ + static NonStaticFunctionType Test( TestNonStaticConst<&U::Identifier>*, int ); \ + \ + template \ + static StaticFunctionType Test( TestStatic<&U::Identifier>*, int ); \ + \ + template \ + static NotFoundType Test( ... ); \ + public : \ + static const int check = NotFound + (sizeof(Test(0, 0)) - sizeof(NotFoundType));\ + };\ +}}} //namespace boost::container::function_detector { + +#define BOOST_CONTAINER_DETECT_FUNCTION(Class, InstantiationKey, ReturnType, Identifier, Params) \ + ::boost::container::function_detector::DetectMember_##InstantiationKey_##Identifier< Class,\ + ReturnType (Class::*)Params,\ + ReturnType (Class::*)Params const,\ + ReturnType (*)Params \ + >::check + +#include + +#endif //@ifndef BOOST_CONTAINER_DETAIL_FUNCTION_DETECTOR_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/iterators.hpp b/3party/boost/boost/container/detail/iterators.hpp similarity index 77% rename from 3party/boost/boost/interprocess/containers/container/detail/iterators.hpp rename to 3party/boost/boost/container/detail/iterators.hpp index bfc4e1d042..374b55c836 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/iterators.hpp +++ b/3party/boost/boost/container/detail/iterators.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2012. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. @@ -11,28 +11,29 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_ITERATORS_HPP -#define BOOST_CONTAINERS_DETAIL_ITERATORS_HPP +#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP +#define BOOST_CONTAINER_DETAIL_ITERATORS_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP +#include +#include +#include -#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING -#include INCLUDE_BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_STORED_REF_HPP +#ifdef BOOST_CONTAINER_PERFECT_FORWARDING +#include +#include #else -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP +#include #endif #include namespace boost { -namespace container { +namespace container { template class constant_iterator @@ -49,9 +50,9 @@ class constant_iterator constant_iterator() : m_ptr(0), m_num(0){} - constant_iterator& operator++() + constant_iterator& operator++() { increment(); return *this; } - + constant_iterator operator++(int) { constant_iterator result (*this); @@ -59,9 +60,9 @@ class constant_iterator return result; } - constant_iterator& operator--() + constant_iterator& operator--() { decrement(); return *this; } - + constant_iterator operator--(int) { constant_iterator result (*this); @@ -160,9 +161,9 @@ class default_construct_iterator default_construct_iterator() : m_num(0){} - default_construct_iterator& operator++() + default_construct_iterator& operator++() { increment(); return *this; } - + default_construct_iterator operator++(int) { default_construct_iterator result (*this); @@ -170,9 +171,9 @@ class default_construct_iterator return result; } - default_construct_iterator& operator--() + default_construct_iterator& operator--() { decrement(); return *this; } - + default_construct_iterator operator--(int) { default_construct_iterator result (*this); @@ -246,7 +247,7 @@ class default_construct_iterator { return other.m_num < m_num; } const T & dereference() const - { + { static T dummy; return dummy; } @@ -272,9 +273,9 @@ class repeat_iterator repeat_iterator() : m_ptr(0), m_num(0){} - this_type& operator++() + this_type& operator++() { increment(); return *this; } - + this_type operator++(int) { this_type result (*this); @@ -282,9 +283,9 @@ class repeat_iterator return result; } - this_type& operator--() + this_type& operator--() { increment(); return *this; } - + this_type operator--(int) { this_type result (*this); @@ -368,23 +369,24 @@ class repeat_iterator { return m_num - other.m_num; } }; -template +template class emplace_iterator : public std::iterator - + { typedef emplace_iterator this_type; public: - explicit emplace_iterator(E&e) + typedef Difference difference_type; + explicit emplace_iterator(EmplaceFunctor&e) : m_num(1), m_pe(&e){} emplace_iterator() : m_num(0), m_pe(0){} - this_type& operator++() + this_type& operator++() { increment(); return *this; } - + this_type operator++(int) { this_type result (*this); @@ -392,9 +394,9 @@ class emplace_iterator return result; } - this_type& operator--() + this_type& operator--() { decrement(); return *this; } - + this_type operator--(int) { this_type result (*this); @@ -420,44 +422,45 @@ class emplace_iterator friend bool operator>= (const this_type& i, const this_type& i2) { return !(i < i2); } - friend std::ptrdiff_t operator- (const this_type& i, const this_type& i2) + friend difference_type operator- (const this_type& i, const this_type& i2) { return i2.distance_to(i); } //Arithmetic - this_type& operator+=(std::ptrdiff_t off) + this_type& operator+=(difference_type off) { this->advance(off); return *this; } - this_type operator+(std::ptrdiff_t off) const + this_type operator+(difference_type off) const { this_type other(*this); other.advance(off); return other; } - friend this_type operator+(std::ptrdiff_t off, const this_type& right) + friend this_type operator+(difference_type off, const this_type& right) { return right + off; } - this_type& operator-=(std::ptrdiff_t off) + this_type& operator-=(difference_type off) { this->advance(-off); return *this; } - this_type operator-(std::ptrdiff_t off) const + this_type operator-(difference_type off) const { return *this + (-off); } const T& operator*() const { return dereference(); } - const T& operator[](std::ptrdiff_t) const + const T& operator[](difference_type) const { return dereference(); } const T* operator->() const { return &(dereference()); } - void construct_in_place(T* ptr) - { (*m_pe)(ptr); } + template + void construct_in_place(A &a, T* ptr) + { (*m_pe)(a, ptr); } private: - std::ptrdiff_t m_num; - E * m_pe; + difference_type m_num; + EmplaceFunctor * m_pe; void increment() { --m_num; } @@ -472,74 +475,74 @@ class emplace_iterator { return other.m_num < m_num; } const T & dereference() const - { + { static T dummy; return dummy; } - void advance(std::ptrdiff_t n) + void advance(difference_type n) { m_num -= n; } - std::ptrdiff_t distance_to(const this_type &other)const - { return m_num - other.m_num; } + difference_type distance_to(const this_type &other)const + { return difference_type(m_num - other.m_num); } }; -#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING +#ifdef BOOST_CONTAINER_PERFECT_FORWARDING -template +template struct emplace_functor { - typedef typename containers_detail::build_number_seq::type index_tuple_t; + typedef typename container_detail::build_number_seq::type index_tuple_t; emplace_functor(Args&&... args) : args_(args...) {} - void operator()(T *ptr) - { emplace_functor::inplace_impl(ptr, index_tuple_t()); } + template + void operator()(A &a, T *ptr) + { emplace_functor::inplace_impl(a, ptr, index_tuple_t()); } - template - void inplace_impl(T* ptr, const containers_detail::index_tuple&) - { ::new(ptr) T(containers_detail::stored_ref::forward(containers_detail::get(args_))...); } + template + void inplace_impl(A &a, T* ptr, const container_detail::index_tuple&) + { + allocator_traits::construct + (a, ptr, container_detail::stored_ref::forward + (container_detail::get(args_))...); + } - containers_detail::tuple args_; + container_detail::tuple args_; }; -#else - -template -struct emplace_functor -{ - emplace_functor() - {} - void operator()(T *ptr) - { new(ptr) T(); } -}; +#else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING #define BOOST_PP_LOCAL_MACRO(n) \ - template \ + BOOST_PP_EXPR_IF(n, template <) \ + BOOST_PP_ENUM_PARAMS(n, class P) \ + BOOST_PP_EXPR_IF(n, >) \ struct BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \ { \ BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \ - ( BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _) ) \ - : BOOST_PP_ENUM(n, BOOST_CONTAINERS_AUX_PARAM_INIT, _) {} \ + ( BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _) ) \ + BOOST_PP_EXPR_IF(n, :) BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_INIT, _){} \ \ - void operator()(T *ptr) \ + template \ + void operator()(A &a, T *ptr) \ { \ - new(ptr)T (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_MEMBER_FORWARD, _)); \ + allocator_traits::construct \ + (a, ptr BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _) ); \ } \ - BOOST_PP_REPEAT(n, BOOST_CONTAINERS_AUX_PARAM_DEFINE, _) \ + BOOST_PP_REPEAT(n, BOOST_CONTAINER_PP_PARAM_DEFINE, _) \ }; \ //! -#define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) +#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() #endif -} //namespace container { +} //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //#ifndef BOOST_CONTAINERS_DETAIL_ITERATORS_HPP +#endif //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/math_functions.hpp b/3party/boost/boost/container/detail/math_functions.hpp similarity index 90% rename from 3party/boost/boost/interprocess/containers/container/detail/math_functions.hpp rename to 3party/boost/boost/container/detail/math_functions.hpp index fc7a2060e1..fe8386be69 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/math_functions.hpp +++ b/3party/boost/boost/container/detail/math_functions.hpp @@ -1,10 +1,10 @@ ////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Stephen Cleary 2000. -// (C) Copyright Ion Gaztanaga 2007-2009. +// (C) Copyright Ion Gaztanaga 2007-2012. // // Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/container for documentation. @@ -16,12 +16,13 @@ #ifndef BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP #define BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP +#include "config_begin.hpp" #include #include namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { // Greatest common divisor and least common multiple @@ -93,7 +94,7 @@ inline std::size_t floor_log2 (std::size_t x) std::size_t n = x; std::size_t log2 = 0; - + for(std::size_t shift = Bits >> 1; shift; shift >>= 1){ std::size_t tmp = n >> shift; if (tmp) @@ -103,8 +104,10 @@ inline std::size_t floor_log2 (std::size_t x) return log2; } -} // namespace containers_detail +} // namespace container_detail } // namespace container } // namespace boost +#include + #endif diff --git a/3party/boost/boost/container/detail/memory_util.hpp b/3party/boost/boost/container/detail/memory_util.hpp new file mode 100644 index 0000000000..c00172c60c --- /dev/null +++ b/3party/boost/boost/container/detail/memory_util.hpp @@ -0,0 +1,77 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP +#define BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include + + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME allocate +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 2, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME destroy +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 3, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME max_size +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 0, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME select_on_container_copy_construction +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 0, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME construct +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS+1, )) +#include BOOST_PP_ITERATE() + +namespace boost { +namespace container { +namespace container_detail { + + +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(pointer) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_pointer) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_reference) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(void_pointer) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_void_pointer) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(size_type) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_copy_assignment) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_move_assignment) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_swap) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type) + +} //namespace container_detail { +} //namespace container { +} //namespace boost { + +#include + +#endif // ! defined(BOOST_CONTAINER_ALLOCATOR_MEMORY_UTIL_HPP) diff --git a/3party/boost/boost/interprocess/containers/container/detail/mpl.hpp b/3party/boost/boost/container/detail/mpl.hpp similarity index 77% rename from 3party/boost/boost/interprocess/containers/container/detail/mpl.hpp rename to 3party/boost/boost/container/detail/mpl.hpp index b34e92243a..74a1ce0e67 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/mpl.hpp +++ b/3party/boost/boost/container/detail/mpl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -10,8 +10,8 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_CONTAINER_DETAIL_MPL_HPP -#define BOOST_CONTAINERS_CONTAINER_DETAIL_MPL_HPP +#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP +#define BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -20,8 +20,8 @@ #include namespace boost { -namespace container { -namespace containers_detail { +namespace container { +namespace container_detail { template struct integral_constant @@ -34,6 +34,7 @@ template< bool C_ > struct bool_ : integral_constant { static const bool value = C_; + operator bool() const { return bool_::value; } }; typedef bool_ true_; @@ -62,6 +63,9 @@ struct enable_if : public enable_if_c {}; template struct disable_if : public enable_if_c {}; +template +struct disable_if_c : public enable_if_c {}; + template class is_convertible { @@ -105,24 +109,24 @@ struct if_ template -struct select1st -// : public std::unary_function +struct select1st +// : public std::unary_function { template - const typename Pair::first_type& operator()(const OtherPair& x) const + const typename Pair::first_type& operator()(const OtherPair& x) const { return x.first; } - const typename Pair::first_type& operator()(const typename Pair::first_type& x) const + const typename Pair::first_type& operator()(const typename Pair::first_type& x) const { return x; } }; // identity is an extension: it is not part of the standard. template -struct identity -// : public std::unary_function +struct identity +// : public std::unary_function { typedef T type; - const T& operator()(const T& x) const + const T& operator()(const T& x) const { return x; } }; @@ -144,9 +148,13 @@ struct ls_zeros<1> static const std::size_t value = 0; }; -} //namespace containers_detail { -} //namespace container { +template struct unvoid { typedef T type; }; +template <> struct unvoid { struct type { }; }; +template <> struct unvoid { struct type { }; }; + +} //namespace container_detail { +} //namespace container { } //namespace boost { -#endif //#ifndef BOOST_CONTAINERS_CONTAINER_DETAIL_MPL_HPP +#endif //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/multiallocation_chain.hpp b/3party/boost/boost/container/detail/multiallocation_chain.hpp similarity index 68% rename from 3party/boost/boost/interprocess/containers/container/detail/multiallocation_chain.hpp rename to 3party/boost/boost/container/detail/multiallocation_chain.hpp index 30d0cca6b5..c9952535eb 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/multiallocation_chain.hpp +++ b/3party/boost/boost/container/detail/multiallocation_chain.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,21 +8,22 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_MULTIALLOCATION_CHAIN_HPP -#define BOOST_CONTAINERS_DETAIL_MULTIALLOCATION_CHAIN_HPP +#ifndef BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP +#define BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATOR_HPP +#include +#include +#include +#include #include -#include -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP +#include +#include +#include namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { template class basic_multiallocation_chain @@ -32,34 +33,41 @@ class basic_multiallocation_chain ,bi::link_mode > node; + typedef typename boost::intrusive::pointer_traits + ::template rebind_pointer::type char_ptr; + typedef typename boost::intrusive:: + pointer_traits::difference_type difference_type; + typedef bi::slist< node , bi::linear , bi::cache_last + , bi::size_type::type> > slist_impl_t; slist_impl_t slist_impl_; static node & to_node(VoidPointer p) - { return *static_cast(static_cast(containers_detail::get_pointer(p))); } + { return *static_cast(static_cast(container_detail::to_raw_pointer(p))); } - BOOST_MOVE_MACRO_MOVABLE_BUT_NOT_COPYABLE(basic_multiallocation_chain) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_multiallocation_chain) public: typedef VoidPointer void_pointer; typedef typename slist_impl_t::iterator iterator; + typedef typename slist_impl_t::size_type size_type; basic_multiallocation_chain() : slist_impl_() {} - basic_multiallocation_chain(BOOST_MOVE_MACRO_RV_REF(basic_multiallocation_chain) other) + basic_multiallocation_chain(BOOST_RV_REF(basic_multiallocation_chain) other) : slist_impl_() { slist_impl_.swap(other.slist_impl_); } - basic_multiallocation_chain& operator=(BOOST_MOVE_MACRO_RV_REF(basic_multiallocation_chain) other) + basic_multiallocation_chain& operator=(BOOST_RV_REF(basic_multiallocation_chain) other) { - basic_multiallocation_chain tmp(BOOST_CONTAINER_MOVE_NAMESPACE::move(other)); + basic_multiallocation_chain tmp(boost::move(other)); this->swap(tmp); return *this; } @@ -67,7 +75,7 @@ class basic_multiallocation_chain bool empty() const { return slist_impl_.empty(); } - std::size_t size() const + size_type size() const { return slist_impl_.size(); } iterator before_begin() @@ -103,7 +111,7 @@ class basic_multiallocation_chain void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin, iterator before_end) { slist_impl_.splice_after(after_this, x.slist_impl_, before_begin, before_end); } - void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin, iterator before_end, std::size_t n) + void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin, iterator before_end, size_type n) { slist_impl_.splice_after(after_this, x.slist_impl_, before_begin, before_end, n); } void splice_after(iterator after_this, basic_multiallocation_chain &x) @@ -112,7 +120,7 @@ class basic_multiallocation_chain void incorporate_after(iterator after_this, void_pointer begin , iterator before_end) { slist_impl_.incorporate_after(after_this, &to_node(begin), &to_node(before_end)); } - void incorporate_after(iterator after_this, void_pointer begin, void_pointer before_end, std::size_t n) + void incorporate_after(iterator after_this, void_pointer begin, void_pointer before_end, size_type n) { slist_impl_.incorporate_after(after_this, &to_node(begin), &to_node(before_end), n); } void swap(basic_multiallocation_chain &x) @@ -134,7 +142,7 @@ class basic_multiallocation_chain template struct cast_functor { - typedef typename containers_detail::add_reference::type result_type; + typedef typename container_detail::add_reference::type result_type; template result_type operator()(U &ptr) const { return *static_cast(static_cast(&ptr)); } @@ -144,38 +152,39 @@ template class transform_multiallocation_chain { private: - BOOST_MOVE_MACRO_MOVABLE_BUT_NOT_COPYABLE(transform_multiallocation_chain) + BOOST_MOVABLE_BUT_NOT_COPYABLE(transform_multiallocation_chain) MultiallocationChain holder_; typedef typename MultiallocationChain::void_pointer void_pointer; - typedef typename boost::pointer_to_other - ::type pointer; + typedef typename boost::intrusive::pointer_traits + ::template rebind_pointer::type pointer; static pointer cast(void_pointer p) { - return pointer(static_cast(containers_detail::get_pointer(p))); + return pointer(static_cast(container_detail::to_raw_pointer(p))); } public: typedef transform_iterator < typename MultiallocationChain::iterator - , containers_detail::cast_functor > iterator; + , container_detail::cast_functor > iterator; + typedef typename MultiallocationChain::size_type size_type; transform_multiallocation_chain() : holder_() {} - transform_multiallocation_chain(BOOST_MOVE_MACRO_RV_REF(transform_multiallocation_chain) other) + transform_multiallocation_chain(BOOST_RV_REF(transform_multiallocation_chain) other) : holder_() { this->swap(other); } - transform_multiallocation_chain(BOOST_MOVE_MACRO_RV_REF(MultiallocationChain) other) - : holder_(BOOST_CONTAINER_MOVE_NAMESPACE::move(other)) + transform_multiallocation_chain(BOOST_RV_REF(MultiallocationChain) other) + : holder_(boost::move(other)) {} - transform_multiallocation_chain& operator=(BOOST_MOVE_MACRO_RV_REF(transform_multiallocation_chain) other) + transform_multiallocation_chain& operator=(BOOST_RV_REF(transform_multiallocation_chain) other) { - transform_multiallocation_chain tmp(BOOST_CONTAINER_MOVE_NAMESPACE::move(other)); + transform_multiallocation_chain tmp(boost::move(other)); this->swap(tmp); return *this; } @@ -186,10 +195,10 @@ class transform_multiallocation_chain void swap(transform_multiallocation_chain &other_chain) { holder_.swap(other_chain.holder_); } - void splice_after(iterator after_this, transform_multiallocation_chain &x, iterator before_begin, iterator before_end, std::size_t n) + void splice_after(iterator after_this, transform_multiallocation_chain &x, iterator before_begin, iterator before_end, size_type n) { holder_.splice_after(after_this.base(), x.holder_, before_begin.base(), before_end.base(), n); } - void incorporate_after(iterator after_this, void_pointer begin, void_pointer before_end, std::size_t n) + void incorporate_after(iterator after_this, void_pointer begin, void_pointer before_end, size_type n) { holder_.incorporate_after(after_this.base(), begin, before_end, n); } void pop_front() @@ -213,7 +222,7 @@ class transform_multiallocation_chain iterator last() { return iterator(holder_.last()); } - std::size_t size() const + size_type size() const { return holder_.size(); } void clear() @@ -230,16 +239,16 @@ class transform_multiallocation_chain MultiallocationChain extract_multiallocation_chain() { - return MultiallocationChain(BOOST_CONTAINER_MOVE_NAMESPACE::move(holder_)); + return MultiallocationChain(boost::move(holder_)); } }; }}} -// namespace containers_detail { +// namespace container_detail { // namespace container { // namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //BOOST_CONTAINERS_DETAIL_MULTIALLOCATION_CHAIN_HPP +#endif //BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP diff --git a/3party/boost/boost/container/detail/node_alloc_holder.hpp b/3party/boost/boost/container/detail/node_alloc_holder.hpp new file mode 100644 index 0000000000..9797f1fbd5 --- /dev/null +++ b/3party/boost/boost/container/detail/node_alloc_holder.hpp @@ -0,0 +1,471 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DETAIL_NODE_ALLOC_HPP_ +#define BOOST_CONTAINER_DETAIL_NODE_ALLOC_HPP_ + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include "config_begin.hpp" +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifndef BOOST_CONTAINER_PERFECT_FORWARDING +#include +#endif + +#include +#include + + +namespace boost { +namespace container { +namespace container_detail { + +//!A deleter for scoped_ptr that deallocates the memory +//!allocated for an object using a STL allocator. +template +struct scoped_deallocator +{ + typedef allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::pointer pointer; + typedef container_detail::integral_constant::value> alloc_version; + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + + private: + void priv_deallocate(allocator_v1) + { m_alloc.deallocate(m_ptr, 1); } + + void priv_deallocate(allocator_v2) + { m_alloc.deallocate_one(m_ptr); } + + BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator) + + public: + + pointer m_ptr; + A& m_alloc; + + scoped_deallocator(pointer p, A& a) + : m_ptr(p), m_alloc(a) + {} + + ~scoped_deallocator() + { if (m_ptr)priv_deallocate(alloc_version()); } + + scoped_deallocator(BOOST_RV_REF(scoped_deallocator) o) + : m_ptr(o.m_ptr), m_alloc(o.m_alloc) + { o.release(); } + + pointer get() const + { return m_ptr; } + + void release() + { m_ptr = 0; } +}; + +template +class allocator_destroyer_and_chain_builder +{ + typedef allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::value_type value_type; + typedef typename A::multiallocation_chain multiallocation_chain; + + A & a_; + multiallocation_chain &c_; + + public: + allocator_destroyer_and_chain_builder(A &a, multiallocation_chain &c) + : a_(a), c_(c) + {} + + void operator()(const typename A::pointer &p) + { + allocator_traits::destroy(a_, container_detail::to_raw_pointer(p)); + c_.push_front(p); + } +}; + +template +class allocator_multialloc_chain_node_deallocator +{ + typedef allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::value_type value_type; + typedef typename A::multiallocation_chain multiallocation_chain; + typedef allocator_destroyer_and_chain_builder chain_builder; + + A & a_; + multiallocation_chain c_; + + public: + allocator_multialloc_chain_node_deallocator(A &a) + : a_(a), c_() + {} + + chain_builder get_chain_builder() + { return chain_builder(a_, c_); } + + ~allocator_multialloc_chain_node_deallocator() + { + if(!c_.empty()) + a_.deallocate_individual(boost::move(c_)); + } +}; + +template +struct node_compare + : private ValueCompare +{ + typedef typename ValueCompare::key_type key_type; + typedef typename ValueCompare::value_type value_type; + typedef typename ValueCompare::key_of_value key_of_value; + + node_compare(const ValueCompare &pred) + : ValueCompare(pred) + {} + + ValueCompare &value_comp() + { return static_cast(*this); } + + ValueCompare &value_comp() const + { return static_cast(*this); } + + bool operator()(const Node &a, const Node &b) const + { return ValueCompare::operator()(a.get_data(), b.get_data()); } +}; + +template +struct node_alloc_holder +{ + typedef allocator_traits allocator_traits_type; + typedef node_alloc_holder self_t; + typedef typename allocator_traits_type::value_type value_type; + typedef typename ICont::value_type Node; + typedef typename allocator_traits_type::template + portable_rebind_alloc::type NodeAlloc; + typedef allocator_traits node_allocator_traits_type; + typedef A ValAlloc; + typedef typename node_allocator_traits_type::pointer NodePtr; + typedef container_detail::scoped_deallocator Deallocator; + typedef typename node_allocator_traits_type::size_type size_type; + typedef typename node_allocator_traits_type::difference_type difference_type; + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + typedef container_detail::integral_constant::value> alloc_version; + typedef typename ICont::iterator icont_iterator; + typedef typename ICont::const_iterator icont_citerator; + typedef allocator_destroyer Destroyer; + typedef allocator_traits NodeAllocTraits; + + private: + BOOST_COPYABLE_AND_MOVABLE(node_alloc_holder) + + public: + + //Constructors for sequence containers + node_alloc_holder() + : members_() + {} + + explicit node_alloc_holder(const ValAlloc &a) + : members_(a) + {} + + explicit node_alloc_holder(const node_alloc_holder &x) + : members_(NodeAllocTraits::select_on_container_copy_construction(x.node_alloc())) + {} + + explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x) + : members_(boost::move(x.node_alloc())) + { this->icont().swap(x.icont()); } + + //Constructors for associative containers + explicit node_alloc_holder(const ValAlloc &a, const Pred &c) + : members_(a, c) + {} + + explicit node_alloc_holder(const node_alloc_holder &x, const Pred &c) + : members_(NodeAllocTraits::select_on_container_copy_construction(x.node_alloc()), c) + {} + + explicit node_alloc_holder(const Pred &c) + : members_(c) + {} + + //helpers for move assignments + explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x, const Pred &c) + : members_(boost::move(x.node_alloc()), c) + { this->icont().swap(x.icont()); } + + void copy_assign_alloc(const node_alloc_holder &x) + { + container_detail::bool_ flag; + container_detail::assign_alloc( static_cast(this->members_) + , static_cast(x.members_), flag); + } + + void move_assign_alloc( node_alloc_holder &x) + { + container_detail::bool_ flag; + container_detail::move_alloc( static_cast(this->members_) + , static_cast(x.members_), flag); + } + + ~node_alloc_holder() + { this->clear(alloc_version()); } + + size_type max_size() const + { return allocator_traits_type::max_size(this->node_alloc()); } + + NodePtr allocate_one() + { return this->allocate_one(alloc_version()); } + + NodePtr allocate_one(allocator_v1) + { return this->node_alloc().allocate(1); } + + NodePtr allocate_one(allocator_v2) + { return this->node_alloc().allocate_one(); } + + void deallocate_one(const NodePtr &p) + { return this->deallocate_one(p, alloc_version()); } + + void deallocate_one(const NodePtr &p, allocator_v1) + { this->node_alloc().deallocate(p, 1); } + + void deallocate_one(const NodePtr &p, allocator_v2) + { this->node_alloc().deallocate_one(p); } + + #ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + template + NodePtr create_node(Args &&...args) + { + NodePtr p = this->allocate_one(); + Deallocator node_deallocator(p, this->node_alloc()); + allocator_traits::construct + ( this->node_alloc() + , container_detail::addressof(p->m_data), boost::forward(args)...); + node_deallocator.release(); + //This does not throw + typedef typename Node::hook_type hook_type; + ::new(static_cast(container_detail::to_raw_pointer(p))) hook_type; + return (p); + } + + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + #define BOOST_PP_LOCAL_MACRO(n) \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + NodePtr create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + NodePtr p = this->allocate_one(); \ + Deallocator node_deallocator(p, this->node_alloc()); \ + allocator_traits::construct \ + (this->node_alloc(), container_detail::addressof(p->m_data) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + node_deallocator.release(); \ + typedef typename Node::hook_type hook_type; \ + ::new(static_cast(container_detail::to_raw_pointer(p))) hook_type; \ + return (p); \ + } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + template + NodePtr create_node_from_it(const It &it) + { + NodePtr p = this->allocate_one(); + Deallocator node_deallocator(p, this->node_alloc()); + ::boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->m_data), it); + node_deallocator.release(); + //This does not throw + typedef typename Node::hook_type hook_type; + ::new(static_cast(container_detail::to_raw_pointer(p))) hook_type; + return (p); + } + + void destroy_node(const NodePtr &nodep) + { + allocator_traits::destroy(this->node_alloc(), container_detail::to_raw_pointer(nodep)); + this->deallocate_one(nodep); + } + + void swap(node_alloc_holder &x) + { + this->icont().swap(x.icont()); + container_detail::bool_ flag; + container_detail::swap_alloc(this->node_alloc(), x.node_alloc(), flag); + } + + template + FwdIterator allocate_many_and_construct + (FwdIterator beg, difference_type n, Inserter inserter) + { + if(n){ + typedef typename NodeAlloc::multiallocation_chain multiallocation_chain; + + //Try to allocate memory in a single block + multiallocation_chain mem(this->node_alloc().allocate_individual(n)); + int constructed = 0; + Node *p = 0; + BOOST_TRY{ + for(difference_type i = 0; i < n; ++i, ++beg, --constructed){ + p = container_detail::to_raw_pointer(mem.front()); + mem.pop_front(); + //This can throw + constructed = 0; + boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->m_data), beg); + ++constructed; + //This does not throw + typedef typename Node::hook_type hook_type; + ::new(static_cast(container_detail::to_raw_pointer(p))) hook_type; + //This can throw in some containers (predicate might throw) + inserter(*p); + } + } + BOOST_CATCH(...){ + if(constructed){ + allocator_traits::destroy(this->node_alloc(), container_detail::to_raw_pointer(p)); + } + this->node_alloc().deallocate_individual(boost::move(mem)); + BOOST_RETHROW + } + BOOST_CATCH_END + } + return beg; + } + + void clear(allocator_v1) + { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); } + + void clear(allocator_v2) + { + typename NodeAlloc::multiallocation_chain chain; + allocator_destroyer_and_chain_builder builder(this->node_alloc(), chain); + this->icont().clear_and_dispose(builder); + //BOOST_STATIC_ASSERT((::boost::has_move_emulation_enabled::value == true)); + if(!chain.empty()) + this->node_alloc().deallocate_individual(boost::move(chain)); + } + + icont_iterator erase_range(const icont_iterator &first, const icont_iterator &last, allocator_v1) + { return this->icont().erase_and_dispose(first, last, Destroyer(this->node_alloc())); } + + icont_iterator erase_range(const icont_iterator &first, const icont_iterator &last, allocator_v2) + { + allocator_multialloc_chain_node_deallocator chain_holder(this->node_alloc()); + return this->icont().erase_and_dispose(first, last, chain_holder.get_chain_builder()); + } + + template + size_type erase_key(const Key& k, const Comparator &comp, allocator_v1) + { return this->icont().erase_and_dispose(k, comp, Destroyer(this->node_alloc())); } + + template + size_type erase_key(const Key& k, const Comparator &comp, allocator_v2) + { + allocator_multialloc_chain_node_deallocator chain_holder(this->node_alloc()); + return this->icont().erase_and_dispose(k, comp, chain_holder.get_chain_builder()); + } + + protected: + struct cloner + { + cloner(node_alloc_holder &holder) + : m_holder(holder) + {} + + NodePtr operator()(const Node &other) const + { return m_holder.create_node(other.get_data()); } + + node_alloc_holder &m_holder; + }; + + struct members_holder + : public NodeAlloc + { + private: + members_holder(const members_holder&); + members_holder & operator=(const members_holder&); + + public: + members_holder() + : NodeAlloc(), m_icont() + {} + + template + explicit members_holder(BOOST_FWD_REF(ConvertibleToAlloc) c2alloc) + : NodeAlloc(boost::forward(c2alloc)) + , m_icont() + {} + + template + members_holder(BOOST_FWD_REF(ConvertibleToAlloc) c2alloc, const Pred &c) + : NodeAlloc(boost::forward(c2alloc)) + , m_icont(typename ICont::value_compare(c)) + {} + + explicit members_holder(const Pred &c) + : NodeAlloc() + , m_icont(typename ICont::value_compare(c)) + {} + + //The intrusive container + ICont m_icont; + }; + + ICont &non_const_icont() const + { return const_cast(this->members_.m_icont); } + + ICont &icont() + { return this->members_.m_icont; } + + const ICont &icont() const + { return this->members_.m_icont; } + + NodeAlloc &node_alloc() + { return static_cast(this->members_); } + + const NodeAlloc &node_alloc() const + { return static_cast(this->members_); } + + members_holder members_; +}; + +} //namespace container_detail { +} //namespace container { +} //namespace boost { + +#include + +#endif // BOOST_CONTAINER_DETAIL_NODE_ALLOC_HPP_ diff --git a/3party/boost/boost/interprocess/containers/container/detail/node_pool_impl.hpp b/3party/boost/boost/container/detail/node_pool_impl.hpp similarity index 82% rename from 3party/boost/boost/interprocess/containers/container/detail/node_pool_impl.hpp rename to 3party/boost/boost/container/detail/node_pool_impl.hpp index 90f629636d..63c1278238 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/node_pool_impl.hpp +++ b/3party/boost/boost/container/detail/node_pool_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -16,23 +16,23 @@ #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include +#include +#include +#include +#include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_POOL_COMMON_HPP +#include +#include +#include +#include #include #include #include //std::unary_function namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { template class private_node_pool_impl @@ -49,6 +49,7 @@ class private_node_pool_impl typedef typename node_slist::node_t node_t; typedef typename node_slist::node_slist_t free_nodes_t; typedef typename SegmentManagerBase::multiallocation_chain multiallocation_chain; + typedef typename SegmentManagerBase::size_type size_type; private: typedef typename bi::make_slist @@ -61,9 +62,9 @@ class private_node_pool_impl typedef SegmentManagerBase segment_manager_base_type; //!Constructor from a segment manager. Never throws - private_node_pool_impl(segment_manager_base_type *segment_mngr_base, std::size_t node_size, std::size_t nodes_per_block) + private_node_pool_impl(segment_manager_base_type *segment_mngr_base, size_type node_size, size_type nodes_per_block) : m_nodes_per_block(nodes_per_block) - , m_real_node_size(lcm(node_size, std::size_t(alignment_of::value))) + , m_real_node_size(lcm(node_size, size_type(alignment_of::value))) //General purpose allocator , mp_segment_mngr_base(segment_mngr_base) , m_blocklist() @@ -76,25 +77,25 @@ class private_node_pool_impl ~private_node_pool_impl() { this->purge_blocks(); } - std::size_t get_real_num_node() const + size_type get_real_num_node() const { return m_nodes_per_block; } //!Returns the segment manager. Never throws segment_manager_base_type* get_segment_manager_base()const - { return containers_detail::get_pointer(mp_segment_mngr_base); } + { return container_detail::to_raw_pointer(mp_segment_mngr_base); } void *allocate_node() { return priv_alloc_node(); } - + //!Deallocates an array pointed by ptr. Never throws void deallocate_node(void *ptr) { priv_dealloc_node(ptr); } - //!Allocates a singly linked list of n nodes ending in null pointer. - multiallocation_chain allocate_nodes(const std::size_t n) + //!Allocates a singly linked list of n nodes ending in null pointer. + multiallocation_chain allocate_nodes(const size_type n) { //Preallocate all needed blocks to fulfill the request - std::size_t cur_nodes = m_freelist.size(); + size_type cur_nodes = m_freelist.size(); if(cur_nodes < n){ priv_alloc_block(((n - cur_nodes) - 1)/m_nodes_per_block + 1); } @@ -102,7 +103,7 @@ class private_node_pool_impl //We just iterate the needed nodes to get the last we'll erase typedef typename free_nodes_t::iterator free_iterator; free_iterator before_last_new_it = m_freelist.before_begin(); - for(std::size_t j = 0; j != n; ++j){ + for(size_type j = 0; j != n; ++j){ ++before_last_new_it; } @@ -120,7 +121,7 @@ class private_node_pool_impl multiallocation_chain chain; chain.incorporate_after(chain.before_begin(), &*first_node, &*last_node, n); m_allocated += n; - return BOOST_CONTAINER_MOVE_NAMESPACE::move(chain); + return boost::move(chain); } void deallocate_nodes(multiallocation_chain chain) @@ -145,8 +146,8 @@ class private_node_pool_impl nodelist_iterator backup_list_last = backup_list.before_begin(); //Execute the algorithm and get an iterator to the last value - std::size_t blocksize = get_rounded_size - (m_real_node_size*m_nodes_per_block, alignment_of::value); + size_type blocksize = get_rounded_size + (m_real_node_size*m_nodes_per_block, (size_type) alignment_of::value); while(it != itend){ //Collect all the nodes from the block pointed by it @@ -196,7 +197,7 @@ class private_node_pool_impl , backup_list.size()); } - std::size_t num_free_nodes() + size_type num_free_nodes() { return m_freelist.size(); } //!Deallocates all used memory. Precondition: all nodes allocated from this pool should @@ -205,8 +206,8 @@ class private_node_pool_impl { //check for memory leaks BOOST_ASSERT(m_allocated==0); - std::size_t blocksize = get_rounded_size - (m_real_node_size*m_nodes_per_block, alignment_of::value); + size_type blocksize = get_rounded_size + (m_real_node_size*m_nodes_per_block, (size_type)alignment_of::value); typename blockslist_t::iterator it(m_blocklist.begin()), itend(m_blocklist.end()), aux; @@ -237,7 +238,7 @@ class private_node_pool_impl push_in_list(free_nodes_t &l, typename free_nodes_t::iterator &it) : slist_(l), last_it_(it) {} - + void operator()(typename free_nodes_t::pointer p) const { slist_.push_front(*p); @@ -257,10 +258,10 @@ class private_node_pool_impl is_between(const void *addr, std::size_t size) : beg_(static_cast(addr)), end_(beg_+size) {} - + bool operator()(typename free_nodes_t::const_reference v) const { - return (beg_ <= reinterpret_cast(&v) && + return (beg_ <= reinterpret_cast(&v) && end_ > reinterpret_cast(&v)); } private: @@ -294,15 +295,15 @@ class private_node_pool_impl } //!Allocates several blocks of nodes. Can throw - void priv_alloc_block(std::size_t num_blocks = 1) + void priv_alloc_block(size_type num_blocks = 1) { if(!num_blocks) return; - std::size_t blocksize = - get_rounded_size(m_real_node_size*m_nodes_per_block, alignment_of::value); + size_type blocksize = + get_rounded_size(m_real_node_size*m_nodes_per_block, (size_type)alignment_of::value); try{ - for(std::size_t i = 0; i != num_blocks; ++i){ + for(size_type i = 0; i != num_blocks; ++i){ //We allocate a new NodeBlock and put it as first //element in the free Node list char *pNode = reinterpret_cast @@ -310,9 +311,9 @@ class private_node_pool_impl char *pBlock = pNode; m_blocklist.push_front(get_block_hook(pBlock, blocksize)); - //We initialize all Nodes in Node Block to insert + //We initialize all Nodes in Node Block to insert //them in the free Node list - for(std::size_t i = 0; i < m_nodes_per_block; ++i, pNode += m_real_node_size){ + for(size_type i = 0; i < m_nodes_per_block; ++i, pNode += m_real_node_size){ m_freelist.push_front(*new (pNode) node_t); } } @@ -333,34 +334,34 @@ class private_node_pool_impl private: //!Returns a reference to the block hook placed in the end of the block - static node_t & get_block_hook (void *block, std::size_t blocksize) - { - return *reinterpret_cast(reinterpret_cast(block) + blocksize); + static node_t & get_block_hook (void *block, size_type blocksize) + { + return *reinterpret_cast(reinterpret_cast(block) + blocksize); } //!Returns the starting address of the block reference to the block hook placed in the end of the block - void *get_block_from_hook (node_t *hook, std::size_t blocksize) - { + void *get_block_from_hook (node_t *hook, size_type blocksize) + { return (reinterpret_cast(hook) - blocksize); } private: - typedef typename boost::pointer_to_other - ::type segment_mngr_base_ptr_t; + typedef typename boost::intrusive::pointer_traits + ::template rebind_pointer::type segment_mngr_base_ptr_t; - const std::size_t m_nodes_per_block; - const std::size_t m_real_node_size; + const size_type m_nodes_per_block; + const size_type m_real_node_size; segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager blockslist_t m_blocklist; //Intrusive container of blocks free_nodes_t m_freelist; //Intrusive container of free nods - std::size_t m_allocated; //Used nodes for debugging + size_type m_allocated; //Used nodes for debugging }; -} //namespace containers_detail { +} //namespace container_detail { } //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include #endif //#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP diff --git a/3party/boost/boost/container/detail/pair.hpp b/3party/boost/boost/container/detail/pair.hpp new file mode 100644 index 0000000000..2a20ed13ec --- /dev/null +++ b/3party/boost/boost/container/detail/pair.hpp @@ -0,0 +1,353 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. +// +// 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_PAIR_HPP +#define BOOST_CONTAINER_CONTAINER_DETAIL_PAIR_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include "config_begin.hpp" +#include + +#include +#include +#include +#include + +#include //std::pair + +#include +#include + +#ifndef BOOST_CONTAINER_PERFECT_FORWARDING +#include +#endif + +namespace boost { +namespace container { +namespace container_detail { + +template +struct pair; + +template +struct is_pair +{ + static const bool value = false; +}; + +template +struct is_pair< pair > +{ + static const bool value = true; +}; + +template +struct is_pair< std::pair > +{ + static const bool value = true; +}; + +struct pair_nat; + +struct piecewise_construct_t { }; +static const piecewise_construct_t piecewise_construct = piecewise_construct_t(); + +/* +template +struct pair +{ + template pair(pair&& p); + template + pair(piecewise_construct_t, tuple first_args, + tuple second_args); + + template pair& operator=(const pair& p); + pair& operator=(pair&& p) noexcept(is_nothrow_move_assignable::value && + is_nothrow_move_assignable::value); + template pair& operator=(pair&& p); + + void swap(pair& p) noexcept(noexcept(swap(first, p.first)) && + noexcept(swap(second, p.second))); +}; + +template bool operator==(const pair&, const pair&); +template bool operator!=(const pair&, const pair&); +template bool operator< (const pair&, const pair&); +template bool operator> (const pair&, const pair&); +template bool operator>=(const pair&, const pair&); +template bool operator<=(const pair&, const pair&); +*/ + + +template +struct pair +{ + private: + BOOST_COPYABLE_AND_MOVABLE(pair) + + public: + typedef T1 first_type; + typedef T2 second_type; + + T1 first; + T2 second; + + //Default constructor + pair() + : first(), second() + {} + + //pair copy assignment + pair(const pair& x) + : first(x.first), second(x.second) + {} + + //pair move constructor + pair(BOOST_RV_REF(pair) p) + : first(::boost::move(p.first)), second(::boost::move(p.second)) + {} + + template + pair(const pair &p) + : first(p.first), second(p.second) + {} + + template + pair(BOOST_RV_REF_BEG pair BOOST_RV_REF_END p) + : first(::boost::move(p.first)), second(::boost::move(p.second)) + {} + + //pair from two values + pair(const T1 &t1, const T2 &t2) + : first(t1) + , second(t2) + {} + + template + pair(BOOST_FWD_REF(U) u, BOOST_FWD_REF(V) v) + : first(::boost::forward(u)) + , second(::boost::forward(v)) + {} + + //And now compatibility with std::pair + pair(const std::pair& x) + : first(x.first), second(x.second) + {} + + template + pair(const std::pair& p) + : first(p.first), second(p.second) + {} + + pair(BOOST_RV_REF_BEG std::pair BOOST_RV_REF_END p) + : first(::boost::move(p.first)), second(::boost::move(p.second)) + {} + + template + pair(BOOST_RV_REF_BEG std::pair BOOST_RV_REF_END p) + : first(::boost::move(p.first)), second(::boost::move(p.second)) + {} + + //piecewise_construct missing + //template pair(pair&& p); + //template + // pair(piecewise_construct_t, tuple first_args, + // tuple second_args); +/* + //Variadic versions + template + pair(BOOST_CONTAINER_PP_PARAM(U, u), typename container_detail::disable_if + < container_detail::is_pair< typename container_detail::remove_ref_const::type >, pair_nat>::type* = 0) + : first(::boost::forward(u)) + , second() + {} + + #ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + template + pair(U &&u, V &&v) + : first(::boost::forward(u)) + , second(::boost::forward(v), ::boost::forward(args)...) + {} + + #else + + #define BOOST_PP_LOCAL_MACRO(n) \ + template \ + pair(BOOST_CONTAINER_PP_PARAM(U, u) \ + ,BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + : first(::boost::forward(u)) \ + , second(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)) \ + {} \ + //! + #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + #endif +*/ + //pair copy assignment + pair& operator=(BOOST_COPY_ASSIGN_REF(pair) p) + { + first = p.first; + second = p.second; + return *this; + } + + //pair move assignment + pair& operator=(BOOST_RV_REF(pair) p) + { + first = ::boost::move(p.first); + second = ::boost::move(p.second); + return *this; + } + + template + typename ::boost::container::container_detail::enable_if_c + < !(::boost::container::container_detail::is_same::value && + ::boost::container::container_detail::is_same::value) + , pair &>::type + operator=(const pair&p) + { + first = p.first; + second = p.second; + return *this; + } + + template + typename ::boost::container::container_detail::enable_if_c + < !(::boost::container::container_detail::is_same::value && + ::boost::container::container_detail::is_same::value) + , pair &>::type + operator=(BOOST_RV_REF_BEG pair BOOST_RV_REF_END p) + { + first = ::boost::move(p.first); + second = ::boost::move(p.second); + return *this; + } + + //std::pair copy assignment + pair& operator=(const std::pair &p) + { + first = p.first; + second = p.second; + return *this; + } + + template + pair& operator=(const std::pair &p) + { + first = ::boost::move(p.first); + second = ::boost::move(p.second); + return *this; + } + + //std::pair move assignment + pair& operator=(BOOST_RV_REF_BEG std::pair BOOST_RV_REF_END p) + { + first = ::boost::move(p.first); + second = ::boost::move(p.second); + return *this; + } + + template + pair& operator=(BOOST_RV_REF_BEG std::pair BOOST_RV_REF_END p) + { + first = ::boost::move(p.first); + second = ::boost::move(p.second); + return *this; + } + + //swap + void swap(pair& p) + { + using std::swap; + swap(this->first, p.first); + swap(this->second, p.second); + } +}; + +template +inline bool operator==(const pair& x, const pair& y) +{ return static_cast(x.first == y.first && x.second == y.second); } + +template +inline bool operator< (const pair& x, const pair& y) +{ return static_cast(x.first < y.first || + (!(y.first < x.first) && x.second < y.second)); } + +template +inline bool operator!=(const pair& x, const pair& y) +{ return static_cast(!(x == y)); } + +template +inline bool operator> (const pair& x, const pair& y) +{ return y < x; } + +template +inline bool operator>=(const pair& x, const pair& y) +{ return static_cast(!(x < y)); } + +template +inline bool operator<=(const pair& x, const pair& y) +{ return static_cast(!(y < x)); } + +template +inline pair make_pair(T1 x, T2 y) +{ return pair(x, y); } + +template +inline void swap(pair& x, pair& y) +{ + swap(x.first, y.first); + swap(x.second, y.second); +} + +} //namespace container_detail { +} //namespace container { + + +//Without this specialization recursive flat_(multi)map instantiation fails +//because is_enum needs to instantiate the recursive pair, leading to a compilation error). +//This breaks the cycle clearly stating that pair is not an enum avoiding any instantiation. +template +struct is_enum; + +template +struct is_enum< ::boost::container::container_detail::pair > +{ + static const bool value = false; +}; + +//This specialization is needed to avoid instantiation of pair in +//is_class, and allow recursive maps. +template +struct is_class< ::boost::container::container_detail::pair > + : public ::boost::true_type +{}; + +#ifdef BOOST_NO_RVALUE_REFERENCES + +template +struct has_move_emulation_enabled< ::boost::container::container_detail::pair > + : ::boost::true_type +{}; + +#endif + + +} //namespace boost { + +#include + +#endif //#ifndef BOOST_CONTAINER_DETAIL_PAIR_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/pool_common.hpp b/3party/boost/boost/container/detail/pool_common.hpp similarity index 87% rename from 3party/boost/boost/interprocess/containers/container/detail/pool_common.hpp rename to 3party/boost/boost/container/detail/pool_common.hpp index c6241bfa59..500b9124d5 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/pool_common.hpp +++ b/3party/boost/boost/container/detail/pool_common.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -21,7 +21,7 @@ namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { template struct node_slist @@ -43,10 +43,10 @@ struct is_stateless_segment_manager static const bool value = false; }; -} //namespace containers_detail { +} //namespace container_detail { } //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include #endif //#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP diff --git a/3party/boost/boost/container/detail/preprocessor.hpp b/3party/boost/boost/container/detail/preprocessor.hpp new file mode 100644 index 0000000000..1818094be1 --- /dev/null +++ b/3party/boost/boost/container/detail/preprocessor.hpp @@ -0,0 +1,185 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2008-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP +#define BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include + +#ifndef BOOST_NO_RVALUE_REFERENCES +#include +#endif //#ifndef BOOST_NO_RVALUE_REFERENCES + +#include + +#ifdef BOOST_CONTAINER_PERFECT_FORWARDING +//#error "This file is not needed when perfect forwarding is available" +#endif //BOOST_CONTAINER_PERFECT_FORWARDING + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS 10 + +//Note: +//We define template parameters as const references to +//be able to bind temporaries. After that we will un-const them. +//This cast is ugly but it is necessary until "perfect forwarding" +//is achieved in C++0x. Meanwhile, if we want to be able to +//bind rvalues with non-const references, we have to be ugly +#ifndef BOOST_NO_RVALUE_REFERENCES + #define BOOST_CONTAINER_PP_PARAM_LIST(z, n, data) \ + BOOST_PP_CAT(P, n) && BOOST_PP_CAT(p, n) \ + //! +#else + #define BOOST_CONTAINER_PP_PARAM_LIST(z, n, data) \ + const BOOST_PP_CAT(P, n) & BOOST_PP_CAT(p, n) \ + //! +#endif //#ifndef BOOST_NO_RVALUE_REFERENCES + +#define BOOST_CONTAINER_PP_CONST_REF_PARAM_LIST_Q(z, n, Data) \ +const BOOST_PP_CAT(Q, n) & BOOST_PP_CAT(q, n) \ +//! + +#ifndef BOOST_NO_RVALUE_REFERENCES + #define BOOST_CONTAINER_PP_PARAM(U, u) \ + U && u \ + //! +#else + #define BOOST_CONTAINER_PP_PARAM(U, u) \ + const U & u \ + //! +#endif //#ifndef BOOST_NO_RVALUE_REFERENCES + +#ifndef BOOST_NO_RVALUE_REFERENCES + + #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + + #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ + BOOST_PP_CAT(m_p, n) (static_cast( BOOST_PP_CAT(p, n) )) \ + + #else //#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + + #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ + BOOST_PP_CAT(m_p, n) (::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ + //! + + #endif //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES + +#else //BOOST_NO_RVALUE_REFERENCES + + #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ + BOOST_PP_CAT(m_p, n) (const_cast(BOOST_PP_CAT(p, n))) \ + //! +#endif //#ifndef BOOST_NO_RVALUE_REFERENCES + +#ifndef BOOST_NO_RVALUE_REFERENCES + + #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + + #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ + BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ + //! + + #else //BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG + + #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ + BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n); \ + //! + + #endif //defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + +#else //BOOST_NO_RVALUE_REFERENCES + + #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ + BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ + //! +#endif //#ifndef BOOST_NO_RVALUE_REFERENCES + +#if !defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + + #define BOOST_CONTAINER_PP_MEMBER_FORWARD(z, n, data) \ + ::boost::container::container_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(this->m_p, n) ) \ + //! + +#else //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + + #define BOOST_CONTAINER_PP_MEMBER_FORWARD(z, n, data) \ + ::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(this->m_p, n) ) \ + //! + +#endif //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + +#define BOOST_CONTAINER_PP_PARAM_INC(z, n, data) \ + BOOST_PP_CAT(++this->m_p, n) \ +//! + +#define BOOST_CONTAINER_PP_IDENTITY(z, n, data) data + + +#define BOOST_CONTAINER_PP_PARAM_FORWARD(z, n, data) \ +::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ) \ +//! + +#define BOOST_CONTAINER_PP_DECLVAL(z, n, data) \ +::boost::move_detail::declval< BOOST_PP_CAT(P, n) >() \ +//! + +#define BOOST_CONTAINER_PP_MEMBER_IT_FORWARD(z, n, data) \ +BOOST_PP_CAT(*this->m_p, n) \ +//! + +#define BOOST_CONTAINER_PP_TEMPLATE_PARAM_VOID_DEFAULT(z, n, data) \ + BOOST_PP_CAT(class P, n) = void \ +//! + +#define BOOST_CONTAINER_PP_TEMPLATE_PARAM_WITH_DEFAULT(z, n, default_type) \ + BOOST_PP_CAT(class P, n) = default_type \ +//! + +#define BOOST_CONTAINER_PP_STATIC_PARAM_REF_DECLARE(z, n, data) \ + static BOOST_PP_CAT(P, n) & BOOST_PP_CAT(p, n); \ +//! + +#define BOOST_CONTAINER_PP_PARAM_PASS(z, n, data) \ + BOOST_PP_CAT(p, n) \ +//! + +#define BOOST_CONTAINER_PP_FWD_TYPE(z, n, data) \ + typename ::boost::move_detail::forward_type< BOOST_PP_CAT(P, n) >::type \ +//! + +#include + +//#else + +//#ifdef BOOST_CONTAINER_PERFECT_FORWARDING +//#error "This file is not needed when perfect forwarding is available" +//#endif //BOOST_CONTAINER_PERFECT_FORWARDING + +#endif //#ifndef BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/stored_ref.hpp b/3party/boost/boost/container/detail/stored_ref.hpp similarity index 76% rename from 3party/boost/boost/interprocess/containers/container/detail/stored_ref.hpp rename to 3party/boost/boost/container/detail/stored_ref.hpp index 965b73880c..80fda89615 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/stored_ref.hpp +++ b/3party/boost/boost/container/detail/stored_ref.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2012. 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) // @@ -8,17 +8,17 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_STORED_REF_HPP -#define BOOST_CONTAINERS_DETAIL_STORED_REF_HPP +#ifndef BOOST_CONTAINER_DETAIL_STORED_REF_HPP +#define BOOST_CONTAINER_DETAIL_STORED_REF_HPP #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include #ifndef BOOST_NO_RVALUE_REFERENCES namespace boost{ namespace container{ -namespace containers_detail{ +namespace container_detail{ template struct stored_ref @@ -28,7 +28,7 @@ struct stored_ref #ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES { return t; } #else - { return BOOST_CONTAINER_MOVE_NAMESPACE::move(t); } + { return boost::move(t); } #endif }; @@ -50,7 +50,7 @@ struct stored_ref #ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES { return t; } #else - { return BOOST_CONTAINER_MOVE_NAMESPACE::move(t); } + { return boost::move(t); } #endif }; @@ -79,7 +79,7 @@ struct stored_ref { return t; } }; -} //namespace containers_detail{ +} //namespace container_detail{ } //namespace container{ } //namespace boost{ @@ -87,6 +87,6 @@ struct stored_ref #error "This header can be included only for compiler with rvalue references" #endif //BOOST_NO_RVALUE_REFERENCES -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //BOOST_CONTAINERS_DETAIL_STORED_REF_HPP +#endif //BOOST_CONTAINER_DETAIL_STORED_REF_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/transform_iterator.hpp b/3party/boost/boost/container/detail/transform_iterator.hpp similarity index 89% rename from 3party/boost/boost/interprocess/containers/container/detail/transform_iterator.hpp rename to 3party/boost/boost/container/detail/transform_iterator.hpp index 96ea1459cd..98f5c04d60 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/transform_iterator.hpp +++ b/3party/boost/boost/container/detail/transform_iterator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2012. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. @@ -11,20 +11,20 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_TRANSFORM_ITERATORS_HPP -#define BOOST_CONTAINERS_DETAIL_TRANSFORM_ITERATORS_HPP +#ifndef BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATORS_HPP +#define BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATORS_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP +#include +#include #include namespace boost { -namespace container { +namespace container { template struct operator_arrow_proxy @@ -59,7 +59,7 @@ class transform_iterator : public UnaryFunction , public std::iterator < typename Iterator::iterator_category - , typename containers_detail::remove_reference::type + , typename container_detail::remove_reference::type , typename Iterator::difference_type , operator_arrow_proxy , typename UnaryFunction::result_type> @@ -74,7 +74,7 @@ class transform_iterator {} //Constructors - transform_iterator& operator++() + transform_iterator& operator++() { increment(); return *this; } transform_iterator operator++(int) @@ -168,9 +168,9 @@ make_transform_iterator(Iterator it, UnaryFunc fun) return transform_iterator(it, fun); } -} //namespace container { +} //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //#ifndef BOOST_CONTAINERS_DETAIL_TRANSFORM_ITERATORS_HPP +#endif //#ifndef BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATORS_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/tree.hpp b/3party/boost/boost/container/detail/tree.hpp similarity index 61% rename from 3party/boost/boost/interprocess/containers/container/detail/tree.hpp rename to 3party/boost/boost/container/detail/tree.hpp index bf0d1f4210..3ab1536204 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/tree.hpp +++ b/3party/boost/boost/container/detail/tree.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,26 +8,28 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_TREE_HPP -#define BOOST_CONTAINERS_TREE_HPP +#ifndef BOOST_CONTAINER_TREE_HPP +#define BOOST_CONTAINER_TREE_HPP #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include +#include -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include +#include +#include #include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_NODE_ALLOC_HOLDER_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_DESTROYERS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_PAIR_HPP -#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP +#include +#include +#include +#include +#include +#include +#include +#ifndef BOOST_CONTAINER_PERFECT_FORWARDING +#include #endif #include //std::pair @@ -36,18 +38,18 @@ namespace boost { namespace container { -namespace containers_detail { +namespace container_detail { template struct value_compare_impl : public KeyCompare { typedef Value value_type; - typedef KeyCompare key_compare; + typedef KeyCompare key_compare; typedef KeyOfValue key_of_value; typedef Key key_type; - value_compare_impl(key_compare kcomp) + value_compare_impl(const key_compare &kcomp) : key_compare(kcomp) {} @@ -57,78 +59,69 @@ struct value_compare_impl key_compare &key_comp() { return static_cast(*this); } - template - bool operator()(const A &a, const B &b) const - { return key_compare::operator()(KeyOfValue()(a), KeyOfValue()(b)); } + template + struct is_key + { + static const bool value = is_same::value; + }; + + template + typename enable_if_c::value, const key_type &>::type + key_forward(const T &key) const + { return key; } + + template + typename enable_if_c::value, const key_type &>::type + key_forward(const T &key) const + { return KeyOfValue()(key); } + + template + bool operator()(const KeyType &key1, const KeyType2 &key2) const + { return key_compare::operator()(this->key_forward(key1), this->key_forward(key2)); } }; template struct rbtree_hook { - typedef typename containers_detail::bi::make_set_base_hook - < containers_detail::bi::void_pointer - , containers_detail::bi::link_mode - , containers_detail::bi::optimize_size + typedef typename container_detail::bi::make_set_base_hook + < container_detail::bi::void_pointer + , container_detail::bi::link_mode + , container_detail::bi::optimize_size >::type type; }; +//This trait is used to type-pun std::pair because in C++03 +//compilers std::pair is useless for C++11 features template -struct rbtree_type +struct rbtree_internal_data_type { typedef T type; }; template -struct rbtree_type< std::pair > +struct rbtree_internal_data_type< std::pair > { typedef pair type; }; + +//The node to be store in the tree template struct rbtree_node : public rbtree_hook::type { + private: + //BOOST_COPYABLE_AND_MOVABLE(rbtree_node) + rbtree_node(); + + public: typedef typename rbtree_hook::type hook_type; typedef T value_type; - typedef typename rbtree_type::type internal_type; + typedef typename rbtree_internal_data_type::type internal_type; typedef rbtree_node node_type; - #ifndef BOOST_CONTAINERS_PERFECT_FORWARDING - - rbtree_node() - : m_data() - {} - - rbtree_node(const rbtree_node &other) - : m_data(other.m_data) - {} - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - rbtree_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - : m_data(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)) \ - {} \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #else //#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING - - rbtree_node() - : m_data() - {} - - template - rbtree_node(Args &&...args) - : m_data(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...) - {} - #endif//#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING - - rbtree_node &operator=(const rbtree_node &other) - { do_assign(other.m_data); return *this; } - T &get_data() { T* ptr = reinterpret_cast(&this->m_data); @@ -141,7 +134,6 @@ struct rbtree_node return *ptr; } - private: internal_type m_data; template @@ -162,76 +154,88 @@ struct rbtree_node void do_assign(const V &v) { m_data = v; } - public: - template - static void construct(node_type *ptr, BOOST_MOVE_MACRO_FWD_REF(Convertible) convertible) - { new(ptr) node_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(convertible)); } + template + void do_move_assign(std::pair &p) + { + const_cast(m_data.first) = ::boost::move(p.first); + m_data.second = ::boost::move(p.second); + } + + template + void do_move_assign(pair &p) + { + const_cast(m_data.first) = ::boost::move(p.first); + m_data.second = ::boost::move(p.second); + } + + template + void do_move_assign(V &v) + { m_data = ::boost::move(v); } }; -}//namespace containers_detail { -#if defined(BOOST_NO_RVALUE_REFERENCES) -template -struct has_own_construct_from_it - < boost::container::containers_detail::rbtree_node > -{ - static const bool value = true; -}; -#endif -namespace containers_detail { +}//namespace container_detail { + +namespace container_detail { template struct intrusive_rbtree_type { - typedef typename A::value_type value_type; - typedef typename boost::pointer_to_other - ::type void_pointer; - typedef typename containers_detail::rbtree_node + typedef typename boost::container:: + allocator_traits::value_type value_type; + typedef typename boost::container:: + allocator_traits::void_pointer void_pointer; + typedef typename boost::container:: + allocator_traits::size_type size_type; + typedef typename container_detail::rbtree_node node_type; typedef node_compare node_compare_type; - typedef typename containers_detail::bi::make_rbtree + typedef typename container_detail::bi::make_rbtree - ,containers_detail::bi::base_hook::type> - ,containers_detail::bi::constant_time_size - ,containers_detail::bi::size_type + ,container_detail::bi::compare + ,container_detail::bi::base_hook::type> + ,container_detail::bi::constant_time_size + ,container_detail::bi::size_type >::type container_type; typedef container_type type ; }; -} //namespace containers_detail { +} //namespace container_detail { -namespace containers_detail { +namespace container_detail { -template class rbtree - : protected containers_detail::node_alloc_holder - + : protected container_detail::node_alloc_holder + < A + , typename container_detail::intrusive_rbtree_type + >::type + , KeyCompare > { - typedef typename containers_detail::intrusive_rbtree_type - - >::type Icont; - typedef containers_detail::node_alloc_holder AllocHolder; - typedef typename AllocHolder::NodePtr NodePtr; + >::type Icont; + typedef container_detail::node_alloc_holder + AllocHolder; + typedef typename AllocHolder::NodePtr NodePtr; typedef rbtree < Key, Value, KeyOfValue - , KeyCompare, A> ThisType; - typedef typename AllocHolder::NodeAlloc NodeAlloc; - typedef typename AllocHolder::ValAlloc ValAlloc; - typedef typename AllocHolder::Node Node; - typedef typename Icont::iterator iiterator; - typedef typename Icont::const_iterator iconst_iterator; - typedef containers_detail::allocator_destroyer Destroyer; - typedef typename AllocHolder::allocator_v1 allocator_v1; - typedef typename AllocHolder::allocator_v2 allocator_v2; - typedef typename AllocHolder::alloc_version alloc_version; + , KeyCompare, A> ThisType; + typedef typename AllocHolder::NodeAlloc NodeAlloc; + typedef typename AllocHolder::ValAlloc ValAlloc; + typedef typename AllocHolder::Node Node; + typedef typename Icont::iterator iiterator; + typedef typename Icont::const_iterator iconst_iterator; + typedef container_detail::allocator_destroyer Destroyer; + typedef typename AllocHolder::allocator_v1 allocator_v1; + typedef typename AllocHolder::allocator_v2 allocator_v2; + typedef typename AllocHolder::alloc_version alloc_version; class RecyclingCloner; friend class RecyclingCloner; - + class RecyclingCloner { public: @@ -241,13 +245,11 @@ class rbtree NodePtr operator()(const Node &other) const { -// if(!m_icont.empty()){ if(NodePtr p = m_icont.unlink_leftmost_without_rebalance()){ //First recycle a node (this can't throw) - //NodePtr p = m_icont.unlink_leftmost_without_rebalance(); try{ //This can throw - *p = other; + p->do_assign(other.m_data); return p; } catch(...){ @@ -260,14 +262,52 @@ class rbtree } } else{ - return m_holder.create_node(other); + return m_holder.create_node(other.m_data); } } AllocHolder &m_holder; Icont &m_icont; }; - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(rbtree) + + class RecyclingMoveCloner; + friend class RecyclingMoveCloner; + + class RecyclingMoveCloner + { + public: + RecyclingMoveCloner(AllocHolder &holder, Icont &irbtree) + : m_holder(holder), m_icont(irbtree) + {} + + NodePtr operator()(const Node &other) const + { + if(NodePtr p = m_icont.unlink_leftmost_without_rebalance()){ + //First recycle a node (this can't throw) + try{ + //This can throw + p->do_move_assign(const_cast(other).m_data); + return p; + } + catch(...){ + //If there is an exception destroy the whole source + m_holder.destroy_node(p); + while((p = m_icont.unlink_leftmost_without_rebalance())){ + m_holder.destroy_node(p); + } + throw; + } + } + else{ + return m_holder.create_node(other.m_data); + } + } + + AllocHolder &m_holder; + Icont &m_icont; + }; + + BOOST_COPYABLE_AND_MOVABLE(rbtree) public: @@ -277,12 +317,18 @@ class rbtree typedef KeyCompare key_compare; typedef value_compare_impl< Key, Value , KeyCompare, KeyOfValue> value_compare; - typedef typename A::pointer pointer; - typedef typename A::const_pointer const_pointer; - typedef typename A::reference reference; - typedef typename A::const_reference const_reference; - typedef typename A::size_type size_type; - typedef typename A::difference_type difference_type; + typedef typename boost::container:: + allocator_traits::pointer pointer; + typedef typename boost::container:: + allocator_traits::const_pointer const_pointer; + typedef typename boost::container:: + allocator_traits::reference reference; + typedef typename boost::container:: + allocator_traits::const_reference const_reference; + typedef typename boost::container:: + allocator_traits::size_type size_type; + typedef typename boost::container:: + allocator_traits::difference_type difference_type; typedef difference_type rbtree_difference_type; typedef pointer rbtree_pointer; typedef const_pointer rbtree_const_pointer; @@ -296,17 +342,29 @@ class rbtree struct key_node_compare : private KeyValueCompare { - key_node_compare(KeyValueCompare comp) + key_node_compare(const KeyValueCompare &comp) : KeyValueCompare(comp) {} - - template - bool operator()(const Node &n, const KeyType &k) const - { return KeyValueCompare::operator()(n.get_data(), k); } - template - bool operator()(const KeyType &k, const Node &n) const - { return KeyValueCompare::operator()(k, n.get_data()); } + template + struct is_node + { + static const bool value = is_same::value; + }; + + template + typename enable_if_c::value, const value_type &>::type + key_forward(const T &node) const + { return node.get_data(); } + + template + typename enable_if_c::value, const T &>::type + key_forward(const T &key) const + { return key; } + + template + bool operator()(const KeyType &key1, const KeyType2 &key2) const + { return KeyValueCompare::operator()(this->key_forward(key1), this->key_forward(key2)); } }; typedef key_node_compare KeyNodeCompare; @@ -340,17 +398,17 @@ class rbtree {} //Pointer like operators - const_reference operator*() const + const_reference operator*() const { return m_it->get_data(); } - const_pointer operator->() const + const_pointer operator->() const { return const_pointer(&m_it->get_data()); } //Increment / Decrement - const_iterator& operator++() + const_iterator& operator++() { prot_incr(); return *this; } - const_iterator operator++(int) + const_iterator operator++(int) { iiterator tmp = m_it; ++*this; return const_iterator(tmp); } const_iterator& operator--() @@ -374,7 +432,7 @@ class rbtree explicit iterator(iiterator it) : const_iterator(it) {} - + iiterator get() { return this->m_it; } @@ -387,16 +445,18 @@ class rbtree iterator(){} //Pointer like operators - reference operator*() const { return this->m_it->get_data(); } - pointer operator->() const { return pointer(&this->m_it->get_data()); } + reference operator*() const + { return this->m_it->get_data(); } + pointer operator->() const + { return boost::intrusive::pointer_traits::pointer_to(this->m_it->get_data()); } //Increment / Decrement - iterator& operator++() + iterator& operator++() { this->prot_incr(); return *this; } iterator operator++(int) { iiterator tmp = this->m_it; ++*this; return iterator(tmp); } - + iterator& operator--() { this->prot_decr(); return *this; } @@ -407,8 +467,11 @@ class rbtree typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; - rbtree(const key_compare& comp = key_compare(), - const allocator_type& a = allocator_type()) + rbtree() + : AllocHolder(key_compare()) + {} + + rbtree(const key_compare& comp, const allocator_type& a = allocator_type()) : AllocHolder(a, comp) {} @@ -430,34 +493,59 @@ class rbtree priv_create_and_insert_ordered_nodes(first, last, alloc_version(), ItCat()); } - rbtree(const rbtree& x) + rbtree(const rbtree& x) : AllocHolder(x, x.key_comp()) { this->icont().clone_from (x.icont(), typename AllocHolder::cloner(*this), Destroyer(this->node_alloc())); } - rbtree(BOOST_MOVE_MACRO_RV_REF(rbtree) x) - : AllocHolder(x, x.key_comp()) - { this->swap(x); } + rbtree(BOOST_RV_REF(rbtree) x) + : AllocHolder(::boost::move(static_cast(x)), x.key_comp()) + {} + + rbtree(const rbtree& x, const allocator_type &a) + : AllocHolder(a, x.key_comp()) + { + this->icont().clone_from + (x.icont(), typename AllocHolder::cloner(*this), Destroyer(this->node_alloc())); + } + + rbtree(BOOST_RV_REF(rbtree) x, const allocator_type &a) + : AllocHolder(a, x.key_comp()) + { + if(this->node_alloc() == x.node_alloc()){ + this->icont().swap(x.icont()); + } + else{ + this->icont().clone_from + (x.icont(), typename AllocHolder::cloner(*this), Destroyer(this->node_alloc())); + } + } ~rbtree() {} //AllocHolder clears the tree - rbtree& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(rbtree) x) + rbtree& operator=(BOOST_COPY_ASSIGN_REF(rbtree) x) { - if (this != &x) { + if (&x != this){ + NodeAlloc &this_alloc = this->get_stored_allocator(); + const NodeAlloc &x_alloc = x.get_stored_allocator(); + container_detail::bool_:: + propagate_on_container_copy_assignment::value> flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + } + this->AllocHolder::copy_assign_alloc(x); //Transfer all the nodes to a temporary tree //If anything goes wrong, all the nodes will be destroyed //automatically - Icont other_tree(this->icont().value_comp()); - other_tree.swap(this->icont()); + Icont other_tree(::boost::move(this->icont())); //Now recreate the source tree reusing nodes stored by other_tree this->icont().clone_from (x.icont() , RecyclingCloner(*this, other_tree) - //, AllocHolder::cloner(*this) , Destroyer(this->node_alloc())); //If there are remaining nodes, destroy them @@ -469,21 +557,54 @@ class rbtree return *this; } - rbtree& operator=(BOOST_MOVE_MACRO_RV_REF(rbtree) mx) - { this->clear(); this->swap(mx); return *this; } + rbtree& operator=(BOOST_RV_REF(rbtree) x) + { + if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + NodeAlloc &x_alloc = x.node_alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy and swap pointers + this->clear(); + this->icont() = ::boost::move(x.icont()); + //Move allocator if needed + this->AllocHolder::move_assign_alloc(x); + } + //If unequal allocators, then do a one by one move + else{ + //Transfer all the nodes to a temporary tree + //If anything goes wrong, all the nodes will be destroyed + //automatically + Icont other_tree(::boost::move(this->icont())); - public: + //Now recreate the source tree reusing nodes stored by other_tree + this->icont().clone_from + (x.icont() + , RecyclingMoveCloner(*this, other_tree) + , Destroyer(this->node_alloc())); + + //If there are remaining nodes, destroy them + NodePtr p; + while((p = other_tree.unlink_leftmost_without_rebalance())){ + AllocHolder::destroy_node(p); + } + } + } + return *this; + } + + public: // accessors: - value_compare value_comp() const + value_compare value_comp() const { return this->icont().value_comp().value_comp(); } - key_compare key_comp() const + key_compare key_comp() const { return this->icont().value_comp().value_comp().key_comp(); } - allocator_type get_allocator() const + allocator_type get_allocator() const { return allocator_type(this->node_alloc()); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return this->node_alloc(); } stored_allocator_type &get_stored_allocator() @@ -514,46 +635,46 @@ class rbtree { return this->crend(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const { return const_iterator(this->non_const_icont().begin()); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const + const_iterator cend() const { return const_iterator(this->non_const_icont().end()); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return const_reverse_iterator(cend()); } + const_reverse_iterator crbegin() const + { return const_reverse_iterator(cend()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const + const_reverse_iterator crend() const { return const_reverse_iterator(cbegin()); } - bool empty() const + bool empty() const { return !this->size(); } - size_type size() const + size_type size() const { return this->icont().size(); } - size_type max_size() const + size_type max_size() const { return AllocHolder::max_size(); } void swap(ThisType& x) @@ -567,7 +688,7 @@ class rbtree std::pair insert_unique_check (const key_type& key, insert_commit_data &data) { - std::pair ret = + std::pair ret = this->icont().insert_unique_check(key, KeyNodeCompare(value_comp()), data); return std::pair(iterator(ret.first), ret.second); } @@ -575,7 +696,7 @@ class rbtree std::pair insert_unique_check (const_iterator hint, const key_type& key, insert_commit_data &data) { - std::pair ret = + std::pair ret = this->icont().insert_unique_check(hint.get(), key, KeyNodeCompare(value_comp()), data); return std::pair(iterator(ret.first), ret.second); } @@ -589,9 +710,9 @@ class rbtree template iterator insert_unique_commit - (BOOST_MOVE_MACRO_FWD_REF(MovableConvertible) mv, insert_commit_data &data) + (BOOST_FWD_REF(MovableConvertible) mv, insert_commit_data &data) { - NodePtr tmp = AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(mv)); + NodePtr tmp = AllocHolder::create_node(boost::forward(mv)); iiterator it(this->icont().insert_unique_commit(*tmp, data)); return iterator(it); } @@ -608,7 +729,7 @@ class rbtree } template - std::pair insert_unique(BOOST_MOVE_MACRO_FWD_REF(MovableConvertible) mv) + std::pair insert_unique(BOOST_FWD_REF(MovableConvertible) mv) { insert_commit_data data; std::pair ret = @@ -616,21 +737,25 @@ class rbtree if(!ret.second) return ret; return std::pair - (this->insert_unique_commit(BOOST_CONTAINER_MOVE_NAMESPACE::forward(mv), data), true); + (this->insert_unique_commit(boost::forward(mv), data), true); } private: - iterator emplace_unique_impl(NodePtr p) + std::pair emplace_unique_impl(NodePtr p) { value_type &v = p->get_data(); insert_commit_data data; + scoped_destroy_deallocator destroy_deallocator(p, this->node_alloc()); std::pair ret = this->insert_unique_check(KeyOfValue()(v), data); if(!ret.second){ - Destroyer(this->node_alloc())(p); - return ret.first; + return ret; } - return iterator(iiterator(this->icont().insert_unique_commit(*p, data))); + //No throw insertion part, release rollback + destroy_deallocator.release(); + return std::pair + ( iterator(iiterator(this->icont().insert_unique_commit(*p, data))) + , true ); } iterator emplace_unique_hint_impl(const_iterator hint, NodePtr p) @@ -648,83 +773,67 @@ class rbtree public: - #ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #ifdef BOOST_CONTAINER_PERFECT_FORWARDING template - iterator emplace_unique(Args&&... args) - { return this->emplace_unique_impl(AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); } + std::pair emplace_unique(Args&&... args) + { return this->emplace_unique_impl(AllocHolder::create_node(boost::forward(args)...)); } template iterator emplace_hint_unique(const_iterator hint, Args&&... args) - { return this->emplace_unique_hint_impl(hint, AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); } + { return this->emplace_unique_hint_impl(hint, AllocHolder::create_node(boost::forward(args)...)); } template iterator emplace_equal(Args&&... args) { - NodePtr p(AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); + NodePtr p(AllocHolder::create_node(boost::forward(args)...)); return iterator(this->icont().insert_equal(this->icont().end(), *p)); } template iterator emplace_hint_equal(const_iterator hint, Args&&... args) { - NodePtr p(AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); + NodePtr p(AllocHolder::create_node(boost::forward(args)...)); return iterator(this->icont().insert_equal(hint.get(), *p)); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - iterator emplace_unique() - { return this->emplace_unique_impl(AllocHolder::create_node()); } - - iterator emplace_hint_unique(const_iterator hint) - { return this->emplace_unique_hint_impl(hint, AllocHolder::create_node()); } - - iterator emplace_equal() - { - NodePtr p(AllocHolder::create_node()); - return iterator(this->icont().insert_equal(this->icont().end(), *p)); - } - - iterator emplace_hint_equal(const_iterator hint) - { - NodePtr p(AllocHolder::create_node()); - return iterator(this->icont().insert_equal(hint.get(), *p)); - } + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ return this->emplace_unique_impl \ - (AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ + (AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \ } \ \ - template \ - iterator emplace_hint_unique(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint_unique(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ return this->emplace_unique_hint_impl \ - (hint, AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ + (hint, AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \ } \ \ - template \ - iterator emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - NodePtr p(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ + NodePtr p(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \ return iterator(this->icont().insert_equal(this->icont().end(), *p)); \ } \ \ - template \ - iterator emplace_hint_equal(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint_equal(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - NodePtr p(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ + NodePtr p(AllocHolder::create_node(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \ return iterator(this->icont().insert_equal(hint.get(), *p)); \ } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING iterator insert_unique(const_iterator hint, const value_type& v) { @@ -737,14 +846,14 @@ class rbtree } template - iterator insert_unique(const_iterator hint, BOOST_MOVE_MACRO_FWD_REF(MovableConvertible) mv) + iterator insert_unique(const_iterator hint, BOOST_FWD_REF(MovableConvertible) mv) { insert_commit_data data; std::pair ret = this->insert_unique_check(hint, KeyOfValue()(mv), data); if(!ret.second) return ret.first; - return this->insert_unique_commit(BOOST_CONTAINER_MOVE_NAMESPACE::forward(mv), data); + return this->insert_unique_commit(boost::forward(mv), data); } template @@ -753,9 +862,9 @@ class rbtree if(this->empty()){ //Insert with end hint, to achieve linear //complexity if [first, last) is ordered - const_iterator end(this->end()); + const_iterator hint(this->cend()); for( ; first != last; ++first) - this->insert_unique(end, *first); + hint = this->insert_unique(hint, *first); } else{ for( ; first != last; ++first) @@ -770,9 +879,9 @@ class rbtree } template - iterator insert_equal(BOOST_MOVE_MACRO_FWD_REF(MovableConvertible) mv) + iterator insert_equal(BOOST_FWD_REF(MovableConvertible) mv) { - NodePtr p(AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(mv))); + NodePtr p(AllocHolder::create_node(boost::forward(mv))); return iterator(this->icont().insert_equal(this->icont().end(), *p)); } @@ -783,9 +892,9 @@ class rbtree } template - iterator insert_equal(const_iterator hint, BOOST_MOVE_MACRO_FWD_REF(MovableConvertible) mv) + iterator insert_equal(const_iterator hint, BOOST_FWD_REF(MovableConvertible) mv) { - NodePtr p(AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(mv))); + NodePtr p(AllocHolder::create_node(boost::forward(mv))); return iterator(this->icont().insert_equal(hint.get(), *p)); } @@ -794,9 +903,9 @@ class rbtree { //Insert with end hint, to achieve linear //complexity if [first, last) is ordered - const_iterator end(this->cend()); + const_iterator hint(this->cend()); for( ; first != last; ++first) - this->insert_equal(end, *first); + hint = this->insert_equal(hint, *first); } iterator erase(const_iterator position) @@ -808,7 +917,7 @@ class rbtree iterator erase(const_iterator first, const_iterator last) { return iterator(AllocHolder::erase_range(first.get(), last.get(), alloc_version())); } - void clear() + void clear() { AllocHolder::clear(alloc_version()); } // set operations: @@ -834,14 +943,14 @@ class rbtree { return const_iterator(this->non_const_icont().upper_bound(k, KeyNodeCompare(value_comp()))); } std::pair equal_range(const key_type& k) - { + { std::pair ret = this->icont().equal_range(k, KeyNodeCompare(value_comp())); return std::pair(iterator(ret.first), iterator(ret.second)); } std::pair equal_range(const key_type& k) const - { + { std::pair ret = this->non_const_icont().equal_range(k, KeyNodeCompare(value_comp())); return std::pair @@ -953,83 +1062,83 @@ class rbtree } }; -template -inline bool -operator==(const rbtree& x, +inline bool +operator==(const rbtree& x, const rbtree& y) { return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); } -template -inline bool -operator<(const rbtree& x, +inline bool +operator<(const rbtree& x, const rbtree& y) { - return std::lexicographical_compare(x.begin(), x.end(), + return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } -template -inline bool -operator!=(const rbtree& x, +inline bool +operator!=(const rbtree& x, const rbtree& y) { return !(x == y); } -template -inline bool -operator>(const rbtree& x, +inline bool +operator>(const rbtree& x, const rbtree& y) { return y < x; } -template -inline bool -operator<=(const rbtree& x, +inline bool +operator<=(const rbtree& x, const rbtree& y) { return !(y < x); } -template -inline bool -operator>=(const rbtree& x, +inline bool +operator>=(const rbtree& x, const rbtree& y) { return !(x < y); } -template -inline void -swap(rbtree& x, +inline void +swap(rbtree& x, rbtree& y) { x.swap(y); } -} //namespace containers_detail { +} //namespace container_detail { } //namespace container { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template struct has_trivial_destructor_after_move - > + > { static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //BOOST_CONTAINERS_TREE_HPP +#endif //BOOST_CONTAINER_TREE_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/type_traits.hpp b/3party/boost/boost/container/detail/type_traits.hpp similarity index 72% rename from 3party/boost/boost/interprocess/containers/container/detail/type_traits.hpp rename to 3party/boost/boost/container/detail/type_traits.hpp index d2a93c63d1..0e096e54e3 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/type_traits.hpp +++ b/3party/boost/boost/container/detail/type_traits.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // (C) Copyright John Maddock 2000. -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -12,8 +12,8 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#define BOOST_CONTAINERS_CONTAINER_DETAIL_TYPE_TRAITS_HPP +#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP +#define BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -21,12 +21,21 @@ #include "config_begin.hpp" +#include + namespace boost { -namespace container { -namespace containers_detail { +namespace container { +namespace container_detail { struct nat{}; +template +struct LowPriorityConversion +{ + // Convertible from T with user-defined-conversion rank. + LowPriorityConversion(const U&) { } +}; + //boost::alignment_of yields to 10K lines of preprocessed code, so we //need an alternative template struct alignment_of; @@ -81,6 +90,24 @@ struct remove_reference typedef T type; }; +#ifndef BOOST_NO_RVALUE_REFERENCES + +template +struct remove_reference +{ + typedef T type; +}; + +#else + +template +struct remove_reference< ::boost::rv > +{ + typedef T type; +}; + +#endif + template struct is_reference { @@ -156,11 +183,28 @@ struct is_same static const bool value = sizeof(yes_type) == sizeof(is_same_tester(t,u)); }; -} // namespace containers_detail -} //namespace container { +template +struct remove_const +{ + typedef T type; +}; + +template +struct remove_const< const T> +{ + typedef T type; +}; + +template +struct remove_ref_const +{ + typedef typename remove_const< typename remove_reference::type >::type type; +}; + +} // namespace container_detail +} //namespace container { } //namespace boost { -#endif //#ifndef BOOST_CONTAINERS_CONTAINER_DETAIL_TYPE_TRAITS_HPP - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include +#endif //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP diff --git a/3party/boost/boost/container/detail/utilities.hpp b/3party/boost/boost/container/detail/utilities.hpp new file mode 100644 index 0000000000..152b5e162e --- /dev/null +++ b/3party/boost/boost/container/detail/utilities.hpp @@ -0,0 +1,282 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DETAIL_UTILITIES_HPP +#define BOOST_CONTAINER_DETAIL_UTILITIES_HPP + +#include "config_begin.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace container { +namespace container_detail { + +template +inline T* addressof(T& obj) +{ + return static_cast( + static_cast( + const_cast( + &reinterpret_cast(obj) + ))); +} + +template +const T &max_value(const T &a, const T &b) +{ return a > b ? a : b; } + +template +const T &min_value(const T &a, const T &b) +{ return a < b ? a : b; } + +template +SizeType + get_next_capacity(const SizeType max_size + ,const SizeType capacity + ,const SizeType n) +{ +// if (n > max_size - capacity) +// throw std::length_error("get_next_capacity"); + + const SizeType m3 = max_size/3; + + if (capacity < m3) + return capacity + max_value(3*(capacity+1)/5, n); + + if (capacity < m3*2) + return capacity + max_value((capacity+1)/2, n); + + return max_size; +} + +template +inline T* to_raw_pointer(T* p) +{ return p; } + +template +inline typename Pointer::element_type* + to_raw_pointer(const Pointer &p) +{ return boost::container::container_detail::to_raw_pointer(p.operator->()); } + +//!To avoid ADL problems with swap +template +inline void do_swap(T& x, T& y) +{ + using std::swap; + swap(x, y); +} + +template +inline void swap_alloc(AllocatorType &, AllocatorType &, container_detail::false_type) + BOOST_CONTAINER_NOEXCEPT +{} + +template +inline void swap_alloc(AllocatorType &l, AllocatorType &r, container_detail::true_type) +{ container_detail::do_swap(l, r); } + +template +inline void assign_alloc(AllocatorType &, const AllocatorType &, container_detail::false_type) + BOOST_CONTAINER_NOEXCEPT +{} + +template +inline void assign_alloc(AllocatorType &l, const AllocatorType &r, container_detail::true_type) +{ l = r; } + +template +inline void move_alloc(AllocatorType &, AllocatorType &, container_detail::false_type) + BOOST_CONTAINER_NOEXCEPT +{} + +template +inline void move_alloc(AllocatorType &l, AllocatorType &r, container_detail::true_type) +{ l = ::boost::move(r); } + +//Rounds "orig_size" by excess to round_to bytes +template +inline SizeType get_rounded_size(SizeType orig_size, SizeType round_to) +{ + return ((orig_size-1)/round_to+1)*round_to; +} + +template +struct ct_rounded_size +{ + enum { value = ((OrigSize-1)/RoundTo+1)*RoundTo }; +}; +/* +template +struct __rw_is_enum +{ + struct _C_no { }; + struct _C_yes { int _C_dummy [2]; }; + + struct _C_indirect { + // prevent classes with user-defined conversions from matching + + // use double to prevent float->int gcc conversion warnings + _C_indirect (double); +}; + +// nested struct gets rid of bogus gcc errors +struct _C_nest { + // supply first argument to prevent HP aCC warnings + static _C_no _C_is (int, ...); + static _C_yes _C_is (int, _C_indirect); + + static _TypeT _C_make_T (); +}; + +enum { + _C_val = sizeof (_C_yes) == sizeof (_C_nest::_C_is (0, _C_nest::_C_make_T ())) + && !::boost::is_fundamental<_TypeT>::value +}; + +}; +*/ + +template +struct move_const_ref_type + : if_c +// < ::boost::is_fundamental::value || ::boost::is_pointer::value || ::boost::is_member_pointer::value || ::boost::is_enum::value + < !::boost::is_class::value + ,const T & + ,BOOST_CATCH_CONST_RLVALUE(T) + > +{}; + +} //namespace container_detail { + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_move_alloc +// +////////////////////////////////////////////////////////////////////////////// + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! allocator_traits::construct(a, &*result, boost::move(*first)); +//! \endcode +//! +//! Returns: result +template + // F models ForwardIterator +F uninitialized_move_alloc(A &a, I f, I l, F r) +{ + while (f != l) { + allocator_traits::construct(a, container_detail::to_raw_pointer(&*r), boost::move(*f)); + ++f; ++r; + } + return r; +} + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_copy_alloc +// +////////////////////////////////////////////////////////////////////////////// + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! allocator_traits::construct(a, &*result, *first); +//! \endcode +//! +//! Returns: result +template + // F models ForwardIterator +F uninitialized_copy_alloc(A &a, I f, I l, F r) +{ + while (f != l) { + allocator_traits::construct(a, container_detail::to_raw_pointer(&*r), *f); + ++f; ++r; + } + return r; +} + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_copy_alloc +// +////////////////////////////////////////////////////////////////////////////// + +//! Effects: +//! \code +//! for (; first != last; ++result, ++first) +//! allocator_traits::construct(a, &*result, *first); +//! \endcode +//! +//! Returns: result +template + +void uninitialized_fill_alloc(A &a, F f, F l, const T &t) +{ + while (f != l) { + allocator_traits::construct(a, container_detail::to_raw_pointer(&*f), t); + ++f; + } +} + +////////////////////////////////////////////////////////////////////////////// +// +// uninitialized_copy_or_move_alloc +// +////////////////////////////////////////////////////////////////////////////// + +template + // F models ForwardIterator +F uninitialized_copy_or_move_alloc + (A &a, I f, I l, F r + ,typename boost::container::container_detail::enable_if + < boost::move_detail::is_move_iterator >::type* = 0) +{ + return ::boost::container::uninitialized_move_alloc(a, f, l, r); +} + +template + // F models ForwardIterator +F uninitialized_copy_or_move_alloc + (A &a, I f, I l, F r + ,typename boost::container::container_detail::disable_if + < boost::move_detail::is_move_iterator >::type* = 0) +{ + return ::boost::container::uninitialized_copy_alloc(a, f, l, r); +} + + +} //namespace container { +} //namespace boost { + + +#include + +#endif //#ifndef BOOST_CONTAINER_DETAIL_UTILITIES_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/value_init.hpp b/3party/boost/boost/container/detail/value_init.hpp similarity index 58% rename from 3party/boost/boost/interprocess/containers/container/detail/value_init.hpp rename to 3party/boost/boost/container/detail/value_init.hpp index e16db2c9b9..ec1a99c56d 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/value_init.hpp +++ b/3party/boost/boost/container/detail/value_init.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -10,19 +10,19 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_VALUE_INIT_HPP -#define BOOST_CONTAINERS_DETAIL_VALUE_INIT_HPP +#ifndef BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP +#define BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include namespace boost { -namespace container { -namespace containers_detail { +namespace container { +namespace container_detail { template struct value_init @@ -31,13 +31,15 @@ struct value_init : m_t() {} + operator T &() { return m_t; } + T m_t; }; -} //namespace containers_detail { -} //namespace container { +} //namespace container_detail { +} //namespace container { } //namespace boost { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //#ifndef BOOST_CONTAINERS_DETAIL_VALUE_INIT_HPP +#endif //#ifndef BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/variadic_templates_tools.hpp b/3party/boost/boost/container/detail/variadic_templates_tools.hpp similarity index 88% rename from 3party/boost/boost/interprocess/containers/container/detail/variadic_templates_tools.hpp rename to 3party/boost/boost/container/detail/variadic_templates_tools.hpp index eb17470af4..d903dfa04c 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/variadic_templates_tools.hpp +++ b/3party/boost/boost/container/detail/variadic_templates_tools.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2012. 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) // @@ -8,21 +8,21 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP -#define BOOST_CONTAINERS_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP +#ifndef BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP +#define BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP +#include +#include #include //std::size_t namespace boost { -namespace container { -namespace containers_detail { +namespace container { +namespace container_detail { template class tuple; @@ -136,7 +136,7 @@ struct index_tuple{}; template > struct build_number_seq; -template +template struct build_number_seq > : build_number_seq > {}; @@ -146,8 +146,8 @@ struct build_number_seq<0, index_tuple > { typedef index_tuple type; }; -}}} //namespace boost { namespace container { namespace containers_detail { +}}} //namespace boost { namespace container { namespace container_detail { -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif //#ifndef BOOST_CONTAINERS_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP +#endif //#ifndef BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/version_type.hpp b/3party/boost/boost/container/detail/version_type.hpp similarity index 69% rename from 3party/boost/boost/interprocess/containers/container/detail/version_type.hpp rename to 3party/boost/boost/container/detail/version_type.hpp index 8b23f4133a..e47ba26f12 100644 --- a/3party/boost/boost/interprocess/containers/container/detail/version_type.hpp +++ b/3party/boost/boost/container/detail/version_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -13,24 +13,23 @@ ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_DETAIL_VERSION_TYPE_HPP -#define BOOST_CONTAINERS_DETAIL_VERSION_TYPE_HPP +#ifndef BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP +#define BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP #include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP - +#include +#include namespace boost{ namespace container { -namespace containers_detail { +namespace container_detail { //using namespace boost; template struct version_type - : public containers_detail::integral_constant + : public container_detail::integral_constant { typedef T type; @@ -39,8 +38,8 @@ struct version_type namespace impl{ -template , typename T::version>::value> +template , typename T::version>::value> struct extract_version { static const unsigned value = 1; @@ -80,12 +79,14 @@ struct version template struct version - : public containers_detail::integral_constant::value> + : public container_detail::integral_constant::value> { }; -} //namespace containers_detail { +} //namespace container_detail { } //namespace container { } //namespace boost{ -#endif //#define BOOST_CONTAINERS_DETAIL_VERSION_TYPE_HPP +#include "config_end.hpp" + +#endif //#define BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP diff --git a/3party/boost/boost/container/detail/workaround.hpp b/3party/boost/boost/container/detail/workaround.hpp new file mode 100644 index 0000000000..c4440743fc --- /dev/null +++ b/3party/boost/boost/container/detail/workaround.hpp @@ -0,0 +1,36 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#define BOOST_CONTAINER_DETAIL_WORKAROUND_HPP + +#include + +#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)\ + && !defined(BOOST_INTERPROCESS_DISABLE_VARIADIC_TMPL) + #define BOOST_CONTAINER_PERFECT_FORWARDING +#endif + +#if defined(BOOST_NO_NOEXCEPT) + #define BOOST_CONTAINER_NOEXCEPT + #define BOOST_CONTAINER_NOEXCEPT_IF(x) +#else + #define BOOST_CONTAINER_NOEXCEPT noexcept + #define BOOST_CONTAINER_NOEXCEPT_IF(x) noexcept(x) +#endif + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && defined(__GXX_EXPERIMENTAL_CXX0X__)\ + && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40700) + #define BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST +#endif + +#include + +#endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP diff --git a/3party/boost/boost/interprocess/containers/container/flat_map.hpp b/3party/boost/boost/container/flat_map.hpp similarity index 50% rename from 3party/boost/boost/interprocess/containers/container/flat_map.hpp rename to 3party/boost/boost/container/flat_map.hpp index c40a827eef..0142500860 100644 --- a/3party/boost/boost/interprocess/containers/container/flat_map.hpp +++ b/3party/boost/boost/container/flat_map.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,25 +8,26 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_FLAT_MAP_HPP -#define BOOST_CONTAINERS_FLAT_MAP_HPP +#ifndef BOOST_CONTAINER_FLAT_MAP_HPP +#define BOOST_CONTAINER_FLAT_MAP_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include +#include -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include #include #include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_FLAT_TREE_HPP +#include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP +#include +#include +#include #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { @@ -38,59 +39,84 @@ namespace container { /// @cond // Forward declarations of operators == and <, needed for friend declarations. -template +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template >, class A = std::allocator > +#else +template +#endif class flat_map; -template -inline bool operator==(const flat_map& x, - const flat_map& y); +template +inline bool operator==(const flat_map& x, + const flat_map& y); + +template +inline bool operator<(const flat_map& x, + const flat_map& y); + +namespace container_detail{ + +template +static D &force(const S &s) +{ return *const_cast((reinterpret_cast(&s))); } + +template +static D force_copy(S s) +{ + D *vp = reinterpret_cast(&s); + return D(*vp); +} + +} //namespace container_detail{ + -template -inline bool operator<(const flat_map& x, - const flat_map& y); /// @endcond //! A flat_map is a kind of associative container that supports unique keys (contains at -//! most one of each key value) and provides for fast retrieval of values of another +//! most one of each key value) and provides for fast retrieval of values of another //! type T based on the keys. The flat_map class supports random-access iterators. -//! -//! A flat_map satisfies all of the requirements of a container and of a reversible -//! container and of an associative container. A flat_map also provides -//! most operations described for unique keys. For a +//! +//! A flat_map satisfies all of the requirements of a container and of a reversible +//! container and of an associative container. A flat_map also provides +//! most operations described for unique keys. For a //! flat_map the key_type is Key and the value_type is std::pair //! (unlike std::map which value_type is std::pair<const Key, T>). //! //! Pred is the ordering function for Keys (e.g. std::less). //! -//! Alloc is the allocator to allocate the value_types +//! A is the allocator to allocate the value_types //! (e.g. allocator< std::pair >). -//! +//! //! flat_map is similar to std::map but it's implemented like an ordered vector. //! This means that inserting a new element into a flat_map invalidates //! previous iterators and references //! -//! Erasing an element of a flat_map invalidates iterators and references +//! Erasing an element of a flat_map invalidates iterators and references //! pointing to elements that come after (their keys are bigger) the erased element. -template -class flat_map +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template >, class A = std::allocator > +#else +template +#endif +class flat_map { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(flat_map) + BOOST_COPYABLE_AND_MOVABLE(flat_map) //This is the tree that we should store if pair was movable - typedef containers_detail::flat_tree, - containers_detail::select1st< std::pair >, - Pred, - Alloc> tree_t; + typedef container_detail::flat_tree, + container_detail::select1st< std::pair >, + Pred, + A> tree_t; //This is the real tree stored here. It's based on a movable pair - typedef containers_detail::flat_tree, - containers_detail::select1st >, - Pred, - typename Alloc::template - rebind >::other> impl_tree_t; + typedef container_detail::flat_tree, + container_detail::select1st >, + Pred, + typename allocator_traits::template portable_rebind_alloc + >::type> impl_tree_t; impl_tree_t m_flat_tree; // flat tree representing flat_map typedef typename impl_tree_t::value_type impl_value_type; @@ -104,296 +130,308 @@ class flat_map typedef typename impl_tree_t::reverse_iterator impl_reverse_iterator; typedef typename impl_tree_t::const_reverse_iterator impl_const_reverse_iterator; typedef typename impl_tree_t::allocator_type impl_allocator_type; + typedef allocator_traits allocator_traits_type; - template - static D &force(const S &s) - { return *const_cast(reinterpret_cast(&s)); } - template - static D force_copy(S s) - { - value_type *vp = reinterpret_cast(&*s); - return D(vp); - } /// @endcond public: // typedefs: - typedef typename impl_tree_t::key_type key_type; - typedef T mapped_type; - typedef typename std::pair value_type; - typedef typename Alloc::pointer pointer; - typedef typename Alloc::const_pointer const_pointer; - typedef typename Alloc::reference reference; - typedef typename Alloc::const_reference const_reference; - typedef containers_detail::flat_tree_value_compare + typedef Key key_type; + typedef T mapped_type; + typedef typename std::pair value_type; + typedef typename allocator_traits_type::pointer pointer; + typedef typename allocator_traits_type::const_pointer const_pointer; + typedef typename allocator_traits_type::reference reference; + typedef typename allocator_traits_type::const_reference const_reference; + typedef typename impl_tree_t::size_type size_type; + typedef typename impl_tree_t::difference_type difference_type; + + typedef container_detail::flat_tree_value_compare < Pred - , containers_detail::select1st< std::pair > - , std::pair > value_compare; - typedef Pred key_compare; - typedef typename containers_detail:: - get_flat_tree_iterators::iterator iterator; - typedef typename containers_detail:: - get_flat_tree_iterators::const_iterator const_iterator; - typedef typename containers_detail:: + , container_detail::select1st< std::pair > + , std::pair > value_compare; + typedef Pred key_compare; + typedef typename container_detail:: + get_flat_tree_iterators::iterator iterator; + typedef typename container_detail:: + get_flat_tree_iterators::const_iterator const_iterator; + typedef typename container_detail:: get_flat_tree_iterators - ::reverse_iterator reverse_iterator; - typedef typename containers_detail:: + ::reverse_iterator reverse_iterator; + typedef typename container_detail:: get_flat_tree_iterators - ::const_reverse_iterator const_reverse_iterator; - typedef typename impl_tree_t::size_type size_type; - typedef typename impl_tree_t::difference_type difference_type; - typedef Alloc allocator_type; - typedef Alloc stored_allocator_type; + ::const_reverse_iterator const_reverse_iterator; + typedef A allocator_type; + + //!Standard extension + typedef A stored_allocator_type; + + //!Standard extension for C++03 compilers with non-movable std::pair + typedef impl_value_type movable_value_type; + + public: + //! Effects: Default constructs an empty flat_map. + //! + //! Complexity: Constant. + flat_map() + : m_flat_tree() {} //! Effects: Constructs an empty flat_map using the specified //! comparison object and allocator. - //! + //! //! Complexity: Constant. - explicit flat_map(const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, force(a)) {} + explicit flat_map(const Pred& comp, const allocator_type& a = allocator_type()) + : m_flat_tree(comp, container_detail::force(a)) {} - //! Effects: Constructs an empty flat_map using the specified comparison object and + //! Effects: Constructs an empty flat_map using the specified comparison object and //! allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template flat_map(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, force(a)) + : m_flat_tree(comp, container_detail::force(a)) { m_flat_tree.insert_unique(first, last); } - //! Effects: Constructs an empty flat_map using the specified comparison object and + //! Effects: Constructs an empty flat_map using the specified comparison object and //! allocator, and inserts elements from the ordered unique range [first ,last). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate and must be //! unique values. - //! + //! //! Complexity: Linear in N. + //! + //! Note: Non-standard extension. template flat_map( ordered_unique_range_t, InputIterator first, InputIterator last , const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(ordered_range, first, last, comp, a) + : m_flat_tree(ordered_range, first, last, comp, a) {} //! Effects: Copy constructs a flat_map. - //! + //! //! Complexity: Linear in x.size(). - flat_map(const flat_map& x) + flat_map(const flat_map& x) : m_flat_tree(x.m_flat_tree) {} //! Effects: Move constructs a flat_map. //! Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - flat_map(BOOST_MOVE_MACRO_RV_REF(flat_map) x) - : m_flat_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_flat_tree)) + flat_map(BOOST_RV_REF(flat_map) x) + : m_flat_tree(boost::move(x.m_flat_tree)) + {} + + //! Effects: Copy constructs a flat_map using the specified allocator. + //! + //! Complexity: Linear in x.size(). + flat_map(const flat_map& x, const allocator_type &a) + : m_flat_tree(x.m_flat_tree, a) + {} + + //! Effects: Move constructs a flat_map using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if x.get_allocator() == a, linear otherwise. + flat_map(BOOST_RV_REF(flat_map) x, const allocator_type &a) + : m_flat_tree(boost::move(x.m_flat_tree), a) {} //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - flat_map& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(flat_map) x) + flat_map& operator=(BOOST_COPY_ASSIGN_REF(flat_map) x) { m_flat_tree = x.m_flat_tree; return *this; } //! Effects: Move constructs a flat_map. //! Constructs *this using x's resources. - //! + //! //! Complexity: Construct. - //! + //! //! Postcondition: x is emptied. - flat_map& operator=(BOOST_MOVE_MACRO_RV_REF(flat_map) mx) - { m_flat_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(mx.m_flat_tree); return *this; } + flat_map& operator=(BOOST_RV_REF(flat_map) mx) + { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const - { return force(m_flat_tree.key_comp()); } + key_compare key_comp() const + { return container_detail::force_copy(m_flat_tree.key_comp()); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const - { return value_compare(force(m_flat_tree.key_comp())); } + value_compare value_comp() const + { return value_compare(container_detail::force_copy(m_flat_tree.key_comp())); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const - { return force(m_flat_tree.get_allocator()); } + allocator_type get_allocator() const + { return container_detail::force_copy(m_flat_tree.get_allocator()); } - const stored_allocator_type &get_stored_allocator() const - { return force(m_flat_tree.get_stored_allocator()); } + const stored_allocator_type &get_stored_allocator() const + { return container_detail::force(m_flat_tree.get_stored_allocator()); } stored_allocator_type &get_stored_allocator() - { return force(m_flat_tree.get_stored_allocator()); } + { return container_detail::force(m_flat_tree.get_stored_allocator()); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() - { return force_copy(m_flat_tree.begin()); } + iterator begin() + { return container_detail::force_copy(m_flat_tree.begin()); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const - { return force(m_flat_tree.begin()); } - - //! Effects: Returns a const_iterator to the first element contained in the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cbegin() const - { return force(m_flat_tree.cbegin()); } + const_iterator begin() const + { return container_detail::force_copy(m_flat_tree.begin()); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() - { return force_copy(m_flat_tree.end()); } + iterator end() + { return container_detail::force_copy(m_flat_tree.end()); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const - { return force(m_flat_tree.end()); } + const_iterator end() const + { return container_detail::force_copy(m_flat_tree.end()); } - //! Effects: Returns a const_iterator to the end of the container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const - { return force(m_flat_tree.cend()); } + reverse_iterator rbegin() + { return container_detail::force_copy(m_flat_tree.rbegin()); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() - { return force(m_flat_tree.rbegin()); } - - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return force(m_flat_tree.rbegin()); } - - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return force(m_flat_tree.crbegin()); } + const_reverse_iterator rbegin() const + { return container_detail::force_copy(m_flat_tree.rbegin()); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() - { return force(m_flat_tree.rend()); } + reverse_iterator rend() + { return container_detail::force_copy(m_flat_tree.rend()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const - { return force(m_flat_tree.rend()); } + const_reverse_iterator rend() const + { return container_detail::force_copy(m_flat_tree.rend()); } + + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const + { return container_detail::force_copy(m_flat_tree.cbegin()); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const + { return container_detail::force_copy(m_flat_tree.cend()); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const + { return container_detail::force_copy(m_flat_tree.crbegin()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const - { return force(m_flat_tree.crend()); } + const_reverse_iterator crend() const + { return container_detail::force_copy(m_flat_tree.crend()); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_flat_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_flat_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_flat_tree.max_size(); } - //! Effects: If there is no key equivalent to x in the flat_map, inserts + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: If there is no key equivalent to x in the flat_map, inserts //! value_type(x, T()) into the flat_map. - //! + //! //! Returns: A reference to the mapped_type corresponding to x in *this. - //! + //! //! Complexity: Logarithmic. - T &operator[](const key_type& k) - { - iterator i = lower_bound(k); - // i->first is greater than or equivalent to k. - if (i == end() || key_comp()(k, (*i).first)) - i = insert(i, value_type(k, T())); - return (*i).second; - } + mapped_type &operator[](const key_type& k); - //! Effects: If there is no key equivalent to x in the flat_map, inserts + //! Effects: If there is no key equivalent to x in the flat_map, inserts //! value_type(move(x), T()) into the flat_map (the key is move-constructed) - //! + //! //! Returns: A reference to the mapped_type corresponding to x in *this. - //! + //! //! Complexity: Logarithmic. - T &operator[](BOOST_MOVE_MACRO_RV_REF(key_type) mk) - { - key_type &k = mk; - iterator i = lower_bound(k); - // i->first is greater than or equivalent to k. - if (i == end() || key_comp()(k, (*i).first)) - i = insert(i, value_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(k), BOOST_CONTAINER_MOVE_NAMESPACE::move(T()))); - return (*i).second; - } + mapped_type &operator[](key_type &&k) ; + + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, priv_subscript) + #endif //! Returns: A reference to the element whose key is equivalent to x. //! Throws: An exception object of type out_of_range if no such element is present. @@ -420,7 +458,6 @@ class flat_map } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -428,54 +465,54 @@ class flat_map void swap(flat_map& x) { m_flat_tree.swap(x.m_flat_tree); } - //! Effects: Inserts x if and only if there is no element in the container + //! Effects: Inserts x if and only if there is no element in the container //! with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - std::pair insert(const value_type& x) - { return force >( - m_flat_tree.insert_unique(force(x))); } + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(const value_type& x) + { return container_detail::force_copy >( + m_flat_tree.insert_unique(container_detail::force(x))); } //! Effects: Inserts a new value_type move constructed from the pair if and //! only if there is no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return force >( - m_flat_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(force(x)))); } + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(BOOST_RV_REF(value_type) x) + { return container_detail::force_copy >( + m_flat_tree.insert_unique(boost::move(container_detail::force(x)))); } //! Effects: Inserts a new value_type move constructed from the pair if and //! only if there is no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(impl_value_type) x) + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(BOOST_RV_REF(movable_value_type) x) { - return force > - (m_flat_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); + return container_detail::force_copy > + (m_flat_tree.insert_unique(boost::move(x))); } - //! Effects: Inserts a copy of x in the container if and only if there is + //! Effects: Inserts a copy of x in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -485,72 +522,95 @@ class flat_map //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. iterator insert(const_iterator position, const value_type& x) - { return force_copy( - m_flat_tree.insert_unique(force(position), force(x))); } - - //! Effects: Inserts an element move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return force_copy( - m_flat_tree.insert_unique(force(position), BOOST_CONTAINER_MOVE_NAMESPACE::move(force(x)))); } - - //! Effects: Inserts an element move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(impl_value_type) x) { - return force_copy( - m_flat_tree.insert_unique(force(position), BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); + return container_detail::force_copy( + m_flat_tree.insert_unique( container_detail::force_copy(position) + , container_detail::force(x))); } - //! Requires: i, j are not iterators into *this. + //! Effects: Inserts an element move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. //! - //! Effects: inserts each element from the range [i,j) if and only + //! Returns: An iterator pointing to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) + { + return container_detail::force_copy + (m_flat_tree.insert_unique( container_detail::force_copy(position) + , boost::move(container_detail::force(x)))); + } + + //! Effects: Inserts an element move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, BOOST_RV_REF(movable_value_type) x) + { + return container_detail::force_copy( + m_flat_tree.insert_unique(container_detail::force_copy(position), boost::move(x))); + } + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) if and only //! if there is no element with key equivalent to the key of that element. //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) //! search time plus N*size() insertion time. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_flat_tree.insert_unique(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: first, last are not iterators into *this. + //! + //! Requires: [first ,last) must be ordered according to the predicate and must be + //! unique values. + //! + //! Effects: inserts each element from the range [first,last) if and only + //! if there is no element with key equivalent to the key of that element. This + //! function is more efficient than the normal range creation for ordered ranges. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: If an element is inserted it might invalidate elements. + template + void insert(ordered_unique_range_t, InputIterator first, InputIterator last) + { m_flat_tree.insert_unique(ordered_unique_range, first, last); } - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... if and only if there is no element in the container + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: Inserts an object x of type T constructed with + //! std::forward(args)... if and only if there is no element in the container //! with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template - iterator emplace(Args&&... args) - { return force_copy(m_flat_tree.emplace_unique(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); } + std::pair emplace(Args&&... args) + { return container_detail::force_copy< std::pair >(m_flat_tree.emplace_unique(boost::forward(args)...)); } //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the container if and only if there is + //! std::forward(args)... in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -560,52 +620,50 @@ class flat_map //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return force_copy(m_flat_tree.emplace_hint_unique(force(hint), BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); } + { + return container_detail::force_copy + (m_flat_tree.emplace_hint_unique( container_detail::force_copy(hint) + , boost::forward(args)...)); + } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return force_copy(m_flat_tree.emplace_unique()); } - - iterator emplace_hint(const_iterator hint) - { return force_copy(m_flat_tree.emplace_hint_unique(force(hint))); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - return force_copy(m_flat_tree.emplace_unique \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ - } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - return force_copy(m_flat_tree.emplace_hint_unique \ - (force(hint), \ - BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ - } \ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy< std::pair > \ + (m_flat_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy(m_flat_tree.emplace_hint_unique \ + (container_detail::force_copy(hint) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Linear to the elements with keys bigger than position //! //! Note: Invalidates elements with keys //! not less than the erased element. - iterator erase(const_iterator position) - { return force_copy(m_flat_tree.erase(force(position))); } + iterator erase(const_iterator position) + { + return container_detail::force_copy + (m_flat_tree.erase(container_detail::force_copy(position))); + } //! Effects: Erases all elements in the container with key equivalent to x. //! @@ -613,7 +671,7 @@ class flat_map //! //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_flat_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -625,14 +683,18 @@ class flat_map //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. iterator erase(const_iterator first, const_iterator last) - { return force_copy(m_flat_tree.erase(force(first), force(last))); } + { + return container_detail::force_copy( + m_flat_tree.erase( container_detail::force_copy(first) + , container_detail::force_copy(last))); + } //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_flat_tree.clear(); } //! Effects: Tries to deallocate the excess of memory created @@ -648,81 +710,81 @@ class flat_map //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) - { return force_copy(m_flat_tree.find(x)); } + iterator find(const key_type& x) + { return container_detail::force_copy(m_flat_tree.find(x)); } //! Returns: A const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic.s - const_iterator find(const key_type& x) const - { return force(m_flat_tree.find(x)); } + const_iterator find(const key_type& x) const + { return container_detail::force_copy(m_flat_tree.find(x)); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_flat_tree.find(x) == m_flat_tree.end() ? 0 : 1; } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) - { return force_copy(m_flat_tree.lower_bound(x)); } + iterator lower_bound(const key_type& x) + { return container_detail::force_copy(m_flat_tree.lower_bound(x)); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const - { return force(m_flat_tree.lower_bound(x)); } + const_iterator lower_bound(const key_type& x) const + { return container_detail::force_copy(m_flat_tree.lower_bound(x)); } //! Returns: An iterator pointing to the first element with key not less //! than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - iterator upper_bound(const key_type& x) - { return force_copy(m_flat_tree.upper_bound(x)); } + iterator upper_bound(const key_type& x) + { return container_detail::force_copy(m_flat_tree.upper_bound(x)); } //! Returns: A const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const - { return force(m_flat_tree.upper_bound(x)); } + const_iterator upper_bound(const key_type& x) const + { return container_detail::force_copy(m_flat_tree.upper_bound(x)); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) - { return force >(m_flat_tree.equal_range(x)); } + std::pair equal_range(const key_type& x) + { return container_detail::force_copy >(m_flat_tree.equal_range(x)); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) const - { return force >(m_flat_tree.equal_range(x)); } + std::pair equal_range(const key_type& x) const + { return container_detail::force_copy >(m_flat_tree.equal_range(x)); } //! Effects: Number of elements for which memory has been allocated. //! capacity() is always greater than or equal to size(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type capacity() const + size_type capacity() const { return m_flat_tree.capacity(); } //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. //! If the request is successful, then capacity() is greater than or equal to //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! + //! //! Throws: If memory allocation allocation throws or T's copy constructor throws. //! //! Note: If capacity() is less than "count", iterators and references to //! to values might be invalidated. - void reserve(size_type count) + void reserve(size_type count) { m_flat_tree.reserve(count); } /// @cond @@ -732,42 +794,65 @@ class flat_map template friend bool operator< (const flat_map&, const flat_map&); + + private: + mapped_type &priv_subscript(const key_type& k) + { + iterator i = lower_bound(k); + // i->first is greater than or equivalent to k. + if (i == end() || key_comp()(k, (*i).first)){ + container_detail::value_init m; + i = insert(i, impl_value_type(k, ::boost::move(m.m_t))); + } + return (*i).second; + } + mapped_type &priv_subscript(BOOST_RV_REF(key_type) mk) + { + key_type &k = mk; + iterator i = lower_bound(k); + // i->first is greater than or equivalent to k. + if (i == end() || key_comp()(k, (*i).first)){ + container_detail::value_init m; + i = insert(i, impl_value_type(boost::move(k), ::boost::move(m.m_t))); + } + return (*i).second; + } /// @endcond }; -template -inline bool operator==(const flat_map& x, - const flat_map& y) +template +inline bool operator==(const flat_map& x, + const flat_map& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_map& x, - const flat_map& y) +template +inline bool operator<(const flat_map& x, + const flat_map& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_map& x, - const flat_map& y) +template +inline bool operator!=(const flat_map& x, + const flat_map& y) { return !(x == y); } -template -inline bool operator>(const flat_map& x, - const flat_map& y) +template +inline bool operator>(const flat_map& x, + const flat_map& y) { return y < x; } -template -inline bool operator<=(const flat_map& x, - const flat_map& y) +template +inline bool operator<=(const flat_map& x, + const flat_map& y) { return !(y < x); } -template -inline bool operator>=(const flat_map& x, - const flat_map& y) +template +inline bool operator>=(const flat_map& x, + const flat_map& y) { return !(x < y); } -template -inline void swap(flat_map& x, - flat_map& y) +template +inline void swap(flat_map& x, + flat_map& y) { x.swap(y); } /// @cond @@ -785,52 +870,58 @@ struct has_trivial_destructor_after_move namespace container { // Forward declaration of operators < and ==, needed for friend declaration. -template +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template >, class A = std::allocator > +#else +template +#endif class flat_multimap; -template -inline bool operator==(const flat_multimap& x, - const flat_multimap& y); +template +inline bool operator==(const flat_multimap& x, + const flat_multimap& y); -template -inline bool operator<(const flat_multimap& x, - const flat_multimap& y); +template +inline bool operator<(const flat_multimap& x, + const flat_multimap& y); /// @endcond -//! A flat_multimap is a kind of associative container that supports equivalent keys -//! (possibly containing multiple copies of the same key value) and provides for -//! fast retrieval of values of another type T based on the keys. The flat_multimap +//! A flat_multimap is a kind of associative container that supports equivalent keys +//! (possibly containing multiple copies of the same key value) and provides for +//! fast retrieval of values of another type T based on the keys. The flat_multimap //! class supports random-access iterators. -//! -//! A flat_multimap satisfies all of the requirements of a container and of a reversible -//! container and of an associative container. For a +//! +//! A flat_multimap satisfies all of the requirements of a container and of a reversible +//! container and of an associative container. For a //! flat_multimap the key_type is Key and the value_type is std::pair //! (unlike std::multimap which value_type is std::pair<const Key, T>). //! //! Pred is the ordering function for Keys (e.g. std::less). //! -//! Alloc is the allocator to allocate the value_types +//! A is the allocator to allocate the value_types //! (e.g. allocator< std::pair >). -template -class flat_multimap +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template >, class A = std::allocator > +#else +template +#endif +class flat_multimap { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(flat_multimap) - typedef containers_detail::flat_tree, - containers_detail::select1st< std::pair >, - Pred, - Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(flat_multimap) + typedef container_detail::flat_tree, + container_detail::select1st< std::pair >, + Pred, + A> tree_t; //This is the real tree stored here. It's based on a movable pair - typedef containers_detail::flat_tree, - containers_detail::select1st >, - Pred, - typename Alloc::template - rebind >::other> impl_tree_t; + typedef container_detail::flat_tree, + container_detail::select1st >, + Pred, + typename allocator_traits::template portable_rebind_alloc + >::type> impl_tree_t; impl_tree_t m_flat_tree; // flat tree representing flat_map typedef typename impl_tree_t::value_type impl_value_type; @@ -844,231 +935,282 @@ class flat_multimap typedef typename impl_tree_t::reverse_iterator impl_reverse_iterator; typedef typename impl_tree_t::const_reverse_iterator impl_const_reverse_iterator; typedef typename impl_tree_t::allocator_type impl_allocator_type; + typedef allocator_traits allocator_traits_type; - template - static D &force(const S &s) - { return *const_cast((reinterpret_cast(&s))); } - - template - static D force_copy(S s) - { - value_type *vp = reinterpret_cast(&*s); - return D(vp); - } /// @endcond public: // typedefs: - typedef typename impl_tree_t::key_type key_type; - typedef T mapped_type; - typedef typename std::pair value_type; - typedef typename Alloc::pointer pointer; - typedef typename Alloc::const_pointer const_pointer; - typedef typename Alloc::reference reference; - typedef typename Alloc::const_reference const_reference; - typedef containers_detail::flat_tree_value_compare + typedef Key key_type; + typedef T mapped_type; + typedef Pred key_compare; + typedef typename std::pair value_type; + typedef typename allocator_traits_type::pointer pointer; + typedef typename allocator_traits_type::const_pointer const_pointer; + typedef typename allocator_traits_type::reference reference; + typedef typename allocator_traits_type::const_reference const_reference; + typedef typename impl_tree_t::size_type size_type; + typedef typename impl_tree_t::difference_type difference_type; + typedef container_detail::flat_tree_value_compare < Pred - , containers_detail::select1st< std::pair > - , std::pair > value_compare; - typedef Pred key_compare; - typedef typename containers_detail:: - get_flat_tree_iterators::iterator iterator; - typedef typename containers_detail:: - get_flat_tree_iterators::const_iterator const_iterator; - typedef typename containers_detail:: + , container_detail::select1st< std::pair > + , std::pair > value_compare; + + typedef typename container_detail:: + get_flat_tree_iterators::iterator iterator; + typedef typename container_detail:: + get_flat_tree_iterators::const_iterator const_iterator; + typedef typename container_detail:: get_flat_tree_iterators - ::reverse_iterator reverse_iterator; - typedef typename containers_detail:: + ::reverse_iterator reverse_iterator; + typedef typename container_detail:: get_flat_tree_iterators - ::const_reverse_iterator const_reverse_iterator; - typedef typename impl_tree_t::size_type size_type; - typedef typename impl_tree_t::difference_type difference_type; - typedef Alloc allocator_type; - typedef Alloc stored_allocator_type; + ::const_reverse_iterator const_reverse_iterator; + typedef A allocator_type; + //Non-standard extension + typedef A stored_allocator_type; + //!Standard extension for C++03 compilers with non-movable std::pair + typedef impl_value_type movable_value_type; + + //! Effects: Default constructs an empty flat_map. + //! + //! Complexity: Constant. + flat_multimap() + : m_flat_tree() {} //! Effects: Constructs an empty flat_multimap using the specified comparison //! object and allocator. - //! + //! //! Complexity: Constant. - explicit flat_multimap(const Pred& comp = Pred(), + explicit flat_multimap(const Pred& comp, const allocator_type& a = allocator_type()) - : m_flat_tree(comp, force(a)) { } + : m_flat_tree(comp, container_detail::force(a)) { } //! Effects: Constructs an empty flat_multimap using the specified comparison object //! and allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template flat_multimap(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, force(a)) + : m_flat_tree(comp, container_detail::force(a)) { m_flat_tree.insert_equal(first, last); } - //! Effects: Constructs an empty flat_multimap using the specified comparison object and + //! Effects: Constructs an empty flat_multimap using the specified comparison object and //! allocator, and inserts elements from the ordered range [first ,last). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate. - //! + //! //! Complexity: Linear in N. + //! + //! Note: Non-standard extension. template flat_multimap(ordered_range_t, InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(ordered_range, first, last, comp, a) + : m_flat_tree(ordered_range, first, last, comp, a) {} //! Effects: Copy constructs a flat_multimap. - //! + //! //! Complexity: Linear in x.size(). - flat_multimap(const flat_multimap& x) + flat_multimap(const flat_multimap& x) : m_flat_tree(x.m_flat_tree) { } //! Effects: Move constructs a flat_multimap. Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - flat_multimap(BOOST_MOVE_MACRO_RV_REF(flat_multimap) x) - : m_flat_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_flat_tree)) + flat_multimap(BOOST_RV_REF(flat_multimap) x) + : m_flat_tree(boost::move(x.m_flat_tree)) + { } + + //! Effects: Copy constructs a flat_multimap using the specified allocator. + //! + //! Complexity: Linear in x.size(). + flat_multimap(const flat_multimap& x, const allocator_type &a) + : m_flat_tree(x.m_flat_tree, a) + {} + + //! Effects: Move constructs a flat_multimap using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if a == x.get_allocator(), linear otherwise. + flat_multimap(BOOST_RV_REF(flat_multimap) x, const allocator_type &a) + : m_flat_tree(boost::move(x.m_flat_tree), a) { } //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - flat_multimap& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(flat_multimap) x) + flat_multimap& operator=(BOOST_COPY_ASSIGN_REF(flat_multimap) x) { m_flat_tree = x.m_flat_tree; return *this; } //! Effects: this->swap(x.get()). - //! + //! //! Complexity: Constant. - flat_multimap& operator=(BOOST_MOVE_MACRO_RV_REF(flat_multimap) mx) - { m_flat_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(mx.m_flat_tree); return *this; } + flat_multimap& operator=(BOOST_RV_REF(flat_multimap) mx) + { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const - { return force(m_flat_tree.key_comp()); } + key_compare key_comp() const + { return container_detail::force_copy(m_flat_tree.key_comp()); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const - { return value_compare(force(m_flat_tree.key_comp())); } + value_compare value_comp() const + { return value_compare(container_detail::force_copy(m_flat_tree.key_comp())); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const - { return force(m_flat_tree.get_allocator()); } + allocator_type get_allocator() const + { return container_detail::force_copy(m_flat_tree.get_allocator()); } - const stored_allocator_type &get_stored_allocator() const - { return force(m_flat_tree.get_stored_allocator()); } + const stored_allocator_type &get_stored_allocator() const + { return container_detail::force(m_flat_tree.get_stored_allocator()); } stored_allocator_type &get_stored_allocator() - { return force(m_flat_tree.get_stored_allocator()); } + { return container_detail::force(m_flat_tree.get_stored_allocator()); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() - { return force_copy(m_flat_tree.begin()); } + iterator begin() + { return container_detail::force_copy(m_flat_tree.begin()); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const - { return force(m_flat_tree.begin()); } + const_iterator begin() const + { return container_detail::force_copy(m_flat_tree.begin()); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() - { return force_copy(m_flat_tree.end()); } + iterator end() + { return container_detail::force_copy(m_flat_tree.end()); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const - { return force(m_flat_tree.end()); } + const_iterator end() const + { return container_detail::force_copy(m_flat_tree.end()); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() - { return force(m_flat_tree.rbegin()); } + reverse_iterator rbegin() + { return container_detail::force_copy(m_flat_tree.rbegin()); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return force(m_flat_tree.rbegin()); } + const_reverse_iterator rbegin() const + { return container_detail::force_copy(m_flat_tree.rbegin()); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() - { return force(m_flat_tree.rend()); } + reverse_iterator rend() + { return container_detail::force_copy(m_flat_tree.rend()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const - { return force(m_flat_tree.rend()); } + const_reverse_iterator rend() const + { return container_detail::force_copy(m_flat_tree.rend()); } + + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const + { return container_detail::force_copy(m_flat_tree.cbegin()); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const + { return container_detail::force_copy(m_flat_tree.cend()); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const + { return container_detail::force_copy(m_flat_tree.crbegin()); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend() const + { return container_detail::force_copy(m_flat_tree.crend()); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_flat_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_flat_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_flat_tree.max_size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -1077,34 +1219,37 @@ class flat_multimap { m_flat_tree.swap(x.m_flat_tree); } //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const value_type& x) - { return force_copy(m_flat_tree.insert_equal(force(x))); } + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const value_type& x) + { + return container_detail::force_copy( + m_flat_tree.insert_equal(container_detail::force(x))); + } - //! Effects: Inserts a new value move-constructed from x and returns - //! the iterator pointing to the newly inserted element. + //! Effects: Inserts a new value move-constructed from x and returns + //! the iterator pointing to the newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return force_copy(m_flat_tree.insert_equal(BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); } + //! Note: If an element is inserted it might invalidate elements. + iterator insert(BOOST_RV_REF(value_type) x) + { return container_detail::force_copy(m_flat_tree.insert_equal(boost::move(x))); } - //! Effects: Inserts a new value move-constructed from x and returns - //! the iterator pointing to the newly inserted element. + //! Effects: Inserts a new value move-constructed from x and returns + //! the iterator pointing to the newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(BOOST_MOVE_MACRO_RV_REF(impl_value_type) x) - { return force_copy(m_flat_tree.insert_equal(BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); } + //! Note: If an element is inserted it might invalidate elements. + iterator insert(BOOST_RV_REF(impl_value_type) x) + { return container_detail::force_copy(m_flat_tree.insert_equal(boost::move(x))); } //! Effects: Inserts a copy of x in the container. //! p is a hint pointing to where the insert should start to search. @@ -1116,26 +1261,12 @@ class flat_multimap //! is to be inserted before p) plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, const value_type& x) - { return force_copy(m_flat_tree.insert_equal(force(position), force(x))); } - - //! Effects: Inserts a value move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic search time (constant time if the value - //! is to be inserted before p) plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(value_type) x) + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, const value_type& x) { - return force_copy - (m_flat_tree.insert_equal(force(position) - , BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); + return container_detail::force_copy + (m_flat_tree.insert_equal( container_detail::force_copy(position) + , container_detail::force(x))); } //! Effects: Inserts a value move constructed from x in the container. @@ -1148,38 +1279,72 @@ class flat_multimap //! is to be inserted before p) plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(impl_value_type) x) + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) { - return force_copy( - m_flat_tree.insert_equal(force(position), BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); + return container_detail::force_copy + (m_flat_tree.insert_equal(container_detail::force_copy(position) + , boost::move(x))); } - //! Requires: i, j are not iterators into *this. + //! Effects: Inserts a value move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. //! - //! Effects: inserts each element from the range [i,j) . + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: Logarithmic search time (constant time if the value + //! is to be inserted before p) plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, BOOST_RV_REF(impl_value_type) x) + { + return container_detail::force_copy( + m_flat_tree.insert_equal(container_detail::force_copy(position), boost::move(x))); + } + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) . + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) //! search time plus N*size() insertion time. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_flat_tree.insert_equal(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: first, last are not iterators into *this. + //! + //! Requires: [first ,last) must be ordered according to the predicate. + //! + //! Effects: inserts each element from the range [first,last) if and only + //! if there is no element with key equivalent to the key of that element. This + //! function is more efficient than the normal range creation for ordered ranges. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: If an element is inserted it might invalidate elements. + template + void insert(ordered_range_t, InputIterator first, InputIterator last) + { m_flat_tree.insert_equal(ordered_range, first, last); } + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template iterator emplace(Args&&... args) - { return force_copy(m_flat_tree.emplace_equal(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); } + { return container_detail::force_copy(m_flat_tree.emplace_equal(boost::forward(args)...)); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the container. @@ -1192,55 +1357,49 @@ class flat_multimap //! is to be inserted before p) plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template iterator emplace_hint(const_iterator hint, Args&&... args) { - return force_copy(m_flat_tree.emplace_hint_equal - (force(hint), BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...)); + return container_detail::force_copy(m_flat_tree.emplace_hint_equal + (container_detail::force_copy(hint), boost::forward(args)...)); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return force_copy(m_flat_tree.emplace_equal()); } - - iterator emplace_hint(const_iterator hint) - { return force_copy(m_flat_tree.emplace_hint_equal(force(hint))); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - return force_copy(m_flat_tree.emplace_equal \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ - } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - return force_copy(m_flat_tree.emplace_hint_equal \ - (force(hint), \ - BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _))); \ - } \ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy(m_flat_tree.emplace_equal \ + (BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy(m_flat_tree.emplace_hint_equal \ + (container_detail::force_copy(hint) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Linear to the elements with keys bigger than position //! //! Note: Invalidates elements with keys //! not less than the erased element. - iterator erase(const_iterator position) - { return force_copy(m_flat_tree.erase(force(position))); } + iterator erase(const_iterator position) + { + return container_detail::force_copy( + m_flat_tree.erase(container_detail::force_copy(position))); + } //! Effects: Erases all elements in the container with key equivalent to x. //! @@ -1248,7 +1407,7 @@ class flat_multimap //! //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_flat_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -1260,14 +1419,18 @@ class flat_multimap //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. iterator erase(const_iterator first, const_iterator last) - { return force_copy(m_flat_tree.erase(force(first), force(last))); } + { + return container_detail::force_copy + (m_flat_tree.erase( container_detail::force_copy(first) + , container_detail::force_copy(last))); + } //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_flat_tree.clear(); } //! Effects: Tries to deallocate the excess of memory created @@ -1284,81 +1447,81 @@ class flat_multimap //! //! Complexity: Logarithmic. iterator find(const key_type& x) - { return force_copy(m_flat_tree.find(x)); } + { return container_detail::force_copy(m_flat_tree.find(x)); } //! Returns: An const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - const_iterator find(const key_type& x) const - { return force(m_flat_tree.find(x)); } + const_iterator find(const key_type& x) const + { return container_detail::force_copy(m_flat_tree.find(x)); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_flat_tree.count(x); } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) - {return force_copy(m_flat_tree.lower_bound(x)); } + iterator lower_bound(const key_type& x) + {return container_detail::force_copy(m_flat_tree.lower_bound(x)); } //! Returns: A const iterator pointing to the first element with key //! not less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const - { return force(m_flat_tree.lower_bound(x)); } + const_iterator lower_bound(const key_type& x) const + { return container_detail::force_copy(m_flat_tree.lower_bound(x)); } //! Returns: An iterator pointing to the first element with key not less //! than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - iterator upper_bound(const key_type& x) - {return force_copy(m_flat_tree.upper_bound(x)); } + iterator upper_bound(const key_type& x) + {return container_detail::force_copy(m_flat_tree.upper_bound(x)); } //! Returns: A const iterator pointing to the first element with key //! not less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const - { return force(m_flat_tree.upper_bound(x)); } + const_iterator upper_bound(const key_type& x) const + { return container_detail::force_copy(m_flat_tree.upper_bound(x)); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) - { return force_copy >(m_flat_tree.equal_range(x)); } + std::pair equal_range(const key_type& x) + { return container_detail::force_copy >(m_flat_tree.equal_range(x)); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const - { return force_copy >(m_flat_tree.equal_range(x)); } + std::pair + equal_range(const key_type& x) const + { return container_detail::force_copy >(m_flat_tree.equal_range(x)); } //! Effects: Number of elements for which memory has been allocated. //! capacity() is always greater than or equal to size(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type capacity() const + size_type capacity() const { return m_flat_tree.capacity(); } //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. //! If the request is successful, then capacity() is greater than or equal to //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! + //! //! Throws: If memory allocation allocation throws or T's copy constructor throws. //! //! Note: If capacity() is less than "count", iterators and references to //! to values might be invalidated. - void reserve(size_type count) + void reserve(size_type count) { m_flat_tree.reserve(count); } /// @cond @@ -1372,38 +1535,38 @@ class flat_multimap /// @endcond }; -template -inline bool operator==(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator==(const flat_multimap& x, + const flat_multimap& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator<(const flat_multimap& x, + const flat_multimap& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator!=(const flat_multimap& x, + const flat_multimap& y) { return !(x == y); } -template -inline bool operator>(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator>(const flat_multimap& x, + const flat_multimap& y) { return y < x; } -template -inline bool operator<=(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator<=(const flat_multimap& x, + const flat_multimap& y) { return !(y < x); } -template -inline bool operator>=(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator>=(const flat_multimap& x, + const flat_multimap& y) { return !(x < y); } -template -inline void swap(flat_multimap& x, flat_multimap& y) +template +inline void swap(flat_multimap& x, flat_multimap& y) { x.swap(y); } }} @@ -1420,10 +1583,10 @@ struct has_trivial_destructor_after_move< boost::container::flat_multimap::value && has_trivial_destructor::value; }; */ -} //namespace boost { +} //namespace boost { /// @endcond -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif /* BOOST_CONTAINERS_FLAT_MAP_HPP */ +#endif /* BOOST_CONTAINER_FLAT_MAP_HPP */ diff --git a/3party/boost/boost/interprocess/containers/container/flat_set.hpp b/3party/boost/boost/container/flat_set.hpp similarity index 62% rename from 3party/boost/boost/interprocess/containers/container/flat_set.hpp rename to 3party/boost/boost/container/flat_set.hpp index 7ebf4e0d40..09c95eb2f5 100644 --- a/3party/boost/boost/interprocess/containers/container/flat_set.hpp +++ b/3party/boost/boost/container/flat_set.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,23 +8,23 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_FLAT_SET_HPP -#define BOOST_CONTAINERS_FLAT_SET_HPP +#ifndef BOOST_CONTAINER_FLAT_SET_HPP +#define BOOST_CONTAINER_FLAT_SET_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include +#include -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include #include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_FLAT_TREE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP +#include +#include +#include #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { @@ -37,38 +37,46 @@ namespace container { /// @cond // Forward declarations of operators < and ==, needed for friend declaration. -template +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif class flat_set; -template -inline bool operator==(const flat_set& x, - const flat_set& y); +template +inline bool operator==(const flat_set& x, + const flat_set& y); -template -inline bool operator<(const flat_set& x, - const flat_set& y); +template +inline bool operator<(const flat_set& x, + const flat_set& y); /// @endcond -//! flat_set is a Sorted Associative Container that stores objects of type Key. -//! flat_set is a Simple Associative Container, meaning that its value type, -//! as well as its key type, is Key. It is also a Unique Associative Container, -//! meaning that no two elements are the same. -//! +//! flat_set is a Sorted Associative Container that stores objects of type Key. +//! flat_set is a Simple Associative Container, meaning that its value type, +//! as well as its key type, is Key. It is also a Unique Associative Container, +//! meaning that no two elements are the same. +//! //! flat_set is similar to std::set but it's implemented like an ordered vector. //! This means that inserting a new element into a flat_set invalidates //! previous iterators and references //! -//! Erasing an element of a flat_set invalidates iterators and references +//! Erasing an element of a flat_set invalidates iterators and references //! pointing to elements that come after (their keys are bigger) the erased element. -template -class flat_set +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif +class flat_set { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(flat_set) - typedef containers_detail::flat_tree, Pred, Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(flat_set) + typedef container_detail::flat_tree, Pred, A> tree_t; tree_t m_flat_tree; // flat tree representing flat_set - typedef typename containers_detail:: + typedef typename container_detail:: move_const_ref_type::type insert_const_ref_type; /// @endcond @@ -92,224 +100,248 @@ class flat_set typedef typename tree_t::allocator_type allocator_type; typedef typename tree_t::stored_allocator_type stored_allocator_type; - //! Effects: Constructs an empty flat_map using the specified - //! comparison object and allocator. - //! + //! Effects: Default constructs an empty flat_set. + //! //! Complexity: Constant. - explicit flat_set(const Pred& comp = Pred(), + explicit flat_set() + : m_flat_tree() + {} + + //! Effects: Constructs an empty flat_set using the specified + //! comparison object and allocator. + //! + //! Complexity: Constant. + explicit flat_set(const Pred& comp, const allocator_type& a = allocator_type()) : m_flat_tree(comp, a) {} - //! Effects: Constructs an empty map using the specified comparison object and + //! Effects: Constructs an empty set using the specified comparison object and //! allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template - flat_set(InputIterator first, InputIterator last, + flat_set(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, a) + : m_flat_tree(comp, a) { m_flat_tree.insert_unique(first, last); } - //! Effects: Constructs an empty flat_set using the specified comparison object and + //! Effects: Constructs an empty flat_set using the specified comparison object and //! allocator, and inserts elements from the ordered unique range [first ,last). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate and must be //! unique values. - //! + //! //! Complexity: Linear in N. + //! + //! Note: Non-standard extension. template - flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, + flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(ordered_range, first, last, comp, a) + : m_flat_tree(ordered_range, first, last, comp, a) {} - //! Effects: Copy constructs a map. - //! + //! Effects: Copy constructs a set. + //! //! Complexity: Linear in x.size(). - flat_set(const flat_set& x) - : m_flat_tree(x.m_flat_tree) {} + flat_set(const flat_set& x) + : m_flat_tree(x.m_flat_tree) + {} - //! Effects: Move constructs a map. Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! Effects: Move constructs a set. Constructs *this using x's resources. + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - flat_set(BOOST_MOVE_MACRO_RV_REF(flat_set) mx) - : m_flat_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(mx.m_flat_tree)) + flat_set(BOOST_RV_REF(flat_set) mx) + : m_flat_tree(boost::move(mx.m_flat_tree)) + {} + + //! Effects: Copy constructs a set using the specified allocator. + //! + //! Complexity: Linear in x.size(). + flat_set(const flat_set& x, const allocator_type &a) + : m_flat_tree(x.m_flat_tree, a) + {} + + //! Effects: Move constructs a set using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if a == mx.get_allocator(), linear otherwise + flat_set(BOOST_RV_REF(flat_set) mx, const allocator_type &a) + : m_flat_tree(boost::move(mx.m_flat_tree), a) {} //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - flat_set& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(flat_set) x) + flat_set& operator=(BOOST_COPY_ASSIGN_REF(flat_set) x) { m_flat_tree = x.m_flat_tree; return *this; } - //! Effects: Makes *this a copy of x. - //! + //! Effects: Makes *this a copy of the previous value of xx. + //! //! Complexity: Linear in x.size(). - flat_set& operator=(BOOST_MOVE_MACRO_RV_REF(flat_set) mx) - { m_flat_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(mx.m_flat_tree); return *this; } + flat_set& operator=(BOOST_RV_REF(flat_set) mx) + { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const + key_compare key_comp() const { return m_flat_tree.key_comp(); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const + value_compare value_comp() const { return m_flat_tree.key_comp(); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const { return m_flat_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return m_flat_tree.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return m_flat_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() { return m_flat_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const { return m_flat_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const { return m_flat_tree.cbegin(); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() { return m_flat_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const { return m_flat_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const + const_iterator cend() const { return m_flat_tree.cend(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() - { return m_flat_tree.rbegin(); } + reverse_iterator rbegin() + { return m_flat_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return m_flat_tree.rbegin(); } + const_reverse_iterator rbegin() const + { return m_flat_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_flat_tree.crbegin(); } + const_reverse_iterator crbegin() const + { return m_flat_tree.crbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. reverse_iterator rend() { return m_flat_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const { return m_flat_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const + const_reverse_iterator crend() const { return m_flat_tree.crend(); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_flat_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_flat_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_flat_tree.max_size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -317,44 +349,44 @@ class flat_set void swap(flat_set& x) { m_flat_tree.swap(x.m_flat_tree); } - //! Effects: Inserts x if and only if there is no element in the container + //! Effects: Inserts x if and only if there is no element in the container //! with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - std::pair insert(insert_const_ref_type x) + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(insert_const_ref_type x) { return priv_insert(x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) std::pair insert(T &x) { return this->insert(const_cast(x)); } template - std::pair insert(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + std::pair insert(const U &u, typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(u); } #endif //! Effects: Inserts a new value_type move constructed from the pair if and //! only if there is no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_flat_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(BOOST_RV_REF(value_type) x) + { return m_flat_tree.insert_unique(boost::move(x)); } - //! Effects: Inserts a copy of x in the container if and only if there is + //! Effects: Inserts a copy of x in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -364,16 +396,16 @@ class flat_set //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator p, insert_const_ref_type x) + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator p, insert_const_ref_type x) { return priv_insert(p, x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert(const_iterator position, const U &u, typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(position, u); } #endif @@ -385,43 +417,58 @@ class flat_set //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_flat_tree.insert_unique(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) + { return m_flat_tree.insert_unique(position, boost::move(x)); } - //! Requires: i, j are not iterators into *this. + //! Requires: first, last are not iterators into *this. //! - //! Effects: inserts each element from the range [i,j) if and only + //! Effects: inserts each element from the range [first,last) if and only //! if there is no element with key equivalent to the key of that element. //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) //! search time plus N*size() insertion time. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_flat_tree.insert_unique(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: first, last are not iterators into *this and + //! must be ordered according to the predicate and must be + //! unique values. + //! + //! Effects: inserts each element from the range [first,last) .This function + //! is more efficient than the normal range creation for ordered ranges. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: Non-standard extension. If an element is inserted it might invalidate elements. + template + void insert(ordered_unique_range_t, InputIterator first, InputIterator last) + { m_flat_tree.insert_unique(ordered_unique_range, first, last); } - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... if and only if there is no element in the container + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: Inserts an object x of type T constructed with + //! std::forward(args)... if and only if there is no element in the container //! with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template - iterator emplace(Args&&... args) - { return m_flat_tree.emplace_unique(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + std::pair emplace(Args&&... args) + { return m_flat_tree.emplace_unique(boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the container if and only if there is + //! std::forward(args)... in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -431,44 +478,40 @@ class flat_set //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return m_flat_tree.emplace_hint_unique(hint, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_flat_tree.emplace_hint_unique(hint, boost::forward(args)...); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return m_flat_tree.emplace_unique(); } - - iterator emplace_hint(const_iterator hint) - { return m_flat_tree.emplace_hint_unique(hint); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_flat_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_flat_tree.emplace_hint_unique(hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); }\ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_flat_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_flat_tree.emplace_hint_unique \ + (hint BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Linear to the elements with keys bigger than position //! //! Note: Invalidates elements with keys //! not less than the erased element. - iterator erase(const_iterator position) + iterator erase(const_iterator position) { return m_flat_tree.erase(position); } //! Effects: Erases all elements in the container with key equivalent to x. @@ -477,7 +520,7 @@ class flat_set //! //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_flat_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -488,7 +531,7 @@ class flat_set //! //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. - iterator erase(const_iterator first, const_iterator last) + iterator erase(const_iterator first, const_iterator last) { return m_flat_tree.erase(first, last); } //! Effects: erase(a.begin(),a.end()). @@ -496,7 +539,7 @@ class flat_set //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_flat_tree.clear(); } //! Effects: Tries to deallocate the excess of memory created @@ -512,34 +555,34 @@ class flat_set //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) + iterator find(const key_type& x) { return m_flat_tree.find(x); } //! Returns: A const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic.s - const_iterator find(const key_type& x) const + const_iterator find(const key_type& x) const { return m_flat_tree.find(x); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_flat_tree.find(x) == m_flat_tree.end() ? 0 : 1; } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) + iterator lower_bound(const key_type& x) { return m_flat_tree.lower_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const + const_iterator lower_bound(const key_type& x) const { return m_flat_tree.lower_bound(x); } //! Returns: An iterator pointing to the first element with key not less @@ -553,42 +596,42 @@ class flat_set //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const + const_iterator upper_bound(const key_type& x) const { return m_flat_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair + equal_range(const key_type& x) const { return m_flat_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair + equal_range(const key_type& x) { return m_flat_tree.equal_range(x); } //! Effects: Number of elements for which memory has been allocated. //! capacity() is always greater than or equal to size(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type capacity() const + size_type capacity() const { return m_flat_tree.capacity(); } //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. //! If the request is successful, then capacity() is greater than or equal to //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! + //! //! Throws: If memory allocation allocation throws or T's copy constructor throws. //! //! Note: If capacity() is less than "count", iterators and references to //! to values might be invalidated. - void reserve(size_type count) + void reserve(size_type count) { m_flat_tree.reserve(count); } /// @cond @@ -599,46 +642,46 @@ class flat_set friend bool operator< (const flat_set&, const flat_set&); private: - std::pair priv_insert(const T &x) + std::pair priv_insert(const T &x) { return m_flat_tree.insert_unique(x); } - iterator priv_insert(const_iterator p, const T &x) + iterator priv_insert(const_iterator p, const T &x) { return m_flat_tree.insert_unique(p, x); } /// @endcond }; -template -inline bool operator==(const flat_set& x, - const flat_set& y) +template +inline bool operator==(const flat_set& x, + const flat_set& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_set& x, - const flat_set& y) +template +inline bool operator<(const flat_set& x, + const flat_set& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_set& x, - const flat_set& y) +template +inline bool operator!=(const flat_set& x, + const flat_set& y) { return !(x == y); } -template -inline bool operator>(const flat_set& x, - const flat_set& y) +template +inline bool operator>(const flat_set& x, + const flat_set& y) { return y < x; } -template -inline bool operator<=(const flat_set& x, - const flat_set& y) +template +inline bool operator<=(const flat_set& x, + const flat_set& y) { return !(y < x); } -template -inline bool operator>=(const flat_set& x, - const flat_set& y) +template +inline bool operator>=(const flat_set& x, + const flat_set& y) { return !(x < y); } -template -inline void swap(flat_set& x, flat_set& y) +template +inline void swap(flat_set& x, flat_set& y) { x.swap(y); } /// @cond @@ -657,38 +700,46 @@ namespace container { // Forward declaration of operators < and ==, needed for friend declaration. -template +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif class flat_multiset; -template -inline bool operator==(const flat_multiset& x, - const flat_multiset& y); +template +inline bool operator==(const flat_multiset& x, + const flat_multiset& y); -template -inline bool operator<(const flat_multiset& x, - const flat_multiset& y); +template +inline bool operator<(const flat_multiset& x, + const flat_multiset& y); /// @endcond -//! flat_multiset is a Sorted Associative Container that stores objects of type Key. -//! flat_multiset is a Simple Associative Container, meaning that its value type, +//! flat_multiset is a Sorted Associative Container that stores objects of type Key. +//! flat_multiset is a Simple Associative Container, meaning that its value type, //! as well as its key type, is Key. //! flat_Multiset can store multiple copies of the same key value. -//! +//! //! flat_multiset is similar to std::multiset but it's implemented like an ordered vector. //! This means that inserting a new element into a flat_multiset invalidates //! previous iterators and references //! -//! Erasing an element of a flat_multiset invalidates iterators and references +//! Erasing an element of a flat_multiset invalidates iterators and references //! pointing to elements that come after (their keys are equal or bigger) the erased element. -template -class flat_multiset +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif +class flat_multiset { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(flat_multiset) - typedef containers_detail::flat_tree, Pred, Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(flat_multiset) + typedef container_detail::flat_tree, Pred, A> tree_t; tree_t m_flat_tree; // flat tree representing flat_multiset - typedef typename containers_detail:: + typedef typename container_detail:: move_const_ref_type::type insert_const_ref_type; /// @endcond @@ -711,8 +762,14 @@ class flat_multiset typedef typename tree_t::allocator_type allocator_type; typedef typename tree_t::stored_allocator_type stored_allocator_type; - // allocation/deallocation - explicit flat_multiset(const Pred& comp = Pred(), + //! Effects: Default constructs an empty flat_multiset. + //! + //! Complexity: Constant. + explicit flat_multiset() + : m_flat_tree() + {} + + explicit flat_multiset(const Pred& comp, const allocator_type& a = allocator_type()) : m_flat_tree(comp, a) {} @@ -720,191 +777,222 @@ class flat_multiset flat_multiset(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, a) + : m_flat_tree(comp, a) { m_flat_tree.insert_equal(first, last); } - //! Effects: Constructs an empty flat_multiset using the specified comparison object and + //! Effects: Constructs an empty flat_multiset using the specified comparison object and //! allocator, and inserts elements from the ordered range [first ,last ). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate. - //! + //! //! Complexity: Linear in N. + //! + //! Note: Non-standard extension. template flat_multiset(ordered_range_t, InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_flat_tree(ordered_range, first, last, comp, a) + : m_flat_tree(ordered_range, first, last, comp, a) {} - flat_multiset(const flat_multiset& x) - : m_flat_tree(x.m_flat_tree) {} - - flat_multiset(BOOST_MOVE_MACRO_RV_REF(flat_multiset) x) - : m_flat_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_flat_tree)) + //! Effects: Copy constructs a flat_multiset. + //! + //! Complexity: Linear in x.size(). + flat_multiset(const flat_multiset& x) + : m_flat_tree(x.m_flat_tree) {} - flat_multiset& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(flat_multiset) x) + //! Effects: Move constructs a flat_multiset. Constructs *this using x's resources. + //! + //! Complexity: Constant. + //! + //! Postcondition: x is emptied. + flat_multiset(BOOST_RV_REF(flat_multiset) mx) + : m_flat_tree(boost::move(mx.m_flat_tree)) + {} + + //! Effects: Copy constructs a flat_multiset using the specified allocator. + //! + //! Complexity: Linear in x.size(). + flat_multiset(const flat_multiset& x, const allocator_type &a) + : m_flat_tree(x.m_flat_tree, a) + {} + + //! Effects: Move constructs a flat_multiset using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if a == mx.get_allocator(), linear otherwise + flat_multiset(BOOST_RV_REF(flat_multiset) mx, const allocator_type &a) + : m_flat_tree(boost::move(mx.m_flat_tree), a) + {} + + //! Effects: Makes *this a copy of x. + //! + //! Complexity: Linear in x.size(). + flat_multiset& operator=(BOOST_COPY_ASSIGN_REF(flat_multiset) x) { m_flat_tree = x.m_flat_tree; return *this; } - flat_multiset& operator=(BOOST_MOVE_MACRO_RV_REF(flat_multiset) mx) - { m_flat_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(mx.m_flat_tree); return *this; } + //! Effects: Makes *this a copy of x. + //! + //! Complexity: Linear in x.size(). + flat_multiset& operator=(BOOST_RV_REF(flat_multiset) mx) + { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const + key_compare key_comp() const { return m_flat_tree.key_comp(); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const + value_compare value_comp() const { return m_flat_tree.key_comp(); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const { return m_flat_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return m_flat_tree.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return m_flat_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() { return m_flat_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const { return m_flat_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const { return m_flat_tree.cbegin(); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() { return m_flat_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const { return m_flat_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const + const_iterator cend() const { return m_flat_tree.cend(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() - { return m_flat_tree.rbegin(); } + reverse_iterator rbegin() + { return m_flat_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return m_flat_tree.rbegin(); } + const_reverse_iterator rbegin() const + { return m_flat_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_flat_tree.crbegin(); } + const_reverse_iterator crbegin() const + { return m_flat_tree.crbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. reverse_iterator rend() { return m_flat_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const { return m_flat_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const + const_reverse_iterator crend() const { return m_flat_tree.crend(); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_flat_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_flat_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_flat_tree.max_size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -913,33 +1001,33 @@ class flat_multiset { m_flat_tree.swap(x.m_flat_tree); } //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(insert_const_ref_type x) + //! Note: If an element is inserted it might invalidate elements. + iterator insert(insert_const_ref_type x) { return priv_insert(x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(T &x) { return this->insert(const_cast(x)); } template - iterator insert(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert(const U &u, typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(u); } #endif //! Effects: Inserts a new value_type move constructed from x - //! and returns the iterator pointing to the newly inserted element. + //! and returns the iterator pointing to the newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_flat_tree.insert_equal(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + //! Note: If an element is inserted it might invalidate elements. + iterator insert(BOOST_RV_REF(value_type) x) + { return m_flat_tree.insert_equal(boost::move(x)); } //! Effects: Inserts a copy of x in the container. //! p is a hint pointing to where the insert should start to search. @@ -950,16 +1038,17 @@ class flat_multiset //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator p, insert_const_ref_type x) + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator p, insert_const_ref_type x) { return priv_insert(p, x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert( const_iterator position, const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(position, u); } #endif @@ -972,35 +1061,49 @@ class flat_multiset //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_flat_tree.insert_equal(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) + { return m_flat_tree.insert_equal(position, boost::move(x)); } - //! Requires: i, j are not iterators into *this. + //! Requires: first, last are not iterators into *this. //! - //! Effects: inserts each element from the range [i,j) . + //! Effects: inserts each element from the range [first,last) . //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) //! search time plus N*size() insertion time. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_flat_tree.insert_equal(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: first, last are not iterators into *this and + //! must be ordered according to the predicate. + //! + //! Effects: inserts each element from the range [first,last) .This function + //! is more efficient than the normal range creation for ordered ranges. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: Non-standard extension. If an element is inserted it might invalidate elements. + template + void insert(ordered_range_t, InputIterator first, InputIterator last) + { m_flat_tree.insert_equal(ordered_range, first, last); } + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic search time plus linear insertion //! to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template iterator emplace(Args&&... args) - { return m_flat_tree.emplace_equal(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_flat_tree.emplace_equal(boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the container. @@ -1012,44 +1115,40 @@ class flat_multiset //! Complexity: Logarithmic search time (constant if x is inserted //! right before p) plus insertion linear to the elements with bigger keys than x. //! - //! Note: If an element it's inserted it might invalidate elements. + //! Note: If an element is inserted it might invalidate elements. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return m_flat_tree.emplace_hint_equal(hint, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_flat_tree.emplace_hint_equal(hint, boost::forward(args)...); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return m_flat_tree.emplace_equal(); } - - iterator emplace_hint(const_iterator hint) - { return m_flat_tree.emplace_hint_equal(hint); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_flat_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_flat_tree.emplace_hint_equal(hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_flat_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_flat_tree.emplace_hint_equal \ + (hint BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Linear to the elements with keys bigger than position //! //! Note: Invalidates elements with keys //! not less than the erased element. - iterator erase(const_iterator position) + iterator erase(const_iterator position) { return m_flat_tree.erase(position); } //! Effects: Erases all elements in the container with key equivalent to x. @@ -1058,7 +1157,7 @@ class flat_multiset //! //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_flat_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -1069,7 +1168,7 @@ class flat_multiset //! //! Complexity: Logarithmic search time plus erasure time //! linear to the elements with bigger keys. - iterator erase(const_iterator first, const_iterator last) + iterator erase(const_iterator first, const_iterator last) { return m_flat_tree.erase(first, last); } //! Effects: erase(a.begin(),a.end()). @@ -1077,7 +1176,7 @@ class flat_multiset //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_flat_tree.clear(); } //! Effects: Tries to deallocate the excess of memory created @@ -1093,34 +1192,34 @@ class flat_multiset //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) + iterator find(const key_type& x) { return m_flat_tree.find(x); } //! Returns: A const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic.s - const_iterator find(const key_type& x) const + const_iterator find(const key_type& x) const { return m_flat_tree.find(x); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_flat_tree.count(x); } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) + iterator lower_bound(const key_type& x) { return m_flat_tree.lower_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const + const_iterator lower_bound(const key_type& x) const { return m_flat_tree.lower_bound(x); } //! Returns: An iterator pointing to the first element with key not less @@ -1134,42 +1233,42 @@ class flat_multiset //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const + const_iterator upper_bound(const key_type& x) const { return m_flat_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair + equal_range(const key_type& x) const { return m_flat_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair + equal_range(const key_type& x) { return m_flat_tree.equal_range(x); } //! Effects: Number of elements for which memory has been allocated. //! capacity() is always greater than or equal to size(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type capacity() const + size_type capacity() const { return m_flat_tree.capacity(); } //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. //! If the request is successful, then capacity() is greater than or equal to //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! + //! //! Throws: If memory allocation allocation throws or T's copy constructor throws. //! //! Note: If capacity() is less than "count", iterators and references to //! to values might be invalidated. - void reserve(size_type count) + void reserve(size_type count) { m_flat_tree.reserve(count); } /// @cond @@ -1180,46 +1279,46 @@ class flat_multiset friend bool operator< (const flat_multiset&, const flat_multiset&); private: - iterator priv_insert(const T &x) + iterator priv_insert(const T &x) { return m_flat_tree.insert_equal(x); } - iterator priv_insert(const_iterator p, const T &x) + iterator priv_insert(const_iterator p, const T &x) { return m_flat_tree.insert_equal(p, x); } /// @endcond }; -template -inline bool operator==(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator==(const flat_multiset& x, + const flat_multiset& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator<(const flat_multiset& x, + const flat_multiset& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator!=(const flat_multiset& x, + const flat_multiset& y) { return !(x == y); } -template -inline bool operator>(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator>(const flat_multiset& x, + const flat_multiset& y) { return y < x; } -template -inline bool operator<=(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator<=(const flat_multiset& x, + const flat_multiset& y) { return !(y < x); } -template -inline bool operator>=(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator>=(const flat_multiset& x, + const flat_multiset& y) { return !(x < y); } -template -inline void swap(flat_multiset& x, flat_multiset& y) +template +inline void swap(flat_multiset& x, flat_multiset& y) { x.swap(y); } /// @cond @@ -1240,6 +1339,6 @@ namespace container { }} -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif /* BOOST_CONTAINERS_FLAT_SET_HPP */ +#endif /* BOOST_CONTAINER_FLAT_SET_HPP */ diff --git a/3party/boost/boost/interprocess/containers/container/list.hpp b/3party/boost/boost/container/list.hpp similarity index 71% rename from 3party/boost/boost/interprocess/containers/container/list.hpp rename to 3party/boost/boost/container/list.hpp index 1159ef15e8..c3e3562988 100644 --- a/3party/boost/boost/interprocess/containers/container/list.hpp +++ b/3party/boost/boost/container/list.hpp @@ -1,36 +1,38 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // // See http://www.boost.org/libs/container for documentation. // -#ifndef BOOST_CONTAINERS_LIST_HPP_ -#define BOOST_CONTAINERS_LIST_HPP_ +#ifndef BOOST_CONTAINER_LIST_HPP_ +#define BOOST_CONTAINER_LIST_HPP_ #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP +#include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_NODE_ALLOC_HOLDER_HPP +#include +#include -#if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) +#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) #else //Preprocessor library to emulate perfect forwarding -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP +#include #endif #include @@ -50,101 +52,84 @@ namespace container { #endif /// @cond -namespace containers_detail { +namespace container_detail { template struct list_hook { - typedef typename containers_detail::bi::make_list_base_hook - , containers_detail::bi::link_mode >::type type; + typedef typename container_detail::bi::make_list_base_hook + , container_detail::bi::link_mode >::type type; }; template struct list_node : public list_hook::type { + private: + list_node(); - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - list_node() - : m_data() - {} - - template - list_node(Args &&...args) - : m_data(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...) - {} - - #else //#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING - - list_node() - : m_data() - {} - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - list_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - : m_data(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)) \ - {} \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif//#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING - + public: + typedef typename list_hook::type hook_type; T m_data; }; template struct intrusive_list_type { - typedef typename A::value_type value_type; - typedef typename boost::pointer_to_other - ::type void_pointer; - typedef typename containers_detail::list_node + typedef boost::container::allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::value_type value_type; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type + void_pointer; + typedef typename container_detail::list_node node_type; - typedef typename containers_detail::bi::make_list + typedef typename container_detail::bi::make_list < node_type - , containers_detail::bi::base_hook::type> - , containers_detail::bi::constant_time_size - , containers_detail::bi::size_type + , container_detail::bi::base_hook::type> + , container_detail::bi::constant_time_size + , container_detail::bi::size_type + >::type container_type; typedef container_type type ; }; -} //namespace containers_detail { +} //namespace container_detail { /// @endcond //! A list is a doubly linked list. That is, it is a Sequence that supports both -//! forward and backward traversal, and (amortized) constant time insertion and -//! removal of elements at the beginning or the end, or in the middle. Lists have -//! the important property that insertion and splicing do not invalidate iterators -//! to list elements, and that even removal invalidates only the iterators that point -//! to the elements that are removed. The ordering of iterators may be changed -//! (that is, list::iterator might have a different predecessor or successor -//! after a list operation than it did before), but the iterators themselves will -//! not be invalidated or made to point to different elements unless that invalidation +//! forward and backward traversal, and (amortized) constant time insertion and +//! removal of elements at the beginning or the end, or in the middle. Lists have +//! the important property that insertion and splicing do not invalidate iterators +//! to list elements, and that even removal invalidates only the iterators that point +//! to the elements that are removed. The ordering of iterators may be changed +//! (that is, list::iterator might have a different predecessor or successor +//! after a list operation than it did before), but the iterators themselves will +//! not be invalidated or made to point to different elements unless that invalidation //! or mutation is explicit. +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template > +#else template -class list - : protected containers_detail::node_alloc_holder - ::type> +#endif +class list + : protected container_detail::node_alloc_holder + ::type> { /// @cond - typedef typename containers_detail:: - move_const_ref_type::type insert_const_ref_type; - typedef typename - containers_detail::intrusive_list_type::type Icont; + typedef typename + container_detail::intrusive_list_type::type Icont; typedef list ThisType; - typedef containers_detail::node_alloc_holder AllocHolder; + typedef container_detail::node_alloc_holder AllocHolder; typedef typename AllocHolder::NodePtr NodePtr; typedef typename AllocHolder::NodeAlloc NodeAlloc; typedef typename AllocHolder::ValAlloc ValAlloc; typedef typename AllocHolder::Node Node; - typedef containers_detail::allocator_destroyer Destroyer; + typedef container_detail::allocator_destroyer Destroyer; typedef typename AllocHolder::allocator_v1 allocator_v1; typedef typename AllocHolder::allocator_v2 allocator_v2; typedef typename AllocHolder::alloc_version alloc_version; + typedef boost::container::allocator_traits allocator_traits_type; class equal_to_value { @@ -178,27 +163,27 @@ class list public: //! The type of object, T, stored in the list - typedef T value_type; + typedef T value_type; //! Pointer to T - typedef typename A::pointer pointer; + typedef typename allocator_traits_type::pointer pointer; //! Const pointer to T - typedef typename A::const_pointer const_pointer; + typedef typename allocator_traits_type::const_pointer const_pointer; //! Reference to T - typedef typename A::reference reference; + typedef typename allocator_traits_type::reference reference; //! Const reference to T - typedef typename A::const_reference const_reference; + typedef typename allocator_traits_type::const_reference const_reference; //! An unsigned integral type - typedef typename A::size_type size_type; + typedef typename allocator_traits_type::size_type size_type; //! A signed integral type - typedef typename A::difference_type difference_type; + typedef typename allocator_traits_type::difference_type difference_type; //! The allocator type - typedef A allocator_type; - //! The stored allocator type - typedef NodeAlloc stored_allocator_type; + typedef A allocator_type; + //! Non-standard extension: the stored allocator type + typedef NodeAlloc stored_allocator_type; /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(list) + BOOST_COPYABLE_AND_MOVABLE(list) typedef difference_type list_difference_type; typedef pointer list_pointer; typedef const_pointer list_const_pointer; @@ -207,11 +192,11 @@ class list /// @endcond public: - //! Const iterator used to iterate through a list. + //! Const iterator used to iterate through a list. class const_iterator /// @cond - : public std::iterator { @@ -235,17 +220,17 @@ class list {} //Pointer like operators - const_reference operator*() const + const_reference operator*() const { return m_it->m_data; } - const_pointer operator->() const + const_pointer operator->() const { return const_pointer(&m_it->m_data); } //Increment / Decrement - const_iterator& operator++() + const_iterator& operator++() { prot_incr(); return *this; } - const_iterator operator++(int) + const_iterator operator++(int) { typename Icont::iterator tmp = m_it; ++*this; return const_iterator(tmp); } const_iterator& operator--() @@ -274,7 +259,7 @@ class list explicit iterator(typename Icont::iterator it) : const_iterator(it) {} - + typename Icont::iterator get() { return this->m_it; } @@ -291,12 +276,12 @@ class list pointer operator->() const { return pointer(&this->m_it->m_data); } //Increment / Decrement - iterator& operator++() + iterator& operator++() { this->prot_incr(); return *this; } iterator operator++(int) { typename Icont::iterator tmp = this->m_it; ++*this; return iterator(tmp); } - + iterator& operator--() { this->prot_decr(); return *this; } @@ -305,17 +290,26 @@ class list }; /// @endcond - //! Iterator used to iterate backwards through a list. + //! Iterator used to iterate backwards through a list. typedef std::reverse_iterator reverse_iterator; - //! Const iterator used to iterate backwards through a list. + //! Const iterator used to iterate backwards through a list. typedef std::reverse_iterator const_reverse_iterator; - //! Effects: Constructs a list taking the allocator as parameter. - //! - //! Throws: If allocator_type's copy constructor throws. - //! + //! Effects: Default constructs a list. + //! + //! Throws: If allocator_type's default constructor throws. + //! //! Complexity: Constant. - explicit list(const allocator_type &a = A()) + list() + : AllocHolder() + {} + + //! Effects: Constructs a list taking the allocator as parameter. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + explicit list(const allocator_type &a) : AllocHolder(a) {} @@ -324,9 +318,9 @@ class list //! //! Throws: If allocator_type's default constructor or copy constructor //! throws or T's default or copy constructor throws. - //! + //! //! Complexity: Linear to n. - list(size_type n) + explicit list(size_type n) : AllocHolder(A()) { this->resize(n); } @@ -335,7 +329,7 @@ class list //! //! Throws: If allocator_type's default constructor or copy constructor //! throws or T's default or copy constructor throws. - //! + //! //! Complexity: Linear to n. list(size_type n, const T& value, const A& a = A()) : AllocHolder(a) @@ -344,23 +338,51 @@ class list //! Effects: Copy constructs a list. //! //! Postcondition: x == *this. - //! + //! //! Throws: If allocator_type's default constructor or copy constructor throws. - //! + //! //! Complexity: Linear to the elements x contains. - list(const list& x) + list(const list& x) : AllocHolder(x) { this->insert(this->cbegin(), x.begin(), x.end()); } //! Effects: Move constructor. Moves mx's resources to *this. //! //! Throws: If allocator_type's copy constructor throws. - //! + //! //! Complexity: Constant. - list(BOOST_MOVE_MACRO_RV_REF(list) x) - : AllocHolder(BOOST_CONTAINER_MOVE_NAMESPACE::move(static_cast(x))) + list(BOOST_RV_REF(list) x) + : AllocHolder(boost::move(static_cast(x))) {} + //! Effects: Copy constructs a list using the specified allocator. + //! + //! Postcondition: x == *this. + //! + //! Throws: If allocator_type's default constructor or copy constructor throws. + //! + //! Complexity: Linear to the elements x contains. + list(const list& x, const allocator_type &a) + : AllocHolder(a) + { this->insert(this->cbegin(), x.begin(), x.end()); } + + //! Effects: Move constructor sing the specified allocator. + //! Moves mx's resources to *this. + //! + //! Throws: If allocation or value_type's copy constructor throws. + //! + //! Complexity: Constant if a == x.get_allocator(), linear otherwise. + list(BOOST_RV_REF(list) x, const allocator_type &a) + : AllocHolder(a) + { + if(this->node_alloc() == x.node_alloc()){ + this->icont().swap(x.icont()); + } + else{ + this->insert(this->cbegin(), x.begin(), x.end()); + } + } + //! Effects: Constructs a list that will use a copy of allocator a //! and inserts a copy of the range [first, last) in the list. //! @@ -383,14 +405,14 @@ class list {} //AllocHolder clears the list //! Effects: Returns a copy of the internal allocator. - //! + //! //! Throws: If allocator's copy constructor throws. - //! + //! //! Complexity: Constant. allocator_type get_allocator() const { return allocator_type(this->node_alloc()); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return this->node_alloc(); } stored_allocator_type &get_stored_allocator() @@ -405,172 +427,169 @@ class list { AllocHolder::clear(alloc_version()); } //! Effects: Returns an iterator to the first element contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. iterator begin() { return iterator(this->icont().begin()); } //! Effects: Returns a const_iterator to the first element contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator begin() const { return this->cbegin(); } //! Effects: Returns an iterator to the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. iterator end() { return iterator(this->icont().end()); } //! Effects: Returns a const_iterator to the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator end() const { return this->cend(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed list. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed list. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. reverse_iterator rbegin() { return reverse_iterator(end()); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed list. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed list. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_reverse_iterator rbegin() const { return this->crbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed list. - //! + //! of the reversed list. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. reverse_iterator rend() { return reverse_iterator(begin()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed list. - //! + //! of the reversed list. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_reverse_iterator rend() const { return this->crend(); } //! Effects: Returns a const_iterator to the first element contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator cbegin() const { return const_iterator(this->non_const_icont().begin()); } //! Effects: Returns a const_iterator to the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator cend() const { return const_iterator(this->non_const_icont().end()); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed list. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed list. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_reverse_iterator crbegin() const { return const_reverse_iterator(this->cend()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed list. - //! + //! of the reversed list. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_reverse_iterator crend() const { return const_reverse_iterator(this->cbegin()); } //! Effects: Returns true if the list contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return !this->size(); } //! Effects: Returns the number of the elements contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return this->icont().size(); } //! Effects: Returns the largest possible size of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return AllocHolder::max_size(); } - //! Effects: Inserts a copy of t in the beginning of the list. + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the beginning of the list. //! //! Throws: If memory allocation throws or //! T's copy constructor throws. //! //! Complexity: Amortized constant time. - void push_front(insert_const_ref_type x) - { this->insert(this->cbegin(), x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - void push_front(T &x) { push_front(const_cast(x)); } - - template - void push_front(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { this->insert(this->cbegin(), u); } - #endif + void push_front(const T &x); //! Effects: Constructs a new element in the beginning of the list - //! and moves the resources of t to this new element. + //! and moves the resources of mx to this new element. //! //! Throws: If memory allocation throws. //! //! Complexity: Amortized constant time. - void push_front(BOOST_MOVE_MACRO_RV_REF(T) x) - { this->insert(this->cbegin(), BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + void push_front(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) + #endif - //! Effects: Removes the last element from the list. + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the end of the list. //! - //! Throws: Nothing. + //! Throws: If memory allocation throws or + //! T's copy constructor throws. //! //! Complexity: Amortized constant time. - void push_back (insert_const_ref_type x) - { this->insert(this->cend(), x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - void push_back(T &x) { push_back(const_cast(x)); } - - template - void push_back(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { this->insert(this->cend(), u); } + void push_back(const T &x); + //! Effects: Constructs a new element in the end of the list + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_back(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) #endif //! Effects: Removes the first element from the list. @@ -578,15 +597,7 @@ class list //! Throws: Nothing. //! //! Complexity: Amortized constant time. - void push_back (BOOST_MOVE_MACRO_RV_REF(T) x) - { this->insert(this->cend(), BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } - - //! Effects: Removes the first element from the list. - //! - //! Throws: Nothing. - //! - //! Complexity: Amortized constant time. - void pop_front() + void pop_front() { this->erase(this->cbegin()); } //! Effects: Removes the last element from the list. @@ -594,51 +605,51 @@ class list //! Throws: Nothing. //! //! Complexity: Amortized constant time. - void pop_back() + void pop_back() { const_iterator tmp = this->cend(); this->erase(--tmp); } //! Requires: !empty() //! - //! Effects: Returns a reference to the first element + //! Effects: Returns a reference to the first element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reference front() + reference front() { return *this->begin(); } //! Requires: !empty() //! - //! Effects: Returns a const reference to the first element + //! Effects: Returns a const reference to the first element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reference front() const + const_reference front() const { return *this->begin(); } //! Requires: !empty() //! - //! Effects: Returns a reference to the first element + //! Effects: Returns a reference to the first element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reference back() + reference back() { return *(--this->end()); } //! Requires: !empty() //! - //! Effects: Returns a const reference to the first element + //! Effects: Returns a const reference to the first element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reference back() const + const_reference back() const { return *(--this->end()); } //! Effects: Inserts or erases elements at the end such that @@ -651,7 +662,7 @@ class list { const_iterator iend = this->cend(); size_type len = this->size(); - + if(len > new_size){ size_type to_erase = len - new_size; while(to_erase--){ @@ -674,7 +685,7 @@ class list { const_iterator iend = this->end(); size_type len = this->size(); - + if(len > new_size){ size_type to_erase = len - new_size; const_iterator ifirst; @@ -699,8 +710,6 @@ class list } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() - //! allocators are also swapped. //! //! Throws: Nothing. //! @@ -710,15 +719,23 @@ class list //! Effects: Makes *this contain the same elements as x. //! - //! Postcondition: this->size() == x.size(). *this contains a copy - //! of each of x's elements. + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. //! //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to the number of elements in x. - ThisType& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(ThisType) x) + ThisType& operator=(BOOST_COPY_ASSIGN_REF(ThisType) x) { - if (this != &x) { + if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + const NodeAlloc &x_alloc = x.node_alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + } + this->AllocHolder::copy_assign_alloc(x); this->assign(x.begin(), x.end()); } return *this; @@ -732,10 +749,26 @@ class list //! Throws: If allocator_type's copy constructor throws. //! //! Complexity: Constant. - ThisType& operator=(BOOST_MOVE_MACRO_RV_REF(ThisType) mx) + ThisType& operator=(BOOST_RV_REF(ThisType) x) { - this->clear(); - this->swap(mx); + if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + NodeAlloc &x_alloc = x.node_alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy and swap pointers + this->clear(); + this->icont() = boost::move(x.icont()); + //Move allocator if needed + this->AllocHolder::move_assign_alloc(x); + } + //If unequal allocators, then do a one by one move + else{ + typedef typename std::iterator_traits::iterator_category ItCat; + this->assign( boost::make_move_iterator(x.begin()) + , boost::make_move_iterator(x.end())); + } + } return *this; } @@ -758,45 +791,36 @@ class list //! //! Complexity: Linear to std::distance [first, last). template - void insert(const_iterator p, InpIt first, InpIt last) + void insert(const_iterator p, InpIt first, InpIt last) { - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; this->priv_insert_dispatch(p, first, last, Result()); } - //! Requires: p must be a valid iterator of *this. + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: position must be a valid iterator of *this. //! - //! Effects: Insert a copy of x before p. + //! Effects: Insert a copy of x before position. //! //! Throws: If memory allocation throws or x's copy constructor throws. //! //! Complexity: Amortized constant time. - iterator insert(const_iterator position, insert_const_ref_type x) - { return this->priv_insert(position, x); } + iterator insert(const_iterator position, const T &x); - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } - - template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return this->priv_insert(position, u); } - #endif - - //! Requires: p must be a valid iterator of *this. + //! Requires: position must be a valid iterator of *this. //! - //! Effects: Insert a new element before p with mx's resources. + //! Effects: Insert a new element before position with mx's resources. //! //! Throws: If memory allocation throws. //! //! Complexity: Amortized constant time. - iterator insert(const_iterator p, BOOST_MOVE_MACRO_RV_REF(T) x) - { - NodePtr tmp = AllocHolder::create_node(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); - return iterator(this->icont().insert(p.get(), *tmp)); - } + iterator insert(const_iterator position, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the end of the list. @@ -808,7 +832,7 @@ class list template void emplace_back(Args&&... args) { - this->emplace(this->cend(), BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + this->emplace(this->cend(), boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with @@ -821,7 +845,7 @@ class list template void emplace_front(Args&&... args) { - this->emplace(this->cbegin(), BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + this->emplace(this->cbegin(), boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with @@ -834,57 +858,40 @@ class list template iterator emplace(const_iterator p, Args&&... args) { - typename AllocHolder::Deallocator d(AllocHolder::create_node_and_deallocator()); - new ((void*)containers_detail::get_pointer(d.get())) Node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - NodePtr node = d.get(); - d.release(); - return iterator(this->icont().insert(p.get(), *node)); + NodePtr pnode(AllocHolder::create_node(boost::forward(args)...)); + return iterator(this->icont().insert(p.get(), *pnode)); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - //0 args - void emplace_back() - { this->emplace(this->cend()); } - - void emplace_front() - { this->emplace(this->cbegin()); } - - iterator emplace(const_iterator p) - { - typename AllocHolder::Deallocator d(AllocHolder::create_node_and_deallocator()); - new ((void*)containers_detail::get_pointer(d.get())) Node(); - NodePtr node = d.get(); - d.release(); - return iterator(this->icont().insert(p.get(), *node)); - } + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - this->emplace(this->cend(), BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + this->emplace(this->cend() \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ } \ \ - template \ - void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { this->emplace(this->cbegin(), BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _));} \ - \ - template \ - iterator emplace(const_iterator p, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - typename AllocHolder::Deallocator d(AllocHolder::create_node_and_deallocator()); \ - new ((void*)containers_detail::get_pointer(d.get())) \ - Node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - NodePtr node = d.get(); \ - d.release(); \ - return iterator(this->icont().insert(p.get(), *node)); \ + this->emplace(this->cbegin() \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(const_iterator p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + NodePtr pnode (AllocHolder::create_node \ + (BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \ + return iterator(this->icont().insert(p.get(), *pnode)); \ } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Requires: p must be a valid iterator of *this. //! @@ -893,7 +900,7 @@ class list //! Throws: Nothing. //! //! Complexity: Amortized constant time. - iterator erase(const_iterator p) + iterator erase(const_iterator p) { return iterator(this->icont().erase_and_dispose(p.get(), Destroyer(this->node_alloc()))); } //! Requires: first and last must be valid iterator to elements in *this. @@ -911,7 +918,7 @@ class list //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to n. - void assign(size_type n, const T& val) + void assign(size_type n, const T& val) { this->priv_fill_assign(n, val); } //! Effects: Assigns the the range [first, last) to *this. @@ -921,10 +928,10 @@ class list //! //! Complexity: Linear to n. template - void assign(InpIt first, InpIt last) + void assign(InpIt first, InpIt last) { - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; this->priv_assign_dispatch(first, last, Result()); } @@ -938,106 +945,90 @@ class list //! are not equal. //! //! Complexity: Constant. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of //! this list. Iterators of this list and all the references are not invalidated. - void splice(iterator p, ThisType& x) + void splice(const_iterator p, ThisType& x) BOOST_CONTAINER_NOEXCEPT { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice(p.get(), x.icont()); - } - else{ - throw std::runtime_error("list::splice called with unequal allocators"); - } + BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); + this->icont().splice(p.get(), x.icont()); } //! Requires: p must point to an element contained //! by this list. i must point to an element contained in list x. - //! - //! Effects: Transfers the value pointed by i, from list x to this list, + //! + //! Effects: Transfers the value pointed by i, from list x to this list, //! before the the element pointed by p. No destructors or copy constructors are called. - //! If p == i or p == ++i, this function is a null operation. - //! + //! If p == i or p == ++i, this function is a null operation. + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Constant. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType &x, const_iterator i) + void splice(const_iterator p, ThisType &x, const_iterator i) BOOST_CONTAINER_NOEXCEPT { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice(p.get(), x.icont(), i.get()); - } - else{ - throw std::runtime_error("list::splice called with unequal allocators"); - } + BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); + this->icont().splice(p.get(), x.icont(), i.get()); } //! Requires: p must point to an element contained //! by this list. first and last must point to elements contained in list x. - //! - //! Effects: Transfers the range pointed by first and last from list x to this list, + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, //! before the the element pointed by p. No destructors or copy constructors are called. - //! + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Linear to the number of elements transferred. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType &x, const_iterator first, const_iterator last) + void splice(const_iterator p, ThisType &x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice(p.get(), x.icont(), first.get(), last.get()); - } - else{ - throw std::runtime_error("list::splice called with unequal allocators"); - } + BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); + this->icont().splice(p.get(), x.icont(), first.get(), last.get()); } //! Requires: p must point to an element contained //! by this list. first and last must point to elements contained in list x. //! n == std::distance(first, last) - //! - //! Effects: Transfers the range pointed by first and last from list x to this list, + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, //! before the the element pointed by p. No destructors or copy constructors are called. - //! + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Constant. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType &x, const_iterator first, const_iterator last, size_type n) + void splice(const_iterator p, ThisType &x, const_iterator first, const_iterator last, size_type n) BOOST_CONTAINER_NOEXCEPT { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice(p.get(), x.icont(), first.get(), last.get(), n); - } - else{ - throw std::runtime_error("list::splice called with unequal allocators"); - } + BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); + this->icont().splice(p.get(), x.icont(), first.get(), last.get(), n); } - //! Effects: Reverses the order of elements in the list. - //! + //! Effects: Reverses the order of elements in the list. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time. - //! + //! //! Note: Iterators and references are not invalidated void reverse() - { this->icont().reverse(); } + { this->icont().reverse(); } //! Effects: Removes all the elements that compare equal to value. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear time. It performs exactly size() comparisons for equality. - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. void remove(const T& value) @@ -1045,11 +1036,11 @@ class list //! Effects: Removes all the elements for which a specified //! predicate is satisfied. - //! + //! //! Throws: If pred throws. - //! + //! //! Complexity: Linear time. It performs exactly size() calls to the predicate. - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. template @@ -1059,25 +1050,25 @@ class list this->icont().remove_and_dispose_if(Predicate(pred), Destroyer(this->node_alloc())); } - //! Effects: Removes adjacent duplicate elements or adjacent + //! Effects: Removes adjacent duplicate elements or adjacent //! elements that are equal from the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear time (size()-1 comparisons calls to pred()). - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. void unique() { this->unique(value_equal()); } - //! Effects: Removes adjacent duplicate elements or adjacent + //! Effects: Removes adjacent duplicate elements or adjacent //! elements that satisfy some binary predicate from the list. - //! + //! //! Throws: If pred throws. - //! + //! //! Complexity: Linear time (size()-1 comparisons equality comparisons). - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. template @@ -1087,15 +1078,15 @@ class list this->icont().unique_and_dispose(Predicate(binary_pred), Destroyer(this->node_alloc())); } - //! Requires: The lists x and *this must be distinct. + //! Requires: The lists x and *this must be distinct. //! //! Effects: This function removes all of x's elements and inserts them - //! in order into *this according to std::less. The merge is stable; - //! that is, if an element from *this is equivalent to one from x, then the element - //! from *this will precede the one from x. - //! + //! in order into *this according to std::less. The merge is stable; + //! that is, if an element from *this is equivalent to one from x, then the element + //! from *this will precede the one from x. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time: it performs at most //! size() + x.size() - 1 comparisons. void merge(list& x) @@ -1103,17 +1094,17 @@ class list //! Requires: p must be a comparison function that induces a strict weak //! ordering and both *this and x must be sorted according to that ordering - //! The lists x and *this must be distinct. - //! + //! The lists x and *this must be distinct. + //! //! Effects: This function removes all of x's elements and inserts them - //! in order into *this. The merge is stable; that is, if an element from *this is - //! equivalent to one from x, then the element from *this will precede the one from x. - //! + //! in order into *this. The merge is stable; that is, if an element from *this is + //! equivalent to one from x, then the element from *this will precede the one from x. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time: it performs at most //! size() + x.size() - 1 comparisons. - //! + //! //! Note: Iterators and references to *this are not invalidated. template void merge(list &x, StrictWeakOrdering comp) @@ -1127,25 +1118,25 @@ class list } } - //! Effects: This function sorts the list *this according to std::less. + //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. //! //! Throws: Nothing. //! //! Notes: Iterators and references are not invalidated. - //! + //! //! Complexity: The number of comparisons is approximately N log N, where N //! is the list's size. void sort() { this->sort(value_less()); } - //! Effects: This function sorts the list *this according to std::less. + //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. - //! + //! //! Throws: Nothing. //! //! Notes: Iterators and references are not invalidated. - //! + //! //! Complexity: The number of comparisons is approximately N log N, where N //! is the list's size. template @@ -1160,12 +1151,30 @@ class list /// @cond private: - iterator priv_insert(const_iterator p, const T &x) + iterator priv_insert(const_iterator p, const T &x) { NodePtr tmp = AllocHolder::create_node(x); return iterator(this->icont().insert(p.get(), *tmp)); } + iterator priv_insert(const_iterator p, BOOST_RV_REF(T) x) + { + NodePtr tmp = AllocHolder::create_node(boost::move(x)); + return iterator(this->icont().insert(p.get(), *tmp)); + } + + void priv_push_back (const T &x) + { this->insert(this->cend(), x); } + + void priv_push_back (BOOST_RV_REF(T) x) + { this->insert(this->cend(), boost::move(x)); } + + void priv_push_front (const T &x) + { this->insert(this->cbegin(), x); } + + void priv_push_front (BOOST_RV_REF(T) x) + { this->insert(this->cbegin(), boost::move(x)); } + //Iterator range version template void priv_create_and_insert_nodes @@ -1238,14 +1247,14 @@ class list template void priv_insert_dispatch(const_iterator p, InputIter first, InputIter last, - containers_detail::false_) + container_detail::false_) { this->priv_create_and_insert_nodes(p, first, last); } template - void priv_insert_dispatch(const_iterator p, Integer n, Integer x, containers_detail::true_) + void priv_insert_dispatch(const_iterator p, Integer n, Integer x, container_detail::true_) { this->insert(p, (size_type)n, x); } - void priv_fill_assign(size_type n, const T& val) + void priv_fill_assign(size_type n, const T& val) { iterator i = this->begin(), iend = this->end(); @@ -1260,11 +1269,11 @@ class list } template - void priv_assign_dispatch(Integer n, Integer val, containers_detail::true_) + void priv_assign_dispatch(Integer n, Integer val, container_detail::true_) { this->priv_fill_assign((size_type) n, (T) val); } template - void priv_assign_dispatch(InputIter first2, InputIter last2, containers_detail::false_) + void priv_assign_dispatch(InputIter first2, InputIter last2, container_detail::false_) { iterator first1 = this->begin(); iterator last1 = this->end(); @@ -1319,25 +1328,25 @@ inline bool operator<(const list& x, } template -inline bool operator!=(const list& x, const list& y) +inline bool operator!=(const list& x, const list& y) { return !(x == y); } template -inline bool operator>(const list& x, const list& y) +inline bool operator>(const list& x, const list& y) { return y < x; } template -inline bool operator<=(const list& x, const list& y) +inline bool operator<=(const list& x, const list& y) { return !(y < x); } template -inline bool operator>=(const list& x, const list& y) +inline bool operator>=(const list& x, const list& y) { return !(x < y); } @@ -1366,6 +1375,6 @@ namespace container { }} -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif // BOOST_CONTAINERS_LIST_HPP_ +#endif // BOOST_CONTAINER_LIST_HPP_ diff --git a/3party/boost/boost/interprocess/containers/container/map.hpp b/3party/boost/boost/container/map.hpp similarity index 60% rename from 3party/boost/boost/interprocess/containers/container/map.hpp rename to 3party/boost/boost/container/map.hpp index 4e6f9384fa..91cbd35429 100644 --- a/3party/boost/boost/interprocess/containers/container/map.hpp +++ b/3party/boost/boost/container/map.hpp @@ -1,67 +1,40 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// -// -// This file comes from SGI's stl_map/stl_multimap files. Modified by Ion Gaztanaga. -// Renaming, isolating and porting to generic algorithms. Pointer typedef -// set to allocator::pointer to allow placing it in shared memory. -// -/////////////////////////////////////////////////////////////////////////////// -/* - * - * Copyright (c) 1994 - * Hewlett-Packard Company - * - * Permission to use, copy, modify, distribute and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. Hewlett-Packard Company makes no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied warranty. - * - * - * Copyright (c) 1996 - * Silicon Graphics Computer Systems, Inc. - * - * Permission to use, copy, modify, distribute and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. Silicon Graphics makes no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied warranty. - * - */ -#ifndef BOOST_CONTAINERS_MAP_HPP -#define BOOST_CONTAINERS_MAP_HPP +#ifndef BOOST_CONTAINER_MAP_HPP +#define BOOST_CONTAINER_MAP_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include +#include -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include #include #include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_TREE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP +#include +#include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_PAIR_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP +#include +#include +#include +#include +#include +#include +#include +#include + #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { @@ -73,39 +46,44 @@ namespace container { /// @cond // Forward declarations of operators == and <, needed for friend declarations. -template -inline bool operator==(const map& x, - const map& y); +template +inline bool operator==(const map& x, + const map& y); -template -inline bool operator<(const map& x, - const map& y); +template +inline bool operator<(const map& x, + const map& y); /// @endcond -//! A map is a kind of associative container that supports unique keys (contains at -//! most one of each key value) and provides for fast retrieval of values of another +//! A map is a kind of associative container that supports unique keys (contains at +//! most one of each key value) and provides for fast retrieval of values of another //! type T based on the keys. The map class supports bidirectional iterators. -//! -//! A map satisfies all of the requirements of a container and of a reversible -//! container and of an associative container. For a +//! +//! A map satisfies all of the requirements of a container and of a reversible +//! container and of an associative container. For a //! map the key_type is Key and the value_type is std::pair. //! //! Pred is the ordering function for Keys (e.g. std::less). //! -//! Alloc is the allocator to allocate the value_types +//! A is the allocator to allocate the value_types //! (e.g. allocator< std::pair > ). -template -class map +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template >, class A = std::allocator > +#else +template +#endif +class map { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(map) - typedef containers_detail::rbtree, - containers_detail::select1st< std::pair >, - Pred, - Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(map) + typedef container_detail::rbtree, + container_detail::select1st< std::pair >, + Pred, + A> tree_t; tree_t m_tree; // red-black tree representing map + /// @endcond public: @@ -128,15 +106,15 @@ class map typedef typename tree_t::allocator_type allocator_type; typedef typename tree_t::stored_allocator_type stored_allocator_type; typedef std::pair nonconst_value_type; - typedef containers_detail::pair + typedef container_detail::pair nonconst_impl_value_type; /// @cond class value_compare_impl : public Pred, - public std::binary_function + public std::binary_function { - friend class map; + friend class map; protected : value_compare_impl(const Pred &c) : Pred(c) {} public: @@ -147,224 +125,288 @@ class map /// @endcond typedef value_compare_impl value_compare; - //! Effects: Constructs an empty map using the specified comparison object - //! and allocator. - //! + //! Effects: Default constructs an empty map. + //! //! Complexity: Constant. - explicit map(const Pred& comp = Pred(), + map() + : m_tree() + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } + + //! Effects: Constructs an empty map using the specified comparison object + //! and allocator. + //! + //! Complexity: Constant. + explicit map(const Pred& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) - {} + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } - //! Effects: Constructs an empty map using the specified comparison object and + //! Effects: Constructs an empty map using the specified comparison object and //! allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template map(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, true) - {} + : m_tree(first, last, comp, a, true) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } - //! Effects: Constructs an empty map using the specified comparison object and + //! Effects: Constructs an empty map using the specified comparison object and //! allocator, and inserts elements from the ordered unique range [first ,last). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate and must be //! unique values. - //! + //! //! Complexity: Linear in N. template map( ordered_unique_range_t, InputIterator first, InputIterator last , const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(ordered_range, first, last, comp, a) - {} + : m_tree(ordered_range, first, last, comp, a) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } //! Effects: Copy constructs a map. - //! + //! //! Complexity: Linear in x.size(). - map(const map& x) + map(const map& x) : m_tree(x.m_tree) - {} + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } //! Effects: Move constructs a map. Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - map(BOOST_MOVE_MACRO_RV_REF(map) x) - : m_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree)) - {} + map(BOOST_RV_REF(map) x) + : m_tree(boost::move(x.m_tree)) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } + + //! Effects: Copy constructs a map using the specified allocator. + //! + //! Complexity: Linear in x.size(). + map(const map& x, const allocator_type &a) + : m_tree(x.m_tree, a) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } + + //! Effects: Move constructs a map using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if x == x.get_allocator(), linear otherwise. + //! + //! Postcondition: x is emptied. + map(BOOST_RV_REF(map) x, const allocator_type &a) + : m_tree(boost::move(x.m_tree), a) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - map& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(map) x) + map& operator=(BOOST_COPY_ASSIGN_REF(map) x) { m_tree = x.m_tree; return *this; } //! Effects: this->swap(x.get()). - //! + //! //! Complexity: Constant. - map& operator=(BOOST_MOVE_MACRO_RV_REF(map) x) - { m_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree); return *this; } + map& operator=(BOOST_RV_REF(map) x) + { m_tree = boost::move(x.m_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const + key_compare key_comp() const { return m_tree.key_comp(); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const + value_compare value_comp() const { return value_compare(m_tree.key_comp()); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const { return m_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return m_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() { return m_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const + { return this->cbegin(); } + + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const { return m_tree.begin(); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() { return m_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const + { return this->cend(); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const { return m_tree.end(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() + reverse_iterator rbegin() { return m_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const + const_reverse_iterator rbegin() const + { return this->crbegin(); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const { return m_tree.rbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() + reverse_iterator rend() { return m_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const + { return this->crend(); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend() const { return m_tree.rend(); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_tree.max_size(); } - //! Effects: If there is no key equivalent to x in the map, inserts + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: If there is no key equivalent to x in the map, inserts //! value_type(x, T()) into the map. - //! + //! //! Returns: A reference to the mapped_type corresponding to x in *this. - //! + //! //! Complexity: Logarithmic. - T& operator[](const key_type& k) - { - //we can optimize this - iterator i = lower_bound(k); - // i->first is greater than or equivalent to k. - if (i == end() || key_comp()(k, (*i).first)){ - containers_detail::value_init v; - value_type val(k, BOOST_CONTAINER_MOVE_NAMESPACE::move(v.m_t)); - i = insert(i, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); - } - return (*i).second; - } + mapped_type& operator[](const key_type &k); - //! Effects: If there is no key equivalent to x in the map, inserts - //! value_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(x), T()) into the map (the key is move-constructed) - //! + //! Effects: If there is no key equivalent to x in the map, inserts + //! value_type(boost::move(x), T()) into the map (the key is move-constructed) + //! //! Returns: A reference to the mapped_type corresponding to x in *this. - //! + //! //! Complexity: Logarithmic. - T& operator[](BOOST_MOVE_MACRO_RV_REF(key_type) mk) - { - key_type &k = mk; - //we can optimize this - iterator i = lower_bound(k); - // i->first is greater than or equivalent to k. - if (i == end() || key_comp()(k, (*i).first)){ - value_type val(BOOST_CONTAINER_MOVE_NAMESPACE::move(k), BOOST_CONTAINER_MOVE_NAMESPACE::move(T())); - i = insert(i, BOOST_CONTAINER_MOVE_NAMESPACE::move(val)); - } - return (*i).second; - } + mapped_type& operator[](key_type &&k); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, priv_subscript) + #endif //! Returns: A reference to the element whose key is equivalent to x. //! Throws: An exception object of type out_of_range if no such element is present. @@ -391,7 +433,6 @@ class map } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -399,62 +440,62 @@ class map void swap(map& x) { m_tree.swap(x.m_tree); } - //! Effects: Inserts x if and only if there is no element in the container + //! Effects: Inserts x if and only if there is no element in the container //! with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(const value_type& x) + std::pair insert(const value_type& x) { return m_tree.insert_unique(x); } - //! Effects: Inserts a new value_type created from the pair if and only if + //! Effects: Inserts a new value_type created from the pair if and only if //! there is no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(const nonconst_value_type& x) + std::pair insert(const nonconst_value_type& x) { return m_tree.insert_unique(x); } //! Effects: Inserts a new value_type move constructed from the pair if and //! only if there is no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(nonconst_value_type) x) - { return m_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + std::pair insert(BOOST_RV_REF(nonconst_value_type) x) + { return m_tree.insert_unique(boost::move(x)); } //! Effects: Inserts a new value_type move constructed from the pair if and //! only if there is no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(nonconst_impl_value_type) x) - { return m_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + std::pair insert(BOOST_RV_REF(nonconst_impl_value_type) x) + { return m_tree.insert_unique(boost::move(x)); } - //! Effects: Move constructs a new value from x if and only if there is + //! Effects: Move constructs a new value from x if and only if there is //! no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + std::pair insert(BOOST_RV_REF(value_type) x) + { return m_tree.insert_unique(boost::move(x)); } - //! Effects: Inserts a copy of x in the container if and only if there is + //! Effects: Inserts a copy of x in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -466,7 +507,7 @@ class map iterator insert(iterator position, const value_type& x) { return m_tree.insert_unique(position, x); } - //! Effects: Move constructs a new value from x if and only if there is + //! Effects: Move constructs a new value from x if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -475,10 +516,10 @@ class map //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, BOOST_MOVE_MACRO_RV_REF(nonconst_value_type) x) - { return m_tree.insert_unique(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(iterator position, BOOST_RV_REF(nonconst_value_type) x) + { return m_tree.insert_unique(position, boost::move(x)); } - //! Effects: Move constructs a new value from x if and only if there is + //! Effects: Move constructs a new value from x if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -487,8 +528,8 @@ class map //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, BOOST_MOVE_MACRO_RV_REF(nonconst_impl_value_type) x) - { return m_tree.insert_unique(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(iterator position, BOOST_RV_REF(nonconst_impl_value_type) x) + { return m_tree.insert_unique(position, boost::move(x)); } //! Effects: Inserts a copy of x in the container. //! p is a hint pointing to where the insert should start to search. @@ -505,37 +546,38 @@ class map //! Returns: An iterator pointing to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - iterator insert(iterator position, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_tree.insert_unique(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(iterator position, BOOST_RV_REF(value_type) x) + { return m_tree.insert_unique(position, boost::move(x)); } - //! Requires: i, j are not iterators into *this. + //! Requires: first, last are not iterators into *this. //! - //! Effects: inserts each element from the range [i,j) if and only + //! Effects: inserts each element from the range [first,last) if and only //! if there is no element with key equivalent to the key of that element. //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_tree.insert_unique(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the container if and only if there is + //! Effects: Inserts an object x of type T constructed with + //! std::forward(args)... in the container if and only if there is //! no element in the container with an equivalent key. //! p is a hint pointing to where the insert should start to search. //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. template - iterator emplace(Args&&... args) - { return m_tree.emplace_unique(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + std::pair emplace(Args&&... args) + { return m_tree.emplace_unique(boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the container if and only if there is + //! std::forward(args)... in the container if and only if there is //! no element in the container with an equivalent key. //! p is a hint pointing to where the insert should start to search. //! @@ -546,38 +588,34 @@ class map //! is inserted right before p. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return m_tree.emplace_hint_unique(hint, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_tree.emplace_hint_unique(hint, boost::forward(args)...); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return m_tree.emplace_unique(); } - - iterator emplace_hint(const_iterator hint) - { return m_tree.emplace_hint_unique(hint); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_hint_unique(hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _));}\ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_hint_unique(hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Amortized constant time - iterator erase(const_iterator position) + iterator erase(const_iterator position) { return m_tree.erase(position); } //! Effects: Erases all elements in the container with key equivalent to x. @@ -585,7 +623,7 @@ class map //! Returns: Returns the number of erased elements. //! //! Complexity: log(size()) + count(k) - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -601,67 +639,67 @@ class map //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_tree.clear(); } //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) + iterator find(const key_type& x) { return m_tree.find(x); } //! Returns: A const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - const_iterator find(const key_type& x) const + const_iterator find(const key_type& x) const { return m_tree.find(x); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_tree.find(x) == m_tree.end() ? 0 : 1; } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) + iterator lower_bound(const key_type& x) { return m_tree.lower_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const + const_iterator lower_bound(const key_type& x) const { return m_tree.lower_bound(x); } //! Returns: An iterator pointing to the first element with key not less //! than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - iterator upper_bound(const key_type& x) + iterator upper_bound(const key_type& x) { return m_tree.upper_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const + const_iterator upper_bound(const key_type& x) const { return m_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) + std::pair equal_range(const key_type& x) { return m_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -670,55 +708,83 @@ class map const map&); template friend bool operator< (const map&, - const map&); + const map&); + private: + mapped_type& priv_subscript(const key_type &k) + { + //we can optimize this + iterator i = lower_bound(k); + // i->first is greater than or equivalent to k. + if (i == end() || key_comp()(k, (*i).first)){ + container_detail::value_init m; + nonconst_impl_value_type val(k, boost::move(m.m_t)); + i = insert(i, boost::move(val)); + } + return (*i).second; + } + + mapped_type& priv_subscript(BOOST_RV_REF(key_type) mk) + { + key_type &k = mk; + //we can optimize this + iterator i = lower_bound(k); + // i->first is greater than or equivalent to k. + if (i == end() || key_comp()(k, (*i).first)){ + container_detail::value_init m; + nonconst_impl_value_type val(boost::move(k), boost::move(m.m_t)); + i = insert(i, boost::move(val)); + } + return (*i).second; + } + /// @endcond }; -template -inline bool operator==(const map& x, - const map& y) +template +inline bool operator==(const map& x, + const map& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const map& x, - const map& y) +template +inline bool operator<(const map& x, + const map& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const map& x, - const map& y) +template +inline bool operator!=(const map& x, + const map& y) { return !(x == y); } -template -inline bool operator>(const map& x, - const map& y) +template +inline bool operator>(const map& x, + const map& y) { return y < x; } -template -inline bool operator<=(const map& x, - const map& y) +template +inline bool operator<=(const map& x, + const map& y) { return !(y < x); } -template -inline bool operator>=(const map& x, - const map& y) +template +inline bool operator>=(const map& x, + const map& y) { return !(x < y); } -template -inline void swap(map& x, map& y) +template +inline void swap(map& x, map& y) { x.swap(y); } /// @cond // Forward declaration of operators < and ==, needed for friend declaration. -template -inline bool operator==(const multimap& x, - const multimap& y); +template +inline bool operator==(const multimap& x, + const multimap& y); -template -inline bool operator<(const multimap& x, - const multimap& y); +template +inline bool operator<(const multimap& x, + const multimap& y); } //namespace container { /* @@ -734,31 +800,37 @@ namespace container { /// @endcond -//! A multimap is a kind of associative container that supports equivalent keys -//! (possibly containing multiple copies of the same key value) and provides for +//! A multimap is a kind of associative container that supports equivalent keys +//! (possibly containing multiple copies of the same key value) and provides for //! fast retrieval of values of another type T based on the keys. The multimap class //! supports bidirectional iterators. -//! -//! A multimap satisfies all of the requirements of a container and of a reversible -//! container and of an associative container. For a -//! map the key_type is Key and the value_type is std::pair. +//! +//! A multimap satisfies all of the requirements of a container and of a reversible +//! container and of an associative container. For a +//! map the key_type is Key and the value_type is std::pair. //! //! Pred is the ordering function for Keys (e.g. std::less). //! -//! Alloc is the allocator to allocate the value_types +//! A is the allocator to allocate the value_types //!(e.g. allocator< std::pair<const Key, T> >). -template -class multimap +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template >, class A = std::allocator > +#else +template +#endif +class multimap { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(multimap) - typedef containers_detail::rbtree, - containers_detail::select1st< std::pair >, - Pred, - Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(multimap) + typedef container_detail::rbtree, + container_detail::select1st< std::pair >, + Pred, + A> tree_t; tree_t m_tree; // red-black tree representing map + typedef typename container_detail:: + move_const_ref_type::type insert_key_const_ref_type; /// @endcond public: @@ -781,15 +853,15 @@ class multimap typedef typename tree_t::allocator_type allocator_type; typedef typename tree_t::stored_allocator_type stored_allocator_type; typedef std::pair nonconst_value_type; - typedef containers_detail::pair + typedef container_detail::pair nonconst_impl_value_type; /// @cond class value_compare_impl : public Pred, - public std::binary_function + public std::binary_function { - friend class multimap; + friend class multimap; protected : value_compare_impl(const Pred &c) : Pred(c) {} public: @@ -800,190 +872,265 @@ class multimap /// @endcond typedef value_compare_impl value_compare; + //! Effects: Default constructs an empty multimap. + //! + //! Complexity: Constant. + multimap() + : m_tree() + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } + //! Effects: Constructs an empty multimap using the specified comparison //! object and allocator. - //! + //! //! Complexity: Constant. - explicit multimap(const Pred& comp = Pred(), - const allocator_type& a = allocator_type()) + explicit multimap(const Pred& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) - {} + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } //! Effects: Constructs an empty multimap using the specified comparison object //! and allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template multimap(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, false) - {} + : m_tree(first, last, comp, a, false) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } - //! Effects: Constructs an empty multimap using the specified comparison object and + //! Effects: Constructs an empty multimap using the specified comparison object and //! allocator, and inserts elements from the ordered range [first ,last). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate. - //! + //! //! Complexity: Linear in N. template multimap(ordered_range_t ordered_range, InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(ordered_range, first, last, comp, a) + : m_tree(ordered_range, first, last, comp, a) {} - //! Effects: Copy constructs a multimap. - //! + //! //! Complexity: Linear in x.size(). - multimap(const multimap& x) + multimap(const multimap& x) : m_tree(x.m_tree) - {} + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } //! Effects: Move constructs a multimap. Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - multimap(BOOST_MOVE_MACRO_RV_REF(multimap) x) - : m_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree)) - {} + multimap(BOOST_RV_REF(multimap) x) + : m_tree(boost::move(x.m_tree)) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } + + //! Effects: Copy constructs a multimap. + //! + //! Complexity: Linear in x.size(). + multimap(const multimap& x, const allocator_type &a) + : m_tree(x.m_tree, a) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } + + //! Effects: Move constructs a multimap using the specified allocator. + //! Constructs *this using x's resources. + //! Complexity: Constant if a == x.get_allocator(), linear otherwise. + //! + //! Postcondition: x is emptied. + multimap(BOOST_RV_REF(multimap) x, const allocator_type &a) + : m_tree(boost::move(x.m_tree), a) + { + //Allocator type must be std::pair + BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + } //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - multimap& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(multimap) x) + multimap& operator=(BOOST_COPY_ASSIGN_REF(multimap) x) { m_tree = x.m_tree; return *this; } //! Effects: this->swap(x.get()). - //! + //! //! Complexity: Constant. - multimap& operator=(BOOST_MOVE_MACRO_RV_REF(multimap) x) - { m_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree); return *this; } + multimap& operator=(BOOST_RV_REF(multimap) x) + { m_tree = boost::move(x.m_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const + key_compare key_comp() const { return m_tree.key_comp(); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const + value_compare value_comp() const { return value_compare(m_tree.key_comp()); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const { return m_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return m_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() { return m_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const + { return this->cbegin(); } + + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const { return m_tree.begin(); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() { return m_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const + { return this->cend(); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const { return m_tree.end(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() + reverse_iterator rbegin() { return m_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const + const_reverse_iterator rbegin() const + { return this->crbegin(); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const { return m_tree.rbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() + reverse_iterator rend() { return m_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const + { return this->crend(); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend() const { return m_tree.rend(); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_tree.max_size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -992,32 +1139,32 @@ class multimap { m_tree.swap(x.m_tree); } //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic. - iterator insert(const value_type& x) + iterator insert(const value_type& x) { return m_tree.insert_equal(x); } - //! Effects: Inserts a new value constructed from x and returns - //! the iterator pointing to the newly inserted element. + //! Effects: Inserts a new value constructed from x and returns + //! the iterator pointing to the newly inserted element. //! //! Complexity: Logarithmic. - iterator insert(const nonconst_value_type& x) + iterator insert(const nonconst_value_type& x) { return m_tree.insert_equal(x); } - //! Effects: Inserts a new value move-constructed from x and returns - //! the iterator pointing to the newly inserted element. + //! Effects: Inserts a new value move-constructed from x and returns + //! the iterator pointing to the newly inserted element. //! //! Complexity: Logarithmic. - iterator insert(BOOST_MOVE_MACRO_RV_REF(nonconst_value_type) x) - { return m_tree.insert_equal(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(BOOST_RV_REF(nonconst_value_type) x) + { return m_tree.insert_equal(boost::move(x)); } - //! Effects: Inserts a new value move-constructed from x and returns - //! the iterator pointing to the newly inserted element. + //! Effects: Inserts a new value move-constructed from x and returns + //! the iterator pointing to the newly inserted element. //! //! Complexity: Logarithmic. - iterator insert(BOOST_MOVE_MACRO_RV_REF(nonconst_impl_value_type) x) - { return m_tree.insert_equal(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(BOOST_RV_REF(nonconst_impl_value_type) x) + { return m_tree.insert_equal(boost::move(x)); } //! Effects: Inserts a copy of x in the container. //! p is a hint pointing to where the insert should start to search. @@ -1049,8 +1196,8 @@ class multimap //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, BOOST_MOVE_MACRO_RV_REF(nonconst_value_type) x) - { return m_tree.insert_equal(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(iterator position, BOOST_RV_REF(nonconst_value_type) x) + { return m_tree.insert_equal(position, boost::move(x)); } //! Effects: Inserts a new value move constructed from x in the container. //! p is a hint pointing to where the insert should start to search. @@ -1060,19 +1207,19 @@ class multimap //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, BOOST_MOVE_MACRO_RV_REF(nonconst_impl_value_type) x) - { return m_tree.insert_equal(position, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(iterator position, BOOST_RV_REF(nonconst_impl_value_type) x) + { return m_tree.insert_equal(position, boost::move(x)); } - //! Requires: i, j are not iterators into *this. + //! Requires: first, last are not iterators into *this. //! - //! Effects: inserts each element from the range [i,j) . + //! Effects: inserts each element from the range [first,last) . //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_tree.insert_equal(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the container. @@ -1085,7 +1232,7 @@ class multimap //! is inserted right before p. template iterator emplace(Args&&... args) - { return m_tree.emplace_equal(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_tree.emplace_equal(boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the container. @@ -1098,38 +1245,34 @@ class multimap //! is inserted right before p. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return m_tree.emplace_hint_equal(hint, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_tree.emplace_hint_equal(hint, boost::forward(args)...); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return m_tree.emplace_equal(); } - - iterator emplace_hint(const_iterator hint) - { return m_tree.emplace_hint_equal(hint); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_hint_equal(hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); }\ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_hint_equal(hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Amortized constant time - iterator erase(const_iterator position) + iterator erase(const_iterator position) { return m_tree.erase(position); } //! Effects: Erases all elements in the container with key equivalent to x. @@ -1137,7 +1280,7 @@ class multimap //! Returns: Returns the number of erased elements. //! //! Complexity: log(size()) + count(k) - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -1153,68 +1296,68 @@ class multimap //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_tree.clear(); } //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) + iterator find(const key_type& x) { return m_tree.find(x); } //! Returns: A const iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - const_iterator find(const key_type& x) const + const_iterator find(const key_type& x) const { return m_tree.find(x); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_tree.count(x); } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) + iterator lower_bound(const key_type& x) {return m_tree.lower_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const + const_iterator lower_bound(const key_type& x) const { return m_tree.lower_bound(x); } //! Returns: An iterator pointing to the first element with key not less //! than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - iterator upper_bound(const key_type& x) + iterator upper_bound(const key_type& x) { return m_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) + std::pair equal_range(const key_type& x) { return m_tree.equal_range(x); } //! Returns: A const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const + const_iterator upper_bound(const key_type& x) const { return m_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair + equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -1228,38 +1371,38 @@ class multimap /// @endcond }; -template -inline bool operator==(const multimap& x, - const multimap& y) +template +inline bool operator==(const multimap& x, + const multimap& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const multimap& x, - const multimap& y) +template +inline bool operator<(const multimap& x, + const multimap& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const multimap& x, - const multimap& y) +template +inline bool operator!=(const multimap& x, + const multimap& y) { return !(x == y); } -template -inline bool operator>(const multimap& x, - const multimap& y) +template +inline bool operator>(const multimap& x, + const multimap& y) { return y < x; } -template -inline bool operator<=(const multimap& x, - const multimap& y) +template +inline bool operator<=(const multimap& x, + const multimap& y) { return !(y < x); } -template -inline bool operator>=(const multimap& x, - const multimap& y) +template +inline bool operator>=(const multimap& x, + const multimap& y) { return !(x < y); } -template -inline void swap(multimap& x, multimap& y) +template +inline void swap(multimap& x, multimap& y) { x.swap(y); } /// @cond @@ -1280,7 +1423,7 @@ namespace container { }} -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif /* BOOST_CONTAINERS_MAP_HPP */ +#endif /* BOOST_CONTAINER_MAP_HPP */ diff --git a/3party/boost/boost/container/scoped_allocator.hpp b/3party/boost/boost/container/scoped_allocator.hpp new file mode 100644 index 0000000000..7da71bdf81 --- /dev/null +++ b/3party/boost/boost/container/scoped_allocator.hpp @@ -0,0 +1,1466 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Pablo Halpern 2009. 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) +// +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP +#define BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP + +#if (defined MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost { namespace container { + +//! Remark: if a specialization is derived from true_type, indicates that T may be constructed +//! with an allocator as its last constructor argument. Ideally, all constructors of T (including the +//! copy and move constructors) should have a variant that accepts a final argument of +//! allocator_type. +//! +//! Requires: if a specialization is derived from true_type, T must have a nested type, +//! allocator_type and at least one constructor for which allocator_type is the last +//! parameter. If not all constructors of T can be called with a final allocator_type argument, +//! and if T is used in a context where a container must call such a constructor, then the program is +//! ill-formed. +//! +//! [Example: +//! template > +//! class Z { +//! public: +//! typedef A allocator_type; +//! +//! // Default constructor with optional allocator suffix +//! Z(const allocator_type& a = allocator_type()); +//! +//! // Copy constructor and allocator-extended copy constructor +//! Z(const Z& zz); +//! Z(const Z& zz, const allocator_type& a); +//! }; +//! +//! // Specialize trait for class template Z +//! template > +//! struct constructible_with_allocator_suffix > +//! : ::boost::true_type { }; +//! -- end example] +//! +//! Note: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)" +//! (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as +//! in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments. +//! Applications aiming portability with several compilers should always define this trait. +//! +//! In conforming C++11 compilers or compilers supporting SFINAE expressions +//! (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used +//! to detect if a type should be constructed with suffix or prefix allocator arguments. +template +struct constructible_with_allocator_suffix + : ::boost::false_type +{}; + +//! Remark: if a specialization is derived from true_type, indicates that T may be constructed +//! with allocator_arg and T::allocator_type as its first two constructor arguments. +//! Ideally, all constructors of T (including the copy and move constructors) should have a variant +//! that accepts these two initial arguments. +//! +//! Requires: if a specialization is derived from true_type, T must have a nested type, +//! allocator_type and at least one constructor for which allocator_arg_t is the first +//! parameter and allocator_type is the second parameter. If not all constructors of T can be +//! called with these initial arguments, and if T is used in a context where a container must call such +//! a constructor, then the program is ill-formed. +//! +//! [Example: +//! template > +//! class Y { +//! public: +//! typedef A allocator_type; +//! +//! // Default constructor with and allocator-extended default constructor +//! Y(); +//! Y(allocator_arg_t, const allocator_type& a); +//! +//! // Copy constructor and allocator-extended copy constructor +//! Y(const Y& yy); +//! Y(allocator_arg_t, const allocator_type& a, const Y& yy); +//! +//! // Variadic constructor and allocator-extended variadic constructor +//! template Y(Args&& args...); +//! template +//! Y(allocator_arg_t, const allocator_type& a, Args&&... args); +//! }; +//! +//! // Specialize trait for class template Y +//! template > +//! struct constructible_with_allocator_prefix > +//! : ::boost::true_type { }; +//! +//! -- end example] +//! +//! Note: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)" +//! (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as +//! in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments. +//! Applications aiming portability with several compilers should always define this trait. +//! +//! In conforming C++11 compilers or compilers supporting SFINAE expressions +//! (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used +//! to detect if a type should be constructed with suffix or prefix allocator arguments. +template +struct constructible_with_allocator_prefix + : ::boost::false_type +{}; + +///@cond + +namespace container_detail { + +template +struct uses_allocator_imp +{ + // Use SFINAE (Substitution Failure Is Not An Error) to detect the + // presence of an 'allocator_type' nested type convertilble from Alloc. + + private: + // Match this function if TypeT::allocator_type exists and is + // implicitly convertible from Alloc + template + static char test(int, typename U::allocator_type); + + // Match this function if TypeT::allocator_type does not exist or is + // not convertible from Alloc. + template + static int test(LowPriorityConversion, LowPriorityConversion); + + static Alloc alloc; // Declared but not defined + + public: + enum { value = sizeof(test(0, alloc)) == sizeof(char) }; +}; + +} //namespace container_detail { + +///@endcond + +//! Remark: Automatically detects if T has a nested allocator_type that is convertible from +//! Alloc. Meets the BinaryTypeTrait requirements ([meta.rqmts] 20.4.1). A program may +//! specialize this type to derive from true_type for a T of user-defined type if T does not +//! have a nested allocator_type but is nonetheless constructible using the specified Alloc. +//! +//! Result: derived from true_type if Convertible and +//! derived from false_type otherwise. +template +struct uses_allocator + : boost::integral_constant::value> +{}; + +///@cond + +namespace container_detail { + +template +struct is_scoped_allocator_imp +{ + template + static char test(int, typename T::outer_allocator_type*); + + template + static int test(LowPriorityConversion, void*); + + static const bool value = (sizeof(char) == sizeof(test(0, 0))); +}; + +template::value > +struct outermost_allocator_type_impl +{ + typedef typename MaybeScopedAlloc::outer_allocator_type outer_type; + typedef typename outermost_allocator_type_impl::type type; +}; + +template +struct outermost_allocator_type_impl +{ + typedef MaybeScopedAlloc type; +}; + +template::value > +struct outermost_allocator_imp +{ + typedef MaybeScopedAlloc type; + + static type &get(MaybeScopedAlloc &a) + { return a; } + + static const type &get(const MaybeScopedAlloc &a) + { return a; } +}; + +template +struct outermost_allocator_imp +{ + typedef typename MaybeScopedAlloc::outer_allocator_type outer_type; + typedef typename outermost_allocator_type_impl::type type; + + static type &get(MaybeScopedAlloc &a) + { return outermost_allocator_imp::get(a.outer_allocator()); } + + static const type &get(const MaybeScopedAlloc &a) + { return outermost_allocator_imp::get(a.outer_allocator()); } +}; + +} //namespace container_detail { + +template +struct is_scoped_allocator + : boost::integral_constant::value> +{}; + +template +struct outermost_allocator + : container_detail::outermost_allocator_imp +{}; + +template +typename container_detail::outermost_allocator_imp::type & + get_outermost_allocator(Alloc &a) +{ return container_detail::outermost_allocator_imp::get(a); } + +template +const typename container_detail::outermost_allocator_imp::type & + get_outermost_allocator(const Alloc &a) +{ return container_detail::outermost_allocator_imp::get(a); } + +namespace container_detail { + +// Check if we can detect is_convertible using advanced SFINAE expressions +#if !defined(BOOST_NO_SFINAE_EXPR) + + //! Code inspired by Mathias Gaunard's is_convertible.cpp found in the Boost mailing list + //! http://boost.2283326.n4.nabble.com/type-traits-is-constructible-when-decltype-is-supported-td3575452.html + //! Thanks Mathias! + + //With variadic templates, we need a single class to implement the trait + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + template + struct is_constructible_impl + { + typedef char yes_type; + struct no_type + { char padding[2]; }; + + template + struct dummy; + + template + static yes_type test(dummy()...))>*); + + template + static no_type test(...); + + static const bool value = sizeof(test(0)) == sizeof(yes_type); + }; + + template + struct is_constructible + : boost::integral_constant::value> + {}; + + template + struct is_constructible_with_allocator_prefix + : is_constructible + {}; + + #else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + //Without variadic templates, we need to use de preprocessor to generate + //some specializations. + + #define BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS \ + BOOST_PP_ADD(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, 3) + //! + + //Generate N+1 template parameters so that we can specialize N + template + struct is_constructible_impl; + + //Generate N specializations, from 0 to + //BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS parameters + #define BOOST_PP_LOCAL_MACRO(n) \ + template \ + struct is_constructible_impl \ + \ + { \ + typedef char yes_type; \ + struct no_type \ + { char padding[2]; }; \ + \ + template \ + struct dummy; \ + \ + template \ + static yes_type test(dummy*); \ + \ + template \ + static no_type test(...); \ + \ + static const bool value = sizeof(test(0)) == sizeof(yes_type); \ + }; \ + //! + + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + //Finally just inherit from the implementation to define he trait + template< class T + BOOST_PP_ENUM_TRAILING( BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS + , BOOST_CONTAINER_PP_TEMPLATE_PARAM_WITH_DEFAULT + , void) + > + struct is_constructible + : boost::integral_constant + < bool + , is_constructible_impl + < T + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS, P) + , void>::value + > + {}; + + //Finally just inherit from the implementation to define he trait + template + struct is_constructible_with_allocator_prefix + : is_constructible + < T, allocator_arg_t, InnerAlloc + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS, 2), P) + > + {}; +/* + template + struct is_constructible_with_allocator_suffix + : is_constructible + < T + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_CONTAINER_MAX_IS_CONSTRUCTIBLE_PARAMETERS, 1), P) + , InnerAlloc + > + {};*/ + + #endif // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +#else // #if !defined(BOOST_NO_SFINAE_EXPR) + + //Without advanced SFINAE expressions, we can't use is_constructible + //so backup to constructible_with_allocator_xxx + + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + template < class T, class InnerAlloc, class ...Args> + struct is_constructible_with_allocator_prefix + : constructible_with_allocator_prefix + {}; +/* + template < class T, class InnerAlloc, class ...Args> + struct is_constructible_with_allocator_suffix + : constructible_with_allocator_suffix + {};*/ + + #else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + template < class T + , class InnerAlloc + BOOST_PP_ENUM_TRAILING( BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS + , BOOST_CONTAINER_PP_TEMPLATE_PARAM_WITH_DEFAULT + , void) + > + struct is_constructible_with_allocator_prefix + : constructible_with_allocator_prefix + {}; +/* + template < class T + , class InnerAlloc + BOOST_PP_ENUM_TRAILING( BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS + , BOOST_CONTAINER_PP_TEMPLATE_PARAM_WITH_DEFAULT + , void) + > + struct is_constructible_with_allocator_suffix + : constructible_with_allocator_suffix + {};*/ + + #endif // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +#endif // #if !defined(BOOST_NO_SFINAE_EXPR) + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +template < typename OutermostAlloc + , typename InnerAlloc + , typename T + , class ...Args + > +inline void dispatch_allocator_prefix_suffix + ( boost::true_type use_alloc_prefix, OutermostAlloc& outermost_alloc + , InnerAlloc& inner_alloc, T* p, BOOST_FWD_REF(Args) ...args) +{ + (void)use_alloc_prefix; + allocator_traits::construct + ( outermost_alloc, p, allocator_arg, inner_alloc, ::boost::forward(args)...); +} + +template < typename OutermostAlloc + , typename InnerAlloc + , typename T + , class ...Args + > +inline void dispatch_allocator_prefix_suffix + ( boost::false_type use_alloc_prefix, OutermostAlloc& outermost_alloc + , InnerAlloc &inner_alloc, T* p, BOOST_FWD_REF(Args)...args) +{ + (void)use_alloc_prefix; + allocator_traits::construct + (outermost_alloc, p, ::boost::forward(args)..., inner_alloc); +} + +template < typename OutermostAlloc + , typename InnerAlloc + , typename T + , class ...Args + > +inline void dispatch_uses_allocator + ( boost::true_type uses_allocator, OutermostAlloc& outermost_alloc + , InnerAlloc& inner_alloc, T* p, BOOST_FWD_REF(Args)...args) +{ + (void)uses_allocator; + //BOOST_STATIC_ASSERT((is_constructible_with_allocator_prefix::value || + // is_constructible_with_allocator_suffix::value )); + dispatch_allocator_prefix_suffix + ( is_constructible_with_allocator_prefix() + , outermost_alloc, inner_alloc, p, ::boost::forward(args)...); +} + +template < typename OutermostAlloc + , typename InnerAlloc + , typename T + , class ...Args + > +inline void dispatch_uses_allocator + ( boost::false_type uses_allocator, OutermostAlloc & outermost_alloc + , InnerAlloc & inner_alloc + ,T* p, BOOST_FWD_REF(Args)...args) +{ + (void)uses_allocator; (void)inner_alloc; + allocator_traits::construct + (outermost_alloc, p, ::boost::forward(args)...); +} + +#else //#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +#define BOOST_PP_LOCAL_MACRO(n) \ +template < typename OutermostAlloc \ + , typename InnerAlloc \ + , typename T \ + BOOST_PP_ENUM_TRAILING_PARAMS(n, class P) \ + > \ +inline void dispatch_allocator_prefix_suffix( \ + boost::true_type use_alloc_prefix, \ + OutermostAlloc& outermost_alloc, \ + InnerAlloc& inner_alloc, \ + T* p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ +{ \ + (void)use_alloc_prefix, \ + allocator_traits::construct \ + (outermost_alloc, p, allocator_arg, inner_alloc \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ +} \ + \ +template < typename OutermostAlloc \ + , typename InnerAlloc \ + , typename T \ + BOOST_PP_ENUM_TRAILING_PARAMS(n, class P) \ + > \ +inline void dispatch_allocator_prefix_suffix( \ + boost::false_type use_alloc_prefix, \ + OutermostAlloc& outermost_alloc, \ + InnerAlloc& inner_alloc, \ + T* p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ +{ \ + (void)use_alloc_prefix; \ + allocator_traits::construct \ + (outermost_alloc, p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) \ + , inner_alloc); \ +} \ + \ +template < typename OutermostAlloc \ + , typename InnerAlloc \ + , typename T \ + BOOST_PP_ENUM_TRAILING_PARAMS(n, class P) \ + > \ +inline void dispatch_uses_allocator(boost::true_type uses_allocator, \ + OutermostAlloc& outermost_alloc, \ + InnerAlloc& inner_alloc, \ + T* p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ +{ \ + (void)uses_allocator; \ + dispatch_allocator_prefix_suffix \ + (is_constructible_with_allocator_prefix \ + < T, InnerAlloc BOOST_PP_ENUM_TRAILING_PARAMS(n, P)>() \ + , outermost_alloc, inner_alloc, p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ +} \ + \ +template < typename OutermostAlloc \ + , typename InnerAlloc \ + , typename T \ + BOOST_PP_ENUM_TRAILING_PARAMS(n, class P) \ + > \ +inline void dispatch_uses_allocator(boost::false_type uses_allocator \ + ,OutermostAlloc & outermost_alloc \ + ,InnerAlloc & inner_alloc \ + ,T* p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ +{ \ + (void)uses_allocator; (void)inner_alloc; \ + allocator_traits::construct \ + (outermost_alloc, p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ +} \ +//! +#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) +#include BOOST_PP_LOCAL_ITERATE() + +#endif //#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +template +class scoped_allocator_adaptor_base + : public OuterAlloc +{ + typedef allocator_traits outer_traits_type; + BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor_base) + + public: + template + struct rebind_base + { + typedef scoped_allocator_adaptor_base other; + }; + + typedef OuterAlloc outer_allocator_type; + typedef scoped_allocator_adaptor inner_allocator_type; + typedef boost::integral_constant< + bool, + outer_traits_type::propagate_on_container_copy_assignment::value || + inner_allocator_type::propagate_on_container_copy_assignment::value + > propagate_on_container_copy_assignment; + typedef boost::integral_constant< + bool, + outer_traits_type::propagate_on_container_move_assignment::value || + inner_allocator_type::propagate_on_container_move_assignment::value + > propagate_on_container_move_assignment; + typedef boost::integral_constant< + bool, + outer_traits_type::propagate_on_container_swap::value || + inner_allocator_type::propagate_on_container_swap::value + > propagate_on_container_swap; + + scoped_allocator_adaptor_base() + {} + + template + scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs &...args) + : outer_allocator_type(::boost::forward(outerAlloc)) + , m_inner(args...) + {} + + scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) + : outer_allocator_type(other.outer_allocator()) + , m_inner(other.inner_allocator()) + {} + + scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + : outer_allocator_type(::boost::move(other.outer_allocator())) + , m_inner(::boost::move(other.inner_allocator())) + {} + + template + scoped_allocator_adaptor_base + (const scoped_allocator_adaptor_base& other) + : outer_allocator_type(other.outer_allocator()) + , m_inner(other.inner_allocator()) + {} + + template + scoped_allocator_adaptor_base + (BOOST_RV_REF_BEG scoped_allocator_adaptor_base + BOOST_RV_REF_END other) + : outer_allocator_type(other.outer_allocator()) + , m_inner(other.inner_allocator()) + {} + + protected: + struct internal_type_t{}; + + template + scoped_allocator_adaptor_base + ( internal_type_t + , BOOST_FWD_REF(OuterA2) outerAlloc + , const inner_allocator_type &inner) + : outer_allocator_type(::boost::forward(outerAlloc)) + , m_inner(inner) + {} + + public: + + scoped_allocator_adaptor_base &operator= + (BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other) + { + outer_allocator_type::operator=(other.outer_allocator()); + m_inner = other.inner_allocator(); + return *this; + } + + scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + { + outer_allocator_type::operator=(boost::move(other.outer_allocator())); + m_inner = ::boost::move(other.inner_allocator()); + return *this; + } + + inner_allocator_type& inner_allocator() + { return m_inner; } + + inner_allocator_type const& inner_allocator() const + { return m_inner; } + + outer_allocator_type & outer_allocator() + { return static_cast(*this); } + + const outer_allocator_type &outer_allocator() const + { return static_cast(*this); } + + private: + inner_allocator_type m_inner; +}; + +#else //#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +//Let's add a dummy first template parameter to allow creating +//specializations up to maximum InnerAlloc count +template < + typename OuterAlloc + , bool Dummy + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, class Q) + > +class scoped_allocator_adaptor_base; + +//Specializations for the adaptor with InnerAlloc allocators + +#define BOOST_PP_LOCAL_MACRO(n) \ +template \ +class scoped_allocator_adaptor_base \ + : public OuterAlloc \ +{ \ + typedef allocator_traits outer_traits_type; \ + BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor_base) \ + \ + public: \ + template \ + struct rebind_base \ + { \ + typedef scoped_allocator_adaptor_base other; \ + }; \ + \ + typedef OuterAlloc outer_allocator_type; \ + typedef scoped_allocator_adaptor inner_allocator_type; \ + typedef boost::integral_constant< \ + bool, \ + outer_traits_type::propagate_on_container_copy_assignment::value || \ + inner_allocator_type::propagate_on_container_copy_assignment::value \ + > propagate_on_container_copy_assignment; \ + typedef boost::integral_constant< \ + bool, \ + outer_traits_type::propagate_on_container_move_assignment::value || \ + inner_allocator_type::propagate_on_container_move_assignment::value \ + > propagate_on_container_move_assignment; \ + typedef boost::integral_constant< \ + bool, \ + outer_traits_type::propagate_on_container_swap::value || \ + inner_allocator_type::propagate_on_container_swap::value \ + > propagate_on_container_swap; \ + \ + scoped_allocator_adaptor_base() \ + {} \ + \ + template \ + scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_CONST_REF_PARAM_LIST_Q, _)) \ + : outer_allocator_type(::boost::forward(outerAlloc)) \ + , m_inner(BOOST_PP_ENUM_PARAMS(n, q)) \ + {} \ + \ + scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) \ + : outer_allocator_type(other.outer_allocator()) \ + , m_inner(other.inner_allocator()) \ + {} \ + \ + scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) \ + : outer_allocator_type(::boost::move(other.outer_allocator())) \ + , m_inner(::boost::move(other.inner_allocator())) \ + {} \ + \ + template \ + scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) \ + : outer_allocator_type(other.outer_allocator()) \ + , m_inner(other.inner_allocator()) \ + {} \ + \ + template \ + scoped_allocator_adaptor_base \ + (BOOST_RV_REF_BEG scoped_allocator_adaptor_base BOOST_RV_REF_END other) \ + : outer_allocator_type(other.outer_allocator()) \ + , m_inner(other.inner_allocator()) \ + {} \ + \ + protected: \ + struct internal_type_t{}; \ + \ + template \ + scoped_allocator_adaptor_base \ + ( internal_type_t \ + , BOOST_FWD_REF(OuterA2) outerAlloc \ + , const inner_allocator_type &inner) \ + : outer_allocator_type(::boost::forward(outerAlloc)) \ + , m_inner(inner) \ + {} \ + \ + public: \ + scoped_allocator_adaptor_base &operator= \ + (BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other) \ + { \ + outer_allocator_type::operator=(other.outer_allocator()); \ + m_inner = other.inner_allocator(); \ + return *this; \ + } \ + \ + scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) \ + { \ + outer_allocator_type::operator=(boost::move(other.outer_allocator())); \ + m_inner = ::boost::move(other.inner_allocator()); \ + return *this; \ + } \ + \ + inner_allocator_type& inner_allocator() \ + { return m_inner; } \ + \ + inner_allocator_type const& inner_allocator() const \ + { return m_inner; } \ + \ + outer_allocator_type & outer_allocator() \ + { return static_cast(*this); } \ + \ + const outer_allocator_type &outer_allocator() const \ + { return static_cast(*this); } \ + \ + private: \ + inner_allocator_type m_inner; \ +}; \ +//! +#define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) +#include BOOST_PP_LOCAL_ITERATE() + +#endif //#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +//Specialization for adaptor without any InnerAlloc +template +class scoped_allocator_adaptor_base + < OuterAlloc + #if defined(BOOST_NO_VARIADIC_TEMPLATES) + , true + BOOST_PP_ENUM_TRAILING(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, BOOST_CONTAINER_PP_IDENTITY, nat) + #endif + > + : public OuterAlloc +{ + BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor_base) + public: + + template + struct rebind_base + { + typedef scoped_allocator_adaptor_base + ::template portable_rebind_alloc::type + #if defined(BOOST_NO_VARIADIC_TEMPLATES) + , true + BOOST_PP_ENUM_TRAILING(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, BOOST_CONTAINER_PP_IDENTITY, container_detail::nat) + #endif + > other; + }; + + typedef OuterAlloc outer_allocator_type; + typedef allocator_traits outer_traits_type; + typedef scoped_allocator_adaptor inner_allocator_type; + typedef typename outer_traits_type:: + propagate_on_container_copy_assignment propagate_on_container_copy_assignment; + typedef typename outer_traits_type:: + propagate_on_container_move_assignment propagate_on_container_move_assignment; + typedef typename outer_traits_type:: + propagate_on_container_swap propagate_on_container_swap; + + scoped_allocator_adaptor_base() + {} + + template + scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc) + : outer_allocator_type(::boost::forward(outerAlloc)) + {} + + scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) + : outer_allocator_type(other.outer_allocator()) + {} + + scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + : outer_allocator_type(::boost::move(other.outer_allocator())) + {} + + template + scoped_allocator_adaptor_base + (const scoped_allocator_adaptor_base< + OuterA2 + #if defined(BOOST_NO_VARIADIC_TEMPLATES) + , true + BOOST_PP_ENUM_TRAILING(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, BOOST_CONTAINER_PP_IDENTITY, container_detail::nat) + #endif + >& other) + : outer_allocator_type(other.outer_allocator()) + {} + + template + scoped_allocator_adaptor_base + (BOOST_RV_REF_BEG scoped_allocator_adaptor_base< + OuterA2 + #if defined(BOOST_NO_VARIADIC_TEMPLATES) + , true + BOOST_PP_ENUM_TRAILING(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, BOOST_CONTAINER_PP_IDENTITY, container_detail::nat) + #endif + > BOOST_RV_REF_END other) + : outer_allocator_type(other.outer_allocator()) + {} + + protected: + struct internal_type_t{}; + + template + scoped_allocator_adaptor_base(internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &) + : outer_allocator_type(::boost::forward(outerAlloc)) + {} + + public: + scoped_allocator_adaptor_base &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other) + { + outer_allocator_type::operator=(other.outer_allocator()); + return *this; + } + + scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + { + outer_allocator_type::operator=(boost::move(other.outer_allocator())); + return *this; + } + + inner_allocator_type& inner_allocator() + { return static_cast(*this); } + + inner_allocator_type const& inner_allocator() const + { return static_cast(*this); } + + outer_allocator_type & outer_allocator() + { return static_cast(*this); } + + const outer_allocator_type &outer_allocator() const + { return static_cast(*this); } +}; + +} //namespace container_detail { + +///@endcond + +//Scoped allocator +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST) + + //! This class is a C++03-compatible implementation of std::scoped_allocator_adaptor. + //! The class template scoped_allocator_adaptor is an allocator template that specifies + //! the memory resource (the outer allocator) to be used by a container (as any other + //! allocator does) and also specifies an inner allocator resource to be passed to + //! the constructor of every element within the container. + //! + //! This adaptor is + //! instantiated with one outer and zero or more inner allocator types. If + //! instantiated with only one allocator type, the inner allocator becomes the + //! scoped_allocator_adaptor itself, thus using the same allocator resource for the + //! container and every element within the container and, if the elements themselves + //! are containers, each of their elements recursively. If instantiated with more than + //! one allocator, the first allocator is the outer allocator for use by the container, + //! the second allocator is passed to the constructors of the container's elements, + //! and, if the elements themselves are containers, the third allocator is passed to + //! the elements' elements, and so on. If containers are nested to a depth greater + //! than the number of allocators, the last allocator is used repeatedly, as in the + //! single-allocator case, for any remaining recursions. + //! + //! [Note: The + //! scoped_allocator_adaptor is derived from the outer allocator type so it can be + //! substituted for the outer allocator type in most expressions. -end note] + //! + //! In the construct member functions, `OUTERMOST(x)` is x if x does not have + //! an `outer_allocator()` member function and + //! `OUTERMOST(x.outer_allocator())` otherwise; `OUTERMOST_ALLOC_TRAITS(x)` is + //! `allocator_traits`. + //! + //! [Note: `OUTERMOST(x)` and + //! `OUTERMOST_ALLOC_TRAITS(x)` are recursive operations. It is incumbent upon + //! the definition of `outer_allocator()` to ensure that the recursion terminates. + //! It will terminate for all instantiations of scoped_allocator_adaptor. -end note] + template + class scoped_allocator_adaptor + + #else // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST) + + template + class scoped_allocator_adaptor + + #endif // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST) + +#else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + +template +class scoped_allocator_adaptor +#endif + : public container_detail::scoped_allocator_adaptor_base + +{ + BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor) + + public: + /// @cond + typedef container_detail::scoped_allocator_adaptor_base + base_type; + typedef typename base_type::internal_type_t internal_type_t; + /// @endcond + typedef OuterAlloc outer_allocator_type; + //! Type: For exposition only + //! + typedef allocator_traits outer_traits_type; + //! Type: `scoped_allocator_adaptor` if `sizeof...(InnerAllocs)` is zero; otherwise, + //! `scoped_allocator_adaptor`. + typedef typename base_type::inner_allocator_type inner_allocator_type; + typedef typename outer_traits_type::value_type value_type; + typedef typename outer_traits_type::size_type size_type; + typedef typename outer_traits_type::difference_type difference_type; + typedef typename outer_traits_type::pointer pointer; + typedef typename outer_traits_type::const_pointer const_pointer; + typedef typename outer_traits_type::void_pointer void_pointer; + typedef typename outer_traits_type::const_void_pointer const_void_pointer; + //! Type: `true_type` if `allocator_traits::propagate_on_container_copy_assignment::value` is + //! true for any `A` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. + typedef typename base_type:: + propagate_on_container_copy_assignment propagate_on_container_copy_assignment; + //! Type: `true_type` if `allocator_traits::propagate_on_container_move_assignment::value` is + //! true for any `A` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. + typedef typename base_type:: + propagate_on_container_move_assignment propagate_on_container_move_assignment; + //! Type: `true_type` if `allocator_traits::propagate_on_container_swap::value` is true for any + //! `A` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. + typedef typename base_type:: + propagate_on_container_swap propagate_on_container_swap; + + //! Type: Rebinds scoped allocator to + //! `typedef scoped_allocator_adaptor + //! < typename outer_traits_type::template portable_rebind_alloc::type + //! , InnerAllocs... >` + template + struct rebind + { + typedef scoped_allocator_adaptor + < typename outer_traits_type::template portable_rebind_alloc::type + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , InnerAllocs... + #else + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS, Q) + #endif + > other; + }; + + //! Effects: value-initializes the OuterAlloc base class + //! and the inner allocator object. + scoped_allocator_adaptor() + {} + + ~scoped_allocator_adaptor() + {} + + //! Effects: initializes each allocator within the adaptor with + //! the corresponding allocator from other. + scoped_allocator_adaptor(const scoped_allocator_adaptor& other) + : base_type(other.base()) + {} + + //! Effects: move constructs each allocator within the adaptor with + //! the corresponding allocator from other. + scoped_allocator_adaptor(BOOST_RV_REF(scoped_allocator_adaptor) other) + : base_type(::boost::move(other.base())) + {} + + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Requires: OuterAlloc shall be constructible from OuterA2. + //! + //! Effects: initializes the OuterAlloc base class with boost::forward(outerAlloc) and inner + //! with innerAllocs...(hence recursively initializing each allocator within the adaptor with the + //! corresponding allocator from the argument list). + template + scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs & ...innerAllocs) + : base_type(::boost::forward(outerAlloc), innerAllocs...) + {} + #else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + #define BOOST_PP_LOCAL_MACRO(n) \ + template \ + scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_CONST_REF_PARAM_LIST_Q, _)) \ + : base_type(::boost::forward(outerAlloc) \ + BOOST_PP_ENUM_TRAILING_PARAMS(n, q) \ + ) \ + {} \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Requires: OuterAlloc shall be constructible from OuterA2. + //! + //! Effects: initializes each allocator within the adaptor with the corresponding allocator from other. + template + scoped_allocator_adaptor(const scoped_allocator_adaptor &other) + : base_type(other.base()) + {} + + //! Requires: OuterAlloc shall be constructible from OuterA2. + //! + //! Effects: initializes each allocator within the adaptor with the corresponding allocator + //! rvalue from other. + template + scoped_allocator_adaptor(BOOST_RV_REF_BEG scoped_allocator_adaptor BOOST_RV_REF_END other) + : base_type(::boost::move(other.base())) + {} + + scoped_allocator_adaptor &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor) other) + { + base_type::operator=(static_cast(other)); + return *this; + } + + scoped_allocator_adaptor &operator=(BOOST_RV_REF(scoped_allocator_adaptor) other) + { + base_type::operator=(boost::move(static_cast(other))); + return *this; + } + + //! Returns: + //! `static_cast(*this)`. + outer_allocator_type & outer_allocator() + { return *this; } + + //! Returns: + //! `static_cast(*this)`. + const outer_allocator_type &outer_allocator() const + { return *this; } + + //! Returns: + //! *this if `sizeof...(InnerAllocs)` is zero; otherwise, inner. + inner_allocator_type& inner_allocator() + { return base_type::inner_allocator(); } + + //! Returns: + //! *this if `sizeof...(InnerAllocs)` is zero; otherwise, inner. + inner_allocator_type const& inner_allocator() const + { return base_type::inner_allocator(); } + + //! Returns: + //! `allocator_traits::max_size(outer_allocator())`. + size_type max_size() const + { + return outer_traits_type::max_size(this->outer_allocator()); + } + + //! Effects: + //! calls `OUTERMOST_ALLOC_TRAITS(*this)::destroy(OUTERMOST(*this), p)`. + template + void destroy(T* p) + { + allocator_traits::type> + ::destroy(get_outermost_allocator(this->outer_allocator()), p); + } + + //! Returns: + //! `allocator_traits::allocate(outer_allocator(), n)`. + pointer allocate(size_type n) + { + return outer_traits_type::allocate(this->outer_allocator(), n); + } + + //! Returns: + //! `allocator_traits::allocate(outer_allocator(), n, hint)`. + pointer allocate(size_type n, const_void_pointer hint) + { + return outer_traits_type::allocate(this->outer_allocator(), n, hint); + } + + //! Effects: + //! `allocator_traits::deallocate(outer_allocator(), p, n)`. + void deallocate(pointer p, size_type n) + { + outer_traits_type::deallocate(this->outer_allocator(), p, n); + } + + //! Returns: A new scoped_allocator_adaptor object where each allocator + //! A in the adaptor is initialized from the result of calling + //! `allocator_traits::select_on_container_copy_construction()` on + //! the corresponding allocator in *this. + scoped_allocator_adaptor select_on_container_copy_construction() const + { + return scoped_allocator_adaptor + (internal_type_t() + ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator()) + ,outer_traits_type::select_on_container_copy_construction(this->inner_allocator()) + ); + } + /// @cond + base_type &base() { return *this; } + + const base_type &base() const { return *this; } + /// @endcond + + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: + //! 1) If `uses_allocator::value` is false calls + //! `OUTERMOST_ALLOC_TRAITS(*this)::construct + //! (OUTERMOST(*this), p, std::forward(args)...)`. + //! + //! 2) Otherwise, if `uses_allocator::value` is true and + //! `is_constructible::value` is true, calls + //! `OUTERMOST_ALLOC_TRAITS(*this)::construct(OUTERMOST(*this), p, allocator_arg, + //! inner_allocator(), std::forward(args)...)`. + //! + //! [Note: In compilers without advanced decltype SFINAE support, `is_constructible` can't + //! be implemented so that condition will be replaced by + //! constructible_with_allocator_prefix::value. -end note] + //! + //! 3) Otherwise, if uses_allocator::value is true and + //! `is_constructible::value` is true, calls + //! `OUTERMOST_ALLOC_TRAITS(*this)::construct(OUTERMOST(*this), p, + //! std::forward(args)..., inner_allocator())`. + //! + //! [Note: In compilers without advanced decltype SFINAE support, `is_constructible` can't be + //! implemented so that condition will be replaced by + //! `constructible_with_allocator_suffix::value`. -end note] + //! + //! 4) Otherwise, the program is ill-formed. + //! + //! [Note: An error will result if `uses_allocator` evaluates + //! to true but the specific constructor does not take an allocator. This definition prevents a silent + //! failure to pass an inner allocator to a contained element. -end note] + template < typename T, class ...Args> + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + void + #else + typename container_detail::enable_if_c::value, void>::type + #endif + construct(T* p, BOOST_FWD_REF(Args)...args) + { + container_detail::dispatch_uses_allocator + ( uses_allocator() + , get_outermost_allocator(this->outer_allocator()) + , this->inner_allocator() + , p, ::boost::forward(args)...); + } + + #else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //Disable this overload if the first argument is pair as some compilers have + //overload selection problems when the first parameter is a pair. + #define BOOST_PP_LOCAL_MACRO(n) \ + template < typename T \ + BOOST_PP_ENUM_TRAILING_PARAMS(n, class P) \ + > \ + typename container_detail::enable_if_c::value, void>::type \ + construct(T* p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + container_detail::dispatch_uses_allocator \ + ( uses_allocator() \ + , get_outermost_allocator(this->outer_allocator()) \ + , this->inner_allocator() \ + , p BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + template + void construct(std::pair* p) + { this->construct_pair(p); } + + template + void construct(container_detail::pair* p) + { this->construct_pair(p); } + + template + void construct(std::pair* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y) + { this->construct_pair(p, ::boost::forward(x), ::boost::forward(y)); } + + template + void construct(container_detail::pair* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y) + { this->construct_pair(p, ::boost::forward(x), ::boost::forward(y)); } + + template + void construct(std::pair* p, const std::pair& x) + { this->construct_pair(p, x); } + + template + void construct( container_detail::pair* p + , const container_detail::pair& x) + { this->construct_pair(p, x); } + + template + void construct( std::pair* p + , BOOST_RV_REF_BEG std::pair BOOST_RV_REF_END x) + { this->construct_pair(p, x); } + + template + void construct( container_detail::pair* p + , BOOST_RV_REF_BEG container_detail::pair BOOST_RV_REF_END x) + { this->construct_pair(p, x); } + + /// @cond + private: + template + void construct_pair(Pair* p) + { + this->construct(container_detail::addressof(p->first)); + try { + this->construct(container_detail::addressof(p->second)); + } + catch (...) { + this->destroy(container_detail::addressof(p->first)); + throw; + } + } + + template + void construct_pair(Pair* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y) + { + this->construct(container_detail::addressof(p->first), ::boost::forward(x)); + try { + this->construct(container_detail::addressof(p->second), ::boost::forward(y)); + } + catch (...) { + this->destroy(container_detail::addressof(p->first)); + throw; + } + } + + template + void construct_pair(Pair* p, const Pair2& pr) + { + this->construct(container_detail::addressof(p->first), pr.first); + try { + this->construct(container_detail::addressof(p->second), pr.second); + } + catch (...) { + this->destroy(container_detail::addressof(p->first)); + throw; + } + } + + template + void construct_pair(Pair* p, BOOST_RV_REF(Pair2) pr) + { + this->construct(container_detail::addressof(p->first), ::boost::move(pr.first)); + try { + this->construct(container_detail::addressof(p->second), ::boost::move(pr.second)); + } + catch (...) { + this->destroy(container_detail::addressof(p->first)); + throw; + } + } + + //template + //void construct(pair* p, piecewise_construct_t, tuple x, tuple y); + + private: + template + scoped_allocator_adaptor(internal_type_t, BOOST_FWD_REF(OuterA2) outer, const inner_allocator_type& inner) + : base_type(internal_type_t(), ::boost::forward(outer), inner) + {} + + /// @endcond +}; + +template +inline bool operator==( + const scoped_allocator_adaptor& a, + const scoped_allocator_adaptor& b) +{ + #if !defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + const bool has_zero_inner = sizeof...(InnerAllocs) == 0u; + #else + const bool has_zero_inner = + boost::container::container_detail::is_same + ::value; + #endif + + return a.outer_allocator() == b.outer_allocator() + && (has_zero_inner || a.inner_allocator() == b.inner_allocator()); +} + +template +inline bool operator!=( + const scoped_allocator_adaptor& a, + const scoped_allocator_adaptor& b) +{ + return ! (a == b); +} + +}} // namespace boost { namespace container { + +#include + +#endif // BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP diff --git a/3party/boost/boost/container/scoped_allocator_fwd.hpp b/3party/boost/boost/container/scoped_allocator_fwd.hpp new file mode 100644 index 0000000000..0814a50699 --- /dev/null +++ b/3party/boost/boost/container/scoped_allocator_fwd.hpp @@ -0,0 +1,83 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP +#define BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP + +#if (defined MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#if defined(BOOST_NO_VARIADIC_TEMPLATES) +#include +#include +#endif + +namespace boost { namespace container { + +///@cond + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST) + + template + class scoped_allocator_adaptor; + + #else // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST) + + template + class scoped_allocator_adaptor; + + template + class scoped_allocator_adaptor; + + #endif // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST) + + +#else // #if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +template +class scoped_allocator_adaptor; + +#endif + +///@endcond + +//! The allocator_arg_t struct is an empty structure type used as a unique type to +//! disambiguate constructor and function overloading. Specifically, several types +//! have constructors with allocator_arg_t as the first argument, immediately followed +//! by an argument of a type that satisfies the Allocator requirements +struct allocator_arg_t{}; + +//! A instance of type allocator_arg_t +//! +static const allocator_arg_t allocator_arg = allocator_arg_t(); + +template +struct constructible_with_allocator_suffix; + +template +struct constructible_with_allocator_prefix; + +template +struct uses_allocator; + +}} // namespace boost { namespace container { + +#include + +#endif // BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP diff --git a/3party/boost/boost/interprocess/containers/container/set.hpp b/3party/boost/boost/container/set.hpp similarity index 64% rename from 3party/boost/boost/interprocess/containers/container/set.hpp rename to 3party/boost/boost/container/set.hpp index 35a466b9f4..09ada20033 100644 --- a/3party/boost/boost/interprocess/containers/container/set.hpp +++ b/3party/boost/boost/container/set.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,27 +8,27 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_SET_HPP -#define BOOST_CONTAINERS_SET_HPP +#ifndef BOOST_CONTAINER_SET_HPP +#define BOOST_CONTAINER_SET_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include +#include +#include #include #include #include -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TREE_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP +#include +#include +#include +#include +#ifndef BOOST_CONTAINER_PERFECT_FORWARDING +#include #endif #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -41,32 +41,36 @@ namespace container { /// @cond // Forward declarations of operators < and ==, needed for friend declaration. -template -inline bool operator==(const set& x, - const set& y); +template +inline bool operator==(const set& x, + const set& y); -template -inline bool operator<(const set& x, - const set& y); +template +inline bool operator<(const set& x, + const set& y); /// @endcond -//! A set is a kind of associative container that supports unique keys (contains at -//! most one of each key value) and provides for fast retrieval of the keys themselves. -//! Class set supports bidirectional iterators. -//! -//! A set satisfies all of the requirements of a container and of a reversible container -//! , and of an associative container. A set also provides most operations described in +//! A set is a kind of associative container that supports unique keys (contains at +//! most one of each key value) and provides for fast retrieval of the keys themselves. +//! Class set supports bidirectional iterators. +//! +//! A set satisfies all of the requirements of a container and of a reversible container +//! , and of an associative container. A set also provides most operations described in //! for unique keys. -template -class set +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif +class set { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(set) - typedef containers_detail::rbtree, Pred, Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(set) + typedef container_detail::rbtree, Pred, A> tree_t; tree_t m_tree; // red-black tree representing set - typedef typename containers_detail:: + typedef typename container_detail:: move_const_ref_type::type insert_const_ref_type; /// @endcond @@ -90,223 +94,244 @@ class set typedef typename tree_t::allocator_type allocator_type; typedef typename tree_t::stored_allocator_type stored_allocator_type; - //! Effects: Constructs an empty set using the specified comparison object - //! and allocator. - //! + //! Effects: Default constructs an empty set. + //! //! Complexity: Constant. - explicit set(const Pred& comp = Pred(), + set() + : m_tree() + {} + + //! Effects: Constructs an empty set using the specified comparison object + //! and allocator. + //! + //! Complexity: Constant. + explicit set(const Pred& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) {} - //! Effects: Constructs an empty set using the specified comparison object and + //! Effects: Constructs an empty set using the specified comparison object and //! allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template set(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, true) + : m_tree(first, last, comp, a, true) {} - //! Effects: Constructs an empty set using the specified comparison object and + //! Effects: Constructs an empty set using the specified comparison object and //! allocator, and inserts elements from the ordered unique range [first ,last). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate and must be //! unique values. - //! + //! //! Complexity: Linear in N. template set( ordered_unique_range_t, InputIterator first, InputIterator last , const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(ordered_range, first, last, comp, a) + : m_tree(ordered_range, first, last, comp, a) {} //! Effects: Copy constructs a set. - //! + //! //! Complexity: Linear in x.size(). - set(const set& x) + set(const set& x) : m_tree(x.m_tree) {} //! Effects: Move constructs a set. Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - set(BOOST_MOVE_MACRO_RV_REF(set) x) - : m_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree)) + set(BOOST_RV_REF(set) x) + : m_tree(boost::move(x.m_tree)) + {} + + //! Effects: Copy constructs a set using the specified allocator. + //! + //! Complexity: Linear in x.size(). + set(const set& x, const allocator_type &a) + : m_tree(x.m_tree, a) + {} + + //! Effects: Move constructs a set using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if a == x.get_allocator(), linear otherwise. + set(BOOST_RV_REF(set) x, const allocator_type &a) + : m_tree(boost::move(x.m_tree), a) {} //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - set& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(set) x) + set& operator=(BOOST_COPY_ASSIGN_REF(set) x) { m_tree = x.m_tree; return *this; } //! Effects: this->swap(x.get()). - //! + //! //! Complexity: Constant. - set& operator=(BOOST_MOVE_MACRO_RV_REF(set) x) - { m_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree); return *this; } + set& operator=(BOOST_RV_REF(set) x) + { m_tree = boost::move(x.m_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const + key_compare key_comp() const { return m_tree.key_comp(); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const + value_compare value_comp() const { return m_tree.key_comp(); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const { return m_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return m_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant - iterator begin() + iterator begin() { return m_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const { return m_tree.begin(); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() { return m_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const { return m_tree.end(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() - { return m_tree.rbegin(); } + reverse_iterator rbegin() + { return m_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return m_tree.rbegin(); } + const_reverse_iterator rbegin() const + { return m_tree.rbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() + reverse_iterator rend() { return m_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const { return m_tree.rend(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const { return m_tree.cbegin(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const + const_iterator cend() const { return m_tree.cend(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_tree.crbegin(); } + const_reverse_iterator crbegin() const + { return m_tree.crbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const + const_reverse_iterator crend() const { return m_tree.crend(); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_tree.max_size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -314,38 +339,39 @@ class set void swap(set& x) { m_tree.swap(x.m_tree); } - //! Effects: Inserts x if and only if there is no element in the container + //! Effects: Inserts x if and only if there is no element in the container //! with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(insert_const_ref_type x) + std::pair insert(insert_const_ref_type x) { return priv_insert(x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) std::pair insert(T &x) { return this->insert(const_cast(x)); } template - std::pair insert(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + std::pair insert(const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(u); } #endif - //! Effects: Move constructs a new value from x if and only if there is + //! Effects: Move constructs a new value from x if and only if there is //! no element in the container with key equivalent to the key of x. //! - //! Returns: The bool component of the returned pair is true if and only + //! Returns: The bool component of the returned pair is true if and only //! if the insertion takes place, and the iterator component of the pair //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_tree.insert_unique(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + std::pair insert(BOOST_RV_REF(value_type) x) + { return m_tree.insert_unique(boost::move(x)); } - //! Effects: Inserts a copy of x in the container if and only if there is + //! Effects: Inserts a copy of x in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. //! @@ -354,15 +380,16 @@ class set //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(const_iterator p, insert_const_ref_type x) + iterator insert(const_iterator p, insert_const_ref_type x) { return priv_insert(p, x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert( const_iterator position, const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(position, u); } #endif @@ -372,37 +399,41 @@ class set //! Returns: An iterator pointing to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - iterator insert(const_iterator p, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_tree.insert_unique(p, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(const_iterator p, BOOST_RV_REF(value_type) x) + { return m_tree.insert_unique(p, boost::move(x)); } - //! Requires: i, j are not iterators into *this. + //! Requires: first, last are not iterators into *this. //! - //! Effects: inserts each element from the range [i,j) if and only + //! Effects: inserts each element from the range [first,last) if and only //! if there is no element with key equivalent to the key of that element. //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_tree.insert_unique(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... if and only if there is + //! Effects: Inserts an object x of type T constructed with + //! std::forward(args)... if and only if there is //! no element in the container with equivalent value. //! and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. + //! + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. //! //! Throws: If memory allocation throws or //! T's in-place constructor throws. //! //! Complexity: Logarithmic. template - iterator emplace(Args&&... args) - { return m_tree.emplace_unique(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + std::pair emplace(Args&&... args) + { return m_tree.emplace_unique(boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... if and only if there is + //! std::forward(args)... if and only if there is //! no element in the container with equivalent value. //! p is a hint pointing to where the insert //! should start to search. @@ -412,38 +443,34 @@ class set //! Complexity: Logarithmic. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return m_tree.emplace_hint_unique(hint, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_tree.emplace_hint_unique(hint, boost::forward(args)...); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return m_tree.emplace_unique(); } - - iterator emplace_hint(const_iterator hint) - { return m_tree.emplace_hint_unique(hint); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_hint_unique(hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _));}\ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_hint_unique(hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by p. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Amortized constant time - iterator erase(const_iterator p) + iterator erase(const_iterator p) { return m_tree.erase(p); } //! Effects: Erases all elements in the container with key equivalent to x. @@ -451,7 +478,7 @@ class set //! Returns: Returns the number of erased elements. //! //! Complexity: log(size()) + count(k) - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -459,7 +486,7 @@ class set //! Returns: Returns last. //! //! Complexity: log(size())+N where N is the distance from first to last. - iterator erase(const_iterator first, const_iterator last) + iterator erase(const_iterator first, const_iterator last) { return m_tree.erase(first, last); } //! Effects: erase(a.begin(),a.end()). @@ -467,41 +494,41 @@ class set //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_tree.clear(); } //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) + iterator find(const key_type& x) { return m_tree.find(x); } //! Returns: A const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - const_iterator find(const key_type& x) const + const_iterator find(const key_type& x) const { return m_tree.find(x); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_tree.find(x) == m_tree.end() ? 0 : 1; } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) + iterator lower_bound(const key_type& x) { return m_tree.lower_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const + const_iterator lower_bound(const key_type& x) const { return m_tree.lower_bound(x); } //! Returns: An iterator pointing to the first element with key not less @@ -515,21 +542,21 @@ class set //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const + const_iterator upper_bound(const key_type& x) const { return m_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair + equal_range(const key_type& x) { return m_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair + equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -540,47 +567,47 @@ class set friend bool operator< (const set&, const set&); private: - std::pair priv_insert(const T &x) + std::pair priv_insert(const T &x) { return m_tree.insert_unique(x); } - iterator priv_insert(const_iterator p, const T &x) + iterator priv_insert(const_iterator p, const T &x) { return m_tree.insert_unique(p, x); } /// @endcond }; -template -inline bool operator==(const set& x, - const set& y) +template +inline bool operator==(const set& x, + const set& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const set& x, - const set& y) +template +inline bool operator<(const set& x, + const set& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const set& x, - const set& y) +template +inline bool operator!=(const set& x, + const set& y) { return !(x == y); } -template -inline bool operator>(const set& x, - const set& y) +template +inline bool operator>(const set& x, + const set& y) { return y < x; } -template -inline bool operator<=(const set& x, - const set& y) +template +inline bool operator<=(const set& x, + const set& y) { return !(y < x); } -template -inline bool operator>=(const set& x, - const set& y) +template +inline bool operator>=(const set& x, + const set& y) { return !(x < y); } -template -inline void swap(set& x, set& y) +template +inline void swap(set& x, set& y) { x.swap(y); } /// @cond @@ -599,32 +626,36 @@ namespace container { // Forward declaration of operators < and ==, needed for friend declaration. -template -inline bool operator==(const multiset& x, - const multiset& y); +template +inline bool operator==(const multiset& x, + const multiset& y); -template -inline bool operator<(const multiset& x, - const multiset& y); +template +inline bool operator<(const multiset& x, + const multiset& y); /// @endcond -//! A multiset is a kind of associative container that supports equivalent keys -//! (possibly contains multiple copies of the same key value) and provides for +//! A multiset is a kind of associative container that supports equivalent keys +//! (possibly contains multiple copies of the same key value) and provides for //! fast retrieval of the keys themselves. Class multiset supports bidirectional iterators. -//! -//! A multiset satisfies all of the requirements of a container and of a reversible -//! container, and of an associative container). multiset also provides most operations +//! +//! A multiset satisfies all of the requirements of a container and of a reversible +//! container, and of an associative container). multiset also provides most operations //! described for duplicate keys. -template -class multiset +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif +class multiset { /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(multiset) - typedef containers_detail::rbtree, Pred, Alloc> tree_t; + BOOST_COPYABLE_AND_MOVABLE(multiset) + typedef container_detail::rbtree, Pred, A> tree_t; tree_t m_tree; // red-black tree representing multiset - typedef typename containers_detail:: + typedef typename container_detail:: move_const_ref_type::type insert_const_ref_type; /// @endcond @@ -650,222 +681,246 @@ class multiset //! Effects: Constructs an empty multiset using the specified comparison //! object and allocator. - //! + //! //! Complexity: Constant. - explicit multiset(const Pred& comp = Pred(), + multiset() + : m_tree() + {} + + //! Effects: Constructs an empty multiset using the specified comparison + //! object and allocator. + //! + //! Complexity: Constant. + explicit multiset(const Pred& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) {} //! Effects: Constructs an empty multiset using the specified comparison object //! and allocator, and inserts elements from the range [first ,last ). - //! - //! Complexity: Linear in N if the range [first ,last ) is already sorted using + //! + //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template multiset(InputIterator first, InputIterator last, const Pred& comp = Pred(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, false) + : m_tree(first, last, comp, a, false) {} - //! Effects: Constructs an empty multiset using the specified comparison object and + //! Effects: Constructs an empty multiset using the specified comparison object and //! allocator, and inserts elements from the ordered range [first ,last ). This function //! is more efficient than the normal range creation for ordered ranges. //! //! Requires: [first ,last) must be ordered according to the predicate. - //! + //! //! Complexity: Linear in N. template multiset( ordered_range_t ordered_range, InputIterator first, InputIterator last , const Pred& comp = Pred() , const allocator_type& a = allocator_type()) - : m_tree(ordered_range, first, last, comp, a) + : m_tree(ordered_range, first, last, comp, a) {} //! Effects: Copy constructs a multiset. - //! + //! //! Complexity: Linear in x.size(). - multiset(const multiset& x) + multiset(const multiset& x) : m_tree(x.m_tree) {} //! Effects: Move constructs a multiset. Constructs *this using x's resources. - //! - //! Complexity: Construct. - //! + //! + //! Complexity: Constant. + //! //! Postcondition: x is emptied. - multiset(BOOST_MOVE_MACRO_RV_REF(multiset) x) - : m_tree(BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree)) + multiset(BOOST_RV_REF(multiset) x) + : m_tree(boost::move(x.m_tree)) + {} + + //! Effects: Copy constructs a multiset using the specified allocator. + //! + //! Complexity: Linear in x.size(). + multiset(const multiset& x, const allocator_type &a) + : m_tree(x.m_tree, a) + {} + + //! Effects: Move constructs a multiset using the specified allocator. + //! Constructs *this using x's resources. + //! + //! Complexity: Constant if a == x.get_allocator(), linear otherwise. + //! + //! Postcondition: x is emptied. + multiset(BOOST_RV_REF(multiset) x, const allocator_type &a) + : m_tree(boost::move(x.m_tree), a) {} //! Effects: Makes *this a copy of x. - //! + //! //! Complexity: Linear in x.size(). - multiset& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(multiset) x) + multiset& operator=(BOOST_COPY_ASSIGN_REF(multiset) x) { m_tree = x.m_tree; return *this; } //! Effects: this->swap(x.get()). - //! + //! //! Complexity: Constant. - multiset& operator=(BOOST_MOVE_MACRO_RV_REF(multiset) x) - { m_tree = BOOST_CONTAINER_MOVE_NAMESPACE::move(x.m_tree); return *this; } + multiset& operator=(BOOST_RV_REF(multiset) x) + { m_tree = boost::move(x.m_tree); return *this; } //! Effects: Returns the comparison object out //! of which a was constructed. - //! + //! //! Complexity: Constant. - key_compare key_comp() const + key_compare key_comp() const { return m_tree.key_comp(); } //! Effects: Returns an object of value_compare constructed out //! of the comparison object. - //! + //! //! Complexity: Constant. - value_compare value_comp() const + value_compare value_comp() const { return m_tree.key_comp(); } //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const { return m_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } stored_allocator_type &get_stored_allocator() { return m_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() { return m_tree.begin(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const { return m_tree.begin(); } //! Effects: Returns an iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() { return m_tree.end(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const { return m_tree.end(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() - { return m_tree.rbegin(); } + reverse_iterator rbegin() + { return m_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return m_tree.rbegin(); } + const_reverse_iterator rbegin() const + { return m_tree.rbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() + reverse_iterator rend() { return m_tree.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const { return m_tree.rend(); } //! Effects: Returns a const_iterator to the first element contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const { return m_tree.cbegin(); } //! Effects: Returns a const_iterator to the end of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const + const_iterator cend() const { return m_tree.cend(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_tree.crbegin(); } + const_reverse_iterator crbegin() const + { return m_tree.crbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed container. - //! + //! of the reversed container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const + const_reverse_iterator crend() const { return m_tree.crend(); } //! Effects: Returns true if the container contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return m_tree.empty(); } //! Effects: Returns the number of the elements contained in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return m_tree.size(); } //! Effects: Returns the largest possible size of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return m_tree.max_size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() allocators are also swapped. //! //! Throws: Nothing. //! @@ -874,18 +929,19 @@ class multiset { m_tree.swap(x.m_tree); } //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic. - iterator insert(insert_const_ref_type x) + iterator insert(insert_const_ref_type x) { return priv_insert(x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(T &x) { return this->insert(const_cast(x)); } template - iterator insert(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert(const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(u); } #endif @@ -896,8 +952,8 @@ class multiset //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_tree.insert_equal(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(BOOST_RV_REF(value_type) x) + { return m_tree.insert_equal(boost::move(x)); } //! Effects: Inserts a copy of x in the container. //! p is a hint pointing to where the insert should start to search. @@ -907,15 +963,16 @@ class multiset //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(const_iterator p, insert_const_ref_type x) + iterator insert(const_iterator p, insert_const_ref_type x) { return priv_insert(p, x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert( const_iterator position, const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_insert(position, u); } #endif @@ -927,28 +984,28 @@ class multiset //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(const_iterator p, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return m_tree.insert_equal(p, BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(const_iterator p, BOOST_RV_REF(value_type) x) + { return m_tree.insert_equal(p, boost::move(x)); } - //! Requires: i, j are not iterators into *this. + //! Requires: first, last are not iterators into *this. //! - //! Effects: inserts each element from the range [i,j) . + //! Effects: inserts each element from the range [first,last) . //! - //! Complexity: N log(size()+N) (N is the distance from i to j) + //! Complexity: At most N log(size()+N) (N is the distance from first to last) template - void insert(InputIterator first, InputIterator last) + void insert(InputIterator first, InputIterator last) { m_tree.insert_equal(first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... and returns the iterator pointing to the - //! newly inserted element. + //! newly inserted element. //! //! Complexity: Logarithmic. template iterator emplace(Args&&... args) - { return m_tree.emplace_equal(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_tree.emplace_equal(boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... @@ -960,38 +1017,34 @@ class multiset //! is inserted right before p. template iterator emplace_hint(const_iterator hint, Args&&... args) - { return m_tree.emplace_hint_equal(hint, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return m_tree.emplace_hint_equal(hint, boost::forward(args)...); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - iterator emplace() - { return m_tree.emplace_equal(); } - - iterator emplace_hint(const_iterator hint) - { return m_tree.emplace_hint_equal(hint); } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); } \ - \ - template \ - iterator emplace_hint(const_iterator hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { return m_tree.emplace_hint_equal(hint, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); }\ + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return m_tree.emplace_hint_equal(hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element pointed to by p. //! //! Returns: Returns an iterator pointing to the element immediately - //! following q prior to the element being erased. If no such element exists, + //! following q prior to the element being erased. If no such element exists, //! returns end(). //! //! Complexity: Amortized constant time - iterator erase(const_iterator p) + iterator erase(const_iterator p) { return m_tree.erase(p); } //! Effects: Erases all elements in the container with key equivalent to x. @@ -999,7 +1052,7 @@ class multiset //! Returns: Returns the number of erased elements. //! //! Complexity: log(size()) + count(k) - size_type erase(const key_type& x) + size_type erase(const key_type& x) { return m_tree.erase(x); } //! Effects: Erases all the elements in the range [first, last). @@ -1015,41 +1068,41 @@ class multiset //! Postcondition: size() == 0. //! //! Complexity: linear in size(). - void clear() + void clear() { m_tree.clear(); } //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - iterator find(const key_type& x) + iterator find(const key_type& x) { return m_tree.find(x); } //! Returns: A const iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. - const_iterator find(const key_type& x) const + const_iterator find(const key_type& x) const { return m_tree.find(x); } //! Returns: The number of elements with key equivalent to x. //! //! Complexity: log(size())+count(k) - size_type count(const key_type& x) const + size_type count(const key_type& x) const { return m_tree.count(x); } //! Returns: An iterator pointing to the first element with key not less //! than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - iterator lower_bound(const key_type& x) + iterator lower_bound(const key_type& x) { return m_tree.lower_bound(x); } //! Returns: A const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator lower_bound(const key_type& x) const + const_iterator lower_bound(const key_type& x) const { return m_tree.lower_bound(x); } //! Returns: An iterator pointing to the first element with key not less @@ -1063,21 +1116,21 @@ class multiset //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic - const_iterator upper_bound(const key_type& x) const + const_iterator upper_bound(const key_type& x) const { return m_tree.upper_bound(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair + equal_range(const key_type& x) { return m_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair + equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -1088,47 +1141,47 @@ class multiset friend bool operator< (const multiset&, const multiset&); private: - iterator priv_insert(const T &x) + iterator priv_insert(const T &x) { return m_tree.insert_equal(x); } - iterator priv_insert(const_iterator p, const T &x) + iterator priv_insert(const_iterator p, const T &x) { return m_tree.insert_equal(p, x); } /// @endcond }; -template -inline bool operator==(const multiset& x, - const multiset& y) +template +inline bool operator==(const multiset& x, + const multiset& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const multiset& x, - const multiset& y) +template +inline bool operator<(const multiset& x, + const multiset& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const multiset& x, - const multiset& y) +template +inline bool operator!=(const multiset& x, + const multiset& y) { return !(x == y); } -template -inline bool operator>(const multiset& x, - const multiset& y) +template +inline bool operator>(const multiset& x, + const multiset& y) { return y < x; } -template -inline bool operator<=(const multiset& x, - const multiset& y) +template +inline bool operator<=(const multiset& x, + const multiset& y) { return !(y < x); } -template -inline bool operator>=(const multiset& x, - const multiset& y) +template +inline bool operator>=(const multiset& x, + const multiset& y) { return !(x < y); } -template -inline void swap(multiset& x, multiset& y) +template +inline void swap(multiset& x, multiset& y) { x.swap(y); } /// @cond @@ -1149,7 +1202,7 @@ namespace container { }} -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif /* BOOST_CONTAINERS_SET_HPP */ +#endif /* BOOST_CONTAINER_SET_HPP */ diff --git a/3party/boost/boost/interprocess/containers/container/slist.hpp b/3party/boost/boost/container/slist.hpp similarity index 76% rename from 3party/boost/boost/interprocess/containers/container/slist.hpp rename to 3party/boost/boost/container/slist.hpp index 622ec9d501..57719357fc 100644 --- a/3party/boost/boost/interprocess/containers/container/slist.hpp +++ b/3party/boost/boost/container/slist.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2004-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2004-2012. 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) // @@ -8,31 +8,31 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_SLIST_HPP -#define BOOST_CONTAINERS_SLIST_HPP +#ifndef BOOST_CONTAINER_SLIST_HPP +#define BOOST_CONTAINER_SLIST_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP +#include +#include -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP +#include +#include +#include +#include +#include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_NODE_ALLOC_HOLDER_HPP +#include #include -#if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) +#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //Preprocessor library to emulate perfect forwarding #else -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP +#include #endif #include @@ -52,124 +52,110 @@ namespace container { /// @cond -namespace containers_detail { +namespace container_detail { template struct slist_hook { - typedef typename containers_detail::bi::make_slist_base_hook - , containers_detail::bi::link_mode >::type type; + typedef typename container_detail::bi::make_slist_base_hook + , container_detail::bi::link_mode >::type type; }; template struct slist_node : public slist_hook::type { - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - slist_node() - : m_data() - {} - - template - slist_node(Args &&...args) - : m_data(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...) - {} - - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - slist_node() - : m_data() - {} - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - slist_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - : m_data(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)) \ - {} \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif//#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + private: + slist_node(); + public: + typedef typename slist_hook::type hook_type; T m_data; }; template struct intrusive_slist_type { - typedef typename A::value_type value_type; - typedef typename boost::pointer_to_other - ::type void_pointer; - typedef typename containers_detail::slist_node + typedef boost::container::allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::value_type value_type; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type + void_pointer; + typedef typename container_detail::slist_node node_type; - typedef typename containers_detail::bi::make_slist + typedef typename container_detail::bi::make_slist ::type> - ,containers_detail::bi::constant_time_size - ,containers_detail::bi::size_type + ,container_detail::bi::base_hook::type> + ,container_detail::bi::constant_time_size + , container_detail::bi::size_type + >::type container_type; typedef container_type type ; }; -} //namespace containers_detail { +} //namespace container_detail { /// @endcond -//! An slist is a singly linked list: a list where each element is linked to the next -//! element, but not to the previous element. That is, it is a Sequence that -//! supports forward but not backward traversal, and (amortized) constant time -//! insertion and removal of elements. Slists, like lists, have the important -//! property that insertion and splicing do not invalidate iterators to list elements, -//! and that even removal invalidates only the iterators that point to the elements -//! that are removed. The ordering of iterators may be changed (that is, -//! slist::iterator might have a different predecessor or successor after a list -//! operation than it did before), but the iterators themselves will not be invalidated +//! An slist is a singly linked list: a list where each element is linked to the next +//! element, but not to the previous element. That is, it is a Sequence that +//! supports forward but not backward traversal, and (amortized) constant time +//! insertion and removal of elements. Slists, like lists, have the important +//! property that insertion and splicing do not invalidate iterators to list elements, +//! and that even removal invalidates only the iterators that point to the elements +//! that are removed. The ordering of iterators may be changed (that is, +//! slist::iterator might have a different predecessor or successor after a list +//! operation than it did before), but the iterators themselves will not be invalidated //! or made to point to different elements unless that invalidation or mutation is explicit. //! -//! The main difference between slist and list is that list's iterators are bidirectional -//! iterators, while slist's iterators are forward iterators. This means that slist is -//! less versatile than list; frequently, however, bidirectional iterators are -//! unnecessary. You should usually use slist unless you actually need the extra -//! functionality of list, because singly linked lists are smaller and faster than double -//! linked lists. -//! -//! Important performance note: like every other Sequence, slist defines the member -//! functions insert and erase. Using these member functions carelessly, however, can -//! result in disastrously slow programs. The problem is that insert's first argument is -//! an iterator p, and that it inserts the new element(s) before p. This means that -//! insert must find the iterator just before p; this is a constant-time operation -//! for list, since list has bidirectional iterators, but for slist it must find that -//! iterator by traversing the list from the beginning up to p. In other words: +//! The main difference between slist and list is that list's iterators are bidirectional +//! iterators, while slist's iterators are forward iterators. This means that slist is +//! less versatile than list; frequently, however, bidirectional iterators are +//! unnecessary. You should usually use slist unless you actually need the extra +//! functionality of list, because singly linked lists are smaller and faster than double +//! linked lists. +//! +//! Important performance note: like every other Sequence, slist defines the member +//! functions insert and erase. Using these member functions carelessly, however, can +//! result in disastrously slow programs. The problem is that insert's first argument is +//! an iterator p, and that it inserts the new element(s) before p. This means that +//! insert must find the iterator just before p; this is a constant-time operation +//! for list, since list has bidirectional iterators, but for slist it must find that +//! iterator by traversing the list from the beginning up to p. In other words: //! insert and erase are slow operations anywhere but near the beginning of the slist. -//! -//! Slist provides the member functions insert_after and erase_after, which are constant -//! time operations: you should always use insert_after and erase_after whenever -//! possible. If you find that insert_after and erase_after aren't adequate for your -//! needs, and that you often need to use insert and erase in the middle of the list, +//! +//! Slist provides the member functions insert_after and erase_after, which are constant +//! time operations: you should always use insert_after and erase_after whenever +//! possible. If you find that insert_after and erase_after aren't adequate for your +//! needs, and that you often need to use insert and erase in the middle of the list, //! then you should probably use list instead of slist. +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template > +#else template -class slist - : protected containers_detail::node_alloc_holder - ::type> +#endif +class slist + : protected container_detail::node_alloc_holder + ::type> { /// @cond - typedef typename containers_detail:: + typedef typename container_detail:: move_const_ref_type::type insert_const_ref_type; - typedef typename - containers_detail::intrusive_slist_type::type Icont; - typedef containers_detail::node_alloc_holder AllocHolder; + typedef typename + container_detail::intrusive_slist_type::type Icont; + typedef container_detail::node_alloc_holder AllocHolder; typedef typename AllocHolder::NodePtr NodePtr; typedef slist ThisType; typedef typename AllocHolder::NodeAlloc NodeAlloc; typedef typename AllocHolder::ValAlloc ValAlloc; typedef typename AllocHolder::Node Node; - typedef containers_detail::allocator_destroyer Destroyer; + typedef container_detail::allocator_destroyer Destroyer; typedef typename AllocHolder::allocator_v1 allocator_v1; typedef typename AllocHolder::allocator_v2 allocator_v2; typedef typename AllocHolder::alloc_version alloc_version; + typedef boost::container::allocator_traits allocator_traits_type; class equal_to_value { @@ -202,27 +188,27 @@ class slist /// @endcond public: //! The type of object, T, stored in the list - typedef T value_type; + typedef T value_type; //! Pointer to T - typedef typename A::pointer pointer; + typedef typename allocator_traits_type::pointer pointer; //! Const pointer to T - typedef typename A::const_pointer const_pointer; + typedef typename allocator_traits_type::const_pointer const_pointer; //! Reference to T - typedef typename A::reference reference; + typedef typename allocator_traits_type::reference reference; //! Const reference to T - typedef typename A::const_reference const_reference; + typedef typename allocator_traits_type::const_reference const_reference; //! An unsigned integral type - typedef typename A::size_type size_type; + typedef typename allocator_traits_type::size_type size_type; //! A signed integral type - typedef typename A::difference_type difference_type; + typedef typename allocator_traits_type::difference_type difference_type; //! The allocator type - typedef A allocator_type; - //! The stored allocator type - typedef NodeAlloc stored_allocator_type; + typedef A allocator_type; + //! Non-standard extension: the stored allocator type + typedef NodeAlloc stored_allocator_type; /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(slist) + BOOST_COPYABLE_AND_MOVABLE(slist) typedef difference_type list_difference_type; typedef pointer list_pointer; typedef const_pointer list_const_pointer; @@ -232,11 +218,11 @@ class slist public: - //! Const iterator used to iterate through a list. + //! Const iterator used to iterate through a list. class const_iterator /// @cond - : public std::iterator { @@ -259,17 +245,17 @@ class slist {} //Pointer like operators - const_reference operator*() const + const_reference operator*() const { return m_it->m_data; } - const_pointer operator->() const + const_pointer operator->() const { return const_pointer(&m_it->m_data); } //Increment / Decrement - const_iterator& operator++() + const_iterator& operator++() { prot_incr(); return *this; } - const_iterator operator++(int) + const_iterator operator++(int) { typename Icont::iterator tmp = m_it; ++*this; return const_iterator(tmp); } //Comparison operators @@ -292,7 +278,7 @@ class slist explicit iterator(typename Icont::iterator it) : const_iterator(it) {} - + typename Icont::iterator get() { return this->m_it; } @@ -309,7 +295,7 @@ class slist pointer operator->() const { return pointer(&this->m_it->m_data); } //Increment / Decrement - iterator& operator++() + iterator& operator++() { this->prot_incr(); return *this; } iterator operator++(int) @@ -320,11 +306,20 @@ class slist public: //! Effects: Constructs a list taking the allocator as parameter. - //! + //! //! Throws: If allocator_type's copy constructor throws. - //! + //! //! Complexity: Constant. - explicit slist(const allocator_type& a = allocator_type()) + slist() + : AllocHolder() + {} + + //! Effects: Constructs a list taking the allocator as parameter. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + explicit slist(const allocator_type& a) : AllocHolder(a) {} @@ -337,7 +332,7 @@ class slist //! //! Throws: If allocator_type's default constructor or copy constructor //! throws or T's default or copy constructor throws. - //! + //! //! Complexity: Linear to n. explicit slist(size_type n, const value_type& x, const allocator_type& a = allocator_type()) : AllocHolder(a) @@ -352,41 +347,77 @@ class slist //! Complexity: Linear to the range [first, last). template slist(InpIt first, InpIt last, - const allocator_type& a = allocator_type()) + const allocator_type& a = allocator_type()) : AllocHolder(a) { this->insert_after(this->before_begin(), first, last); } //! Effects: Copy constructs a list. //! //! Postcondition: x == *this. - //! + //! //! Throws: If allocator_type's default constructor or copy constructor throws. - //! + //! //! Complexity: Linear to the elements x contains. - slist(const slist& x) + slist(const slist& x) : AllocHolder(x) { this->insert_after(this->before_begin(), x.begin(), x.end()); } //! Effects: Move constructor. Moves mx's resources to *this. //! //! Throws: If allocator_type's copy constructor throws. - //! + //! //! Complexity: Constant. - slist(BOOST_MOVE_MACRO_RV_REF(slist) x) - : AllocHolder(BOOST_CONTAINER_MOVE_NAMESPACE::move((AllocHolder&)x)) + slist(BOOST_RV_REF(slist) x) + : AllocHolder(boost::move(static_cast(x))) {} + //! Effects: Copy constructs a list using the specified allocator. + //! + //! Postcondition: x == *this. + //! + //! Throws: If allocator_type's default constructor or copy constructor throws. + //! + //! Complexity: Linear to the elements x contains. + slist(const slist& x, const allocator_type &a) + : AllocHolder(a) + { this->insert_after(this->before_begin(), x.begin(), x.end()); } + + //! Effects: Move constructor using the specified allocator. + //! Moves x's resources to *this. + //! + //! Throws: If allocation or value_type's copy constructor throws. + //! + //! Complexity: Constant if a == x.get_allocator(), linear otherwise. + slist(BOOST_RV_REF(slist) x, const allocator_type &a) + : AllocHolder(a) + { + if(this->node_alloc() == x.node_alloc()){ + this->icont().swap(x.icont()); + } + else{ + this->insert(this->cbegin(), x.begin(), x.end()); + } + } + //! Effects: Makes *this contain the same elements as x. //! - //! Postcondition: this->size() == x.size(). *this contains a copy - //! of each of x's elements. + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. //! //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to the number of elements in x. - slist& operator= (BOOST_MOVE_MACRO_COPY_ASSIGN_REF(slist) x) + slist& operator= (BOOST_COPY_ASSIGN_REF(slist) x) { if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + const NodeAlloc &x_alloc = x.node_alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + } + this->AllocHolder::copy_assign_alloc(x); this->assign(x.begin(), x.end()); } return *this; @@ -394,17 +425,31 @@ class slist //! Effects: Makes *this contain the same elements as x. //! - //! Postcondition: this->size() == x.size(). *this contains a copy - //! of each of x's elements. + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. //! //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to the number of elements in x. - slist& operator= (BOOST_MOVE_MACRO_RV_REF(slist) mx) + slist& operator= (BOOST_RV_REF(slist) x) { - if (&mx != this){ - this->clear(); - this->swap(mx); + if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + NodeAlloc &x_alloc = x.node_alloc(); + //If allocators a re equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy and swap pointers + this->clear(); + this->icont() = boost::move(x.icont()); + //Move allocator if needed + this->AllocHolder::move_assign_alloc(x); + } + //If unequal allocators, then do a one by one move + else{ + typedef typename std::iterator_traits::iterator_category ItCat; + this->assign( boost::make_move_iterator(x.begin()) + , boost::make_move_iterator(x.end())); + } } return *this; } @@ -415,18 +460,18 @@ class slist //! Throws: Nothing. //! //! Complexity: Linear to the number of elements. - ~slist() + ~slist() {} //AllocHolder clears the slist //! Effects: Returns a copy of the internal allocator. - //! + //! //! Throws: If allocator's copy constructor throws. - //! + //! //! Complexity: Constant. allocator_type get_allocator() const { return allocator_type(this->node_alloc()); } - const stored_allocator_type &get_stored_allocator() const + const stored_allocator_type &get_stored_allocator() const { return this->node_alloc(); } stored_allocator_type &get_stored_allocator() @@ -449,41 +494,41 @@ class slist //! //! Complexity: Linear to n. template - void assign(InpIt first, InpIt last) + void assign(InpIt first, InpIt last) { - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; this->priv_assign_dispatch(first, last, Result()); } //! Effects: Returns an iterator to the first element contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() { return iterator(this->icont().begin()); } //! Effects: Returns a const_iterator to the first element contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const { return this->cbegin(); } //! Effects: Returns an iterator to the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. iterator end() { return iterator(this->icont().end()); } //! Effects: Returns a const_iterator to the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator end() const { return this->cend(); } @@ -491,76 +536,74 @@ class slist //! Effects: Returns a non-dereferenceable iterator that, //! when incremented, yields begin(). This iterator may be used //! as the argument toinsert_after, erase_after, etc. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator before_begin() + iterator before_begin() { return iterator(end()); } - //! Effects: Returns a non-dereferenceable const_iterator + //! Effects: Returns a non-dereferenceable const_iterator //! that, when incremented, yields begin(). This iterator may be used //! as the argument toinsert_after, erase_after, etc. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator before_begin() const { return this->cbefore_begin(); } //! Effects: Returns a const_iterator to the first element contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const { return const_iterator(this->non_const_icont().begin()); } //! Effects: Returns a const_iterator to the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator cend() const { return const_iterator(this->non_const_icont().end()); } - //! Effects: Returns a non-dereferenceable const_iterator + //! Effects: Returns a non-dereferenceable const_iterator //! that, when incremented, yields begin(). This iterator may be used //! as the argument toinsert_after, erase_after, etc. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. const_iterator cbefore_begin() const { return const_iterator(end()); } //! Effects: Returns the number of the elements contained in the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const { return this->icont().size(); } //! Effects: Returns the largest possible size of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const + size_type max_size() const { return AllocHolder::max_size(); } //! Effects: Returns true if the list contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const { return !this->size(); } //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() - //! allocators are also swapped. //! //! Throws: Nothing. //! @@ -570,24 +613,24 @@ class slist //! Requires: !empty() //! - //! Effects: Returns a reference to the first element + //! Effects: Returns a reference to the first element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reference front() + reference front() { return *this->begin(); } //! Requires: !empty() //! - //! Effects: Returns a const reference to the first element + //! Effects: Returns a const reference to the first element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reference front() const + const_reference front() const { return *this->begin(); } //! Effects: Inserts a copy of t in the beginning of the list. @@ -599,11 +642,12 @@ class slist void push_front(insert_const_ref_type x) { return priv_push_front(x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) void push_front(T &x) { push_front(const_cast(x)); } template - void push_front(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + void push_front(const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return priv_push_front(u); } #endif @@ -613,8 +657,8 @@ class slist //! Throws: If memory allocation throws. //! //! Complexity: Amortized constant time. - void push_front(BOOST_MOVE_MACRO_RV_REF(T) x) - { this->icont().push_front(*this->create_node(BOOST_CONTAINER_MOVE_NAMESPACE::move(x))); } + void push_front(BOOST_RV_REF(T) x) + { this->icont().push_front(*this->create_node(boost::move(x))); } //! Effects: Removes the first element from the list. //! @@ -624,24 +668,24 @@ class slist void pop_front() { this->icont().pop_front_and_dispose(Destroyer(this->node_alloc())); } - //! Returns: The iterator to the element before i in the sequence. - //! Returns the end-iterator, if either i is the begin-iterator or the - //! sequence is empty. - //! + //! Returns: The iterator to the element before i in the sequence. + //! Returns the end-iterator, if either i is the begin-iterator or the + //! sequence is empty. + //! //! Throws: Nothing. - //! - //! Complexity: Linear to the number of elements before i. - iterator previous(iterator p) + //! + //! Complexity: Linear to the number of elements before i. + iterator previous(iterator p) { return iterator(this->icont().previous(p.get())); } - //! Returns: The const_iterator to the element before i in the sequence. - //! Returns the end-const_iterator, if either i is the begin-const_iterator or - //! the sequence is empty. - //! + //! Returns: The const_iterator to the element before i in the sequence. + //! Returns the end-const_iterator, if either i is the begin-const_iterator or + //! the sequence is empty. + //! //! Throws: Nothing. - //! - //! Complexity: Linear to the number of elements before i. - const_iterator previous(const_iterator p) + //! + //! Complexity: Linear to the number of elements before i. + const_iterator previous(const_iterator p) { return const_iterator(this->icont().previous(p.get())); } //! Requires: p must be a valid iterator of *this. @@ -650,22 +694,23 @@ class slist //! by prev_p. //! //! Returns: An iterator to the inserted element. - //! + //! //! Throws: If memory allocation throws or T's copy constructor throws. - //! + //! //! Complexity: Amortized constant time. //! //! Note: Does not affect the validity of iterators and references of //! previous values. - iterator insert_after(const_iterator prev_pos, insert_const_ref_type x) + iterator insert_after(const_iterator prev_pos, insert_const_ref_type x) { return this->priv_insert_after(prev_pos, x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert_after(const_iterator position, T &x) { return this->insert_after(position, const_cast(x)); } template - iterator insert_after(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert_after( const_iterator position, const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return this->priv_insert_after(position, u); } #endif @@ -675,15 +720,15 @@ class slist //! p pointed by prev_pos. //! //! Returns: An iterator to the inserted element. - //! + //! //! Throws: If memory allocation throws. - //! + //! //! Complexity: Amortized constant time. //! //! Note: Does not affect the validity of iterators and references of //! previous values. - iterator insert_after(const_iterator prev_pos, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)))); } + iterator insert_after(const_iterator prev_pos, BOOST_RV_REF(value_type) x) + { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(boost::move(x)))); } //! Requires: prev_pos must be a valid iterator of *this. //! @@ -699,22 +744,22 @@ class slist { this->priv_create_and_insert_nodes(prev_pos, n, x); } //! Requires: prev_pos must be a valid iterator of *this. - //! - //! Effects: Inserts the range pointed by [first, last) + //! + //! Effects: Inserts the range pointed by [first, last) //! after the p prev_pos. - //! + //! //! Throws: If memory allocation throws, T's constructor from a //! dereferenced InpIt throws. - //! + //! //! Complexity: Linear to the number of elements inserted. - //! + //! //! Note: Does not affect the validity of iterators and references of //! previous values. template - void insert_after(const_iterator prev_pos, InIter first, InIter last) + void insert_after(const_iterator prev_pos, InIter first, InIter last) { - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; this->priv_insert_after_range_dispatch(prev_pos, first, last, Result()); } @@ -725,15 +770,16 @@ class slist //! Throws: If memory allocation throws or x's copy constructor throws. //! //! Complexity: Linear to the elements before p. - iterator insert(const_iterator position, insert_const_ref_type x) + iterator insert(const_iterator position, insert_const_ref_type x) { return this->priv_insert(position, x); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) + iterator insert( const_iterator position, const U &u + , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) { return this->priv_insert(position, u); } #endif @@ -744,8 +790,8 @@ class slist //! Throws: If memory allocation throws. //! //! Complexity: Linear to the elements before p. - iterator insert(const_iterator p, BOOST_MOVE_MACRO_RV_REF(value_type) x) - { return this->insert_after(previous(p), BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); } + iterator insert(const_iterator p, BOOST_RV_REF(value_type) x) + { return this->insert_after(previous(p), boost::move(x)); } //! Requires: p must be a valid iterator of *this. //! @@ -754,9 +800,9 @@ class slist //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to n plus linear to the elements before p. - void insert(const_iterator p, size_type n, const value_type& x) + void insert(const_iterator p, size_type n, const value_type& x) { return this->insert_after(previous(p), n, x); } - + //! Requires: p must be a valid iterator of *this. //! //! Effects: Insert a copy of the [first, last) range before p. @@ -767,10 +813,10 @@ class slist //! Complexity: Linear to std::distance [first, last) plus //! linear to the elements before p. template - void insert(const_iterator p, InIter first, InIter last) + void insert(const_iterator p, InIter first, InIter last) { return this->insert_after(previous(p), first, last); } - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the front of the list @@ -781,7 +827,7 @@ class slist //! Complexity: Amortized constant time. template void emplace_front(Args&&... args) - { this->emplace_after(this->cbefore_begin(), BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { this->emplace_after(this->cbefore_begin(), boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... before p @@ -792,7 +838,7 @@ class slist //! Complexity: Linear to the elements before p template iterator emplace(const_iterator p, Args&&... args) - { return this->emplace_after(this->previous(p), BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } + { return this->emplace_after(this->previous(p), boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... after prev @@ -804,74 +850,53 @@ class slist template iterator emplace_after(const_iterator prev, Args&&... args) { - typename AllocHolder::Deallocator d(AllocHolder::create_node_and_deallocator()); - new ((void*)containers_detail::get_pointer(d.get())) Node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - NodePtr node = d.get(); - d.release(); - return iterator(this->icont().insert_after(prev.get(), *node)); + NodePtr pnode(AllocHolder::create_node(boost::forward(args)...)); + return iterator(this->icont().insert_after(prev.get(), *pnode)); } - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - //0 args - void emplace_front() - { this->emplace_after(this->cbefore_begin()); } - - iterator emplace(const_iterator p) - { return this->emplace_after(this->previous(p)); } - - iterator emplace_after(const_iterator prev) - { - typename AllocHolder::Deallocator d(AllocHolder::create_node_and_deallocator()); - new ((void*)containers_detail::get_pointer(d.get())) Node(); - NodePtr node = d.get(); - d.release(); - return iterator(this->icont().insert_after(prev.get(), *node)); - } + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - this->emplace \ - (this->cbegin(), BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + this->emplace(this->cbegin() \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ } \ \ - template \ - iterator emplace \ - (const_iterator p, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace (const_iterator p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ return this->emplace_after \ - (this->previous(p), BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + (this->previous(p) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ } \ \ - template \ - iterator emplace_after \ - (const_iterator prev, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_after(const_iterator prev \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - typename AllocHolder::Deallocator d(AllocHolder::create_node_and_deallocator()); \ - new ((void*)containers_detail::get_pointer(d.get())) \ - Node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - NodePtr node = d.get(); \ - d.release(); \ - return iterator(this->icont().insert_after(prev.get(), *node)); \ + NodePtr pnode (AllocHolder::create_node \ + (BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \ + return iterator(this->icont().insert_after(prev.get(), *pnode)); \ } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Erases the element after the element pointed by prev_pos //! of the list. //! //! Returns: the first element remaining beyond the removed elements, //! or end() if no such element exists. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - //! + //! //! Note: Does not invalidate iterators or references to non erased elements. iterator erase_after(const_iterator prev_pos) { @@ -879,17 +904,17 @@ class slist } //! Effects: Erases the range (before_first, last) from - //! the list. + //! the list. //! //! Returns: the first element remaining beyond the removed elements, //! or end() if no such element exists. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear to the number of erased elements. - //! + //! //! Note: Does not invalidate iterators or references to non erased elements. - iterator erase_after(const_iterator before_first, const_iterator last) + iterator erase_after(const_iterator before_first, const_iterator last) { return iterator(this->icont().erase_after_and_dispose(before_first.get(), last.get(), Destroyer(this->node_alloc()))); } @@ -901,7 +926,7 @@ class slist //! Throws: Nothing. //! //! Complexity: Linear to the number of elements before p. - iterator erase(const_iterator p) + iterator erase(const_iterator p) { return iterator(this->erase_after(previous(p))); } //! Requires: first and last must be valid iterator to elements in *this. @@ -928,7 +953,7 @@ class slist --new_size; cur = cur_next; } - if (cur_next != end_n) + if (cur_next != end_n) this->erase_after(const_iterator(cur), const_iterator(end_n)); else this->insert_after(const_iterator(cur), new_size, x); @@ -945,7 +970,7 @@ class slist typename Icont::iterator end_n(this->icont().end()), cur(this->icont().before_begin()), cur_next; size_type len = this->size(); size_type left = new_size; - + while (++(cur_next = cur) != end_n && left > 0){ --left; cur = cur_next; @@ -963,7 +988,7 @@ class slist //! Throws: Nothing. //! //! Complexity: Linear to the number of elements in the list. - void clear() + void clear() { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); } //! Requires: p must point to an element contained @@ -976,7 +1001,7 @@ class slist //! are not equal. //! //! Complexity: Linear to the elements in x. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of //! this list. Iterators of this list and all the references are not invalidated. void splice_after(const_iterator prev_pos, slist& x) @@ -991,16 +1016,16 @@ class slist //! Requires: prev_pos must be a valid iterator of this. //! i must point to an element contained in list x. - //! - //! Effects: Transfers the value pointed by i, from list x to this list, + //! + //! Effects: Transfers the value pointed by i, from list x to this list, //! after the element pointed by prev_pos. - //! If prev_pos == prev or prev_pos == ++prev, this function is a null operation. - //! + //! If prev_pos == prev or prev_pos == ++prev, this function is a null operation. + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Constant. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. void splice_after(const_iterator prev_pos, slist& x, const_iterator prev) @@ -1016,18 +1041,18 @@ class slist //! Requires: prev_pos must be a valid iterator of this. //! before_first and before_last must be valid iterators of x. //! prev_pos must not be contained in [before_first, before_last) range. - //! + //! //! Effects: Transfers the range [before_first + 1, before_last + 1) //! from list x to this list, after the element pointed by prev_pos. - //! + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Linear to the number of transferred elements. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice_after(const_iterator prev_pos, slist& x, + void splice_after(const_iterator prev_pos, slist& x, const_iterator before_first, const_iterator before_last) { if((NodeAlloc&)*this == (NodeAlloc&)x){ @@ -1043,18 +1068,18 @@ class slist //! before_first and before_last must be valid iterators of x. //! prev_pos must not be contained in [before_first, before_last) range. //! n == std::distance(before_first, before_last) - //! + //! //! Effects: Transfers the range [before_first + 1, before_last + 1) //! from list x to this list, after the element pointed by prev_pos. - //! + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Constant. - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice_after(const_iterator prev_pos, slist& x, + void splice_after(const_iterator prev_pos, slist& x, const_iterator before_first, const_iterator before_last, size_type n) { @@ -1077,24 +1102,24 @@ class slist //! are not equal. //! //! Complexity: Linear in distance(begin(), p), and linear in x.size(). - //! + //! //! Note: Iterators of values obtained from list x now point to elements of //! this list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType& x) + void splice(const_iterator p, ThisType& x) { this->splice_after(this->previous(p), x); } //! Requires: p must point to an element contained //! by this list. i must point to an element contained in list x. - //! - //! Effects: Transfers the value pointed by i, from list x to this list, + //! + //! Effects: Transfers the value pointed by i, from list x to this list, //! before the the element pointed by p. No destructors or copy constructors are called. - //! If p == i or p == ++i, this function is a null operation. - //! + //! If p == i or p == ++i, this function is a null operation. + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Linear in distance(begin(), p), and in distance(x.begin(), i). - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. void splice(const_iterator p, slist& x, const_iterator i) @@ -1102,37 +1127,37 @@ class slist //! Requires: p must point to an element contained //! by this list. first and last must point to elements contained in list x. - //! - //! Effects: Transfers the range pointed by first and last from list x to this list, + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, //! before the the element pointed by p. No destructors or copy constructors are called. - //! + //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. - //! + //! //! Complexity: Linear in distance(begin(), p), in distance(x.begin(), first), //! and in distance(first, last). - //! + //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. void splice(const_iterator p, slist& x, const_iterator first, const_iterator last) { this->splice_after(previous(p), x, previous(first), previous(last)); } - //! Effects: Reverses the order of elements in the list. - //! + //! Effects: Reverses the order of elements in the list. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time. - //! + //! //! Note: Iterators and references are not invalidated - void reverse() + void reverse() { this->icont().reverse(); } //! Effects: Removes all the elements that compare equal to value. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear time. It performs exactly size() comparisons for equality. - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. void remove(const T& value) @@ -1140,57 +1165,57 @@ class slist //! Effects: Removes all the elements for which a specified //! predicate is satisfied. - //! + //! //! Throws: If pred throws. - //! + //! //! Complexity: Linear time. It performs exactly size() calls to the predicate. - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. - template + template void remove_if(Pred pred) { typedef ValueCompareToNodeCompare Predicate; this->icont().remove_and_dispose_if(Predicate(pred), Destroyer(this->node_alloc())); } - //! Effects: Removes adjacent duplicate elements or adjacent + //! Effects: Removes adjacent duplicate elements or adjacent //! elements that are equal from the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear time (size()-1 comparisons calls to pred()). - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. void unique() { this->unique(value_equal()); } - //! Effects: Removes adjacent duplicate elements or adjacent + //! Effects: Removes adjacent duplicate elements or adjacent //! elements that satisfy some binary predicate from the list. - //! + //! //! Throws: If pred throws. - //! + //! //! Complexity: Linear time (size()-1 comparisons equality comparisons). - //! + //! //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. - template + template void unique(Pred pred) { typedef ValueCompareToNodeCompare Predicate; this->icont().unique_and_dispose(Predicate(pred), Destroyer(this->node_alloc())); } - //! Requires: The lists x and *this must be distinct. + //! Requires: The lists x and *this must be distinct. //! //! Effects: This function removes all of x's elements and inserts them - //! in order into *this according to std::less. The merge is stable; - //! that is, if an element from *this is equivalent to one from x, then the element - //! from *this will precede the one from x. - //! + //! in order into *this according to std::less. The merge is stable; + //! that is, if an element from *this is equivalent to one from x, then the element + //! from *this will precede the one from x. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time: it performs at most //! size() + x.size() - 1 comparisons. void merge(slist & x) @@ -1198,17 +1223,17 @@ class slist //! Requires: p must be a comparison function that induces a strict weak //! ordering and both *this and x must be sorted according to that ordering - //! The lists x and *this must be distinct. - //! + //! The lists x and *this must be distinct. + //! //! Effects: This function removes all of x's elements and inserts them - //! in order into *this. The merge is stable; that is, if an element from *this is - //! equivalent to one from x, then the element from *this will precede the one from x. - //! + //! in order into *this. The merge is stable; that is, if an element from *this is + //! equivalent to one from x, then the element from *this will precede the one from x. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time: it performs at most //! size() + x.size() - 1 comparisons. - //! + //! //! Note: Iterators and references to *this are not invalidated. template void merge(slist& x, StrictWeakOrdering comp) @@ -1222,28 +1247,28 @@ class slist } } - //! Effects: This function sorts the list *this according to std::less. + //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. - //! + //! //! Throws: Nothing. //! //! Notes: Iterators and references are not invalidated. - //! + //! //! Complexity: The number of comparisons is approximately N log N, where N //! is the list's size. void sort() { this->sort(value_less()); } - //! Effects: This function sorts the list *this according to std::less. + //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. - //! + //! //! Throws: Nothing. //! //! Notes: Iterators and references are not invalidated. - //! + //! //! Complexity: The number of comparisons is approximately N log N, where N //! is the list's size. - template + template void sort(StrictWeakOrdering comp) { // nothing if the slist has length 0 or 1. @@ -1254,10 +1279,10 @@ class slist /// @cond private: - iterator priv_insert(const_iterator p, const value_type& x) + iterator priv_insert(const_iterator p, const value_type& x) { return this->insert_after(previous(p), x); } - iterator priv_insert_after(const_iterator prev_pos, const value_type& x) + iterator priv_insert_after(const_iterator prev_pos, const value_type& x) { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(x))); } void priv_push_front(const value_type &x) @@ -1333,14 +1358,14 @@ class slist template void priv_insert_dispatch(const_iterator prev, InputIter first, InputIter last, - containers_detail::false_) + container_detail::false_) { this->priv_create_and_insert_nodes(prev, first, last); } template - void priv_insert_dispatch(const_iterator prev, Integer n, Integer x, containers_detail::true_) - { this->priv_create_and_insert_nodes(prev, (std::size_t)n, x); } + void priv_insert_dispatch(const_iterator prev, Integer n, Integer x, container_detail::true_) + { this->priv_create_and_insert_nodes(prev, (size_type)n, x); } - void priv_fill_assign(size_type n, const T& val) + void priv_fill_assign(size_type n, const T& val) { iterator end_n(this->end()); iterator prev(this->before_begin()); @@ -1357,11 +1382,11 @@ class slist } template - void priv_assign_dispatch(Int n, Int val, containers_detail::true_) + void priv_assign_dispatch(Int n, Int val, container_detail::true_) { this->priv_fill_assign((size_type) n, (T)val); } template - void priv_assign_dispatch(InpIt first, InpIt last, containers_detail::false_) + void priv_assign_dispatch(InpIt first, InpIt last, container_detail::false_) { iterator end_n(this->end()); iterator prev(this->before_begin()); @@ -1379,11 +1404,11 @@ class slist } template - void priv_insert_after_range_dispatch(const_iterator prev_pos, Int n, Int x, containers_detail::true_) - { this->priv_create_and_insert_nodes(prev_pos, (std::size_t)n, x); } + void priv_insert_after_range_dispatch(const_iterator prev_pos, Int n, Int x, container_detail::true_) + { this->priv_create_and_insert_nodes(prev_pos, (size_type)n, x); } template - void priv_insert_after_range_dispatch(const_iterator prev_pos, InIter first, InIter last, containers_detail::false_) + void priv_insert_after_range_dispatch(const_iterator prev_pos, InIter first, InIter last, container_detail::false_) { this->priv_create_and_insert_nodes(prev_pos, first, last); } //Functors for member algorithm defaults @@ -1413,7 +1438,7 @@ class slist }; template -inline bool +inline bool operator==(const slist& x, const slist& y) { if(x.size() != y.size()){ @@ -1440,27 +1465,27 @@ operator<(const slist& sL1, const slist& sL2) } template -inline bool -operator!=(const slist& sL1, const slist& sL2) +inline bool +operator!=(const slist& sL1, const slist& sL2) { return !(sL1 == sL2); } template -inline bool -operator>(const slist& sL1, const slist& sL2) +inline bool +operator>(const slist& sL1, const slist& sL2) { return sL2 < sL1; } template -inline bool +inline bool operator<=(const slist& sL1, const slist& sL2) { return !(sL2 < sL1); } template -inline bool +inline bool operator>=(const slist& sL1, const slist& sL2) { return !(sL1 < sL2); } template -inline void swap(slist& x, slist& y) +inline void swap(slist& x, slist& y) { x.swap(y); } }} @@ -1488,12 +1513,12 @@ namespace container { ///@cond -//Ummm, I don't like to define things in namespace std, but +//Ummm, I don't like to define things in namespace std, but //there is no other way namespace std { template -class insert_iterator > +class insert_iterator > { protected: typedef boost::container::slist Container; @@ -1507,14 +1532,14 @@ class insert_iterator > typedef void pointer; typedef void reference; - insert_iterator(Container& x, - typename Container::iterator i, - bool is_previous = false) + insert_iterator(Container& x, + typename Container::iterator i, + bool is_previous = false) : container(&x), iter(is_previous ? i : x.previous(i)){ } - insert_iterator& - operator=(const typename Container::value_type& value) - { + insert_iterator& + operator=(const typename Container::value_type& value) + { iter = container->insert_after(iter, value); return *this; } @@ -1527,6 +1552,6 @@ class insert_iterator > ///@endcond -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif /* BOOST_CONTAINERS_SLIST_HPP */ +#endif /* BOOST_CONTAINER_SLIST_HPP */ diff --git a/3party/boost/boost/container/stable_vector.hpp b/3party/boost/boost/container/stable_vector.hpp new file mode 100644 index 0000000000..d91eccd16e --- /dev/null +++ b/3party/boost/boost/container/stable_vector.hpp @@ -0,0 +1,1830 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2008-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// +// Stable vector. +// +// Copyright 2008 Joaquin M Lopez Munoz. +// 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 BOOST_CONTAINER_STABLE_VECTOR_HPP +#define BOOST_CONTAINER_STABLE_VECTOR_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +///@cond + +#include + +//#define STABLE_VECTOR_ENABLE_INVARIANT_CHECKING + +#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) +#include +#endif + +///@endcond + +namespace boost { +namespace container { + +///@cond + +namespace stable_vector_detail{ + +template +struct smart_ptr_type +{ + typedef typename SmartPtr::value_type value_type; + typedef value_type *pointer; + static pointer get (const SmartPtr &smartptr) + { return smartptr.get();} +}; + +template +struct smart_ptr_type +{ + typedef T value_type; + typedef value_type *pointer; + static pointer get (pointer ptr) + { return ptr;} +}; + +template +class clear_on_destroy +{ + public: + clear_on_destroy(C &c) + : c_(c), do_clear_(true) + {} + + void release() + { do_clear_ = false; } + + ~clear_on_destroy() + { + if(do_clear_){ + c_.clear(); + c_.clear_pool(); + } + } + + private: + clear_on_destroy(const clear_on_destroy &); + clear_on_destroy &operator=(const clear_on_destroy &); + C &c_; + bool do_clear_; +}; + +template +struct node_type_base +{ + node_type_base() + {} + void set_pointer(const VoidPtr &p) + { up = p; } + + VoidPtr up; +}; + +template +struct node_type + : public node_type_base +{ + private: + node_type(); + + public: + T value; +}; + +template +class iterator + : public std::iterator< std::random_access_iterator_tag + , T + , typename boost::intrusive:: + pointer_traits::difference_type + , Pointer + , Reference> +{ + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type void_ptr; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_void_ptr; + typedef node_type node_type_t; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type node_type_ptr_t; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_node_type_ptr_t; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type void_ptr_ptr; + + friend class iterator::template rebind_pointer::type>; + + public: + typedef std::random_access_iterator_tag iterator_category; + typedef T value_type; + typedef typename boost::intrusive:: + pointer_traits::difference_type difference_type; + typedef Pointer pointer; + typedef Reference reference; + + iterator() + {} + + explicit iterator(node_type_ptr_t pn) + : pn(pn) + {} + + iterator(const iterator::template rebind_pointer::type>& x) + : pn(x.pn) + {} + + private: + static node_type_ptr_t node_ptr_cast(const void_ptr &p) + { + return node_type_ptr_t(static_cast(container_detail::to_raw_pointer(p))); + } + + static const_node_type_ptr_t node_ptr_cast(const const_void_ptr &p) + { + return const_node_type_ptr_t(static_cast(container_detail::to_raw_pointer(p))); + } + + static void_ptr_ptr void_ptr_ptr_cast(const void_ptr &p) + { + return void_ptr_ptr(static_cast(container_detail::to_raw_pointer(p))); + } + + reference dereference() const + { return pn->value; } + bool equal(const iterator& x) const + { return pn==x.pn; } + void increment() + { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+1)); } + void decrement() + { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)-1)); } + void advance(difference_type n) + { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+n)); } + difference_type distance_to(const iterator& x)const + { return void_ptr_ptr_cast(x.pn->up) - void_ptr_ptr_cast(pn->up); } + + public: + //Pointer like operators + reference operator*() const { return this->dereference(); } + pointer operator->() const { return pointer(&this->dereference()); } + + //Increment / Decrement + iterator& operator++() + { this->increment(); return *this; } + + iterator operator++(int) + { iterator tmp(*this); ++*this; return iterator(tmp); } + + iterator& operator--() + { this->decrement(); return *this; } + + iterator operator--(int) + { iterator tmp(*this); --*this; return iterator(tmp); } + + reference operator[](difference_type off) const + { + iterator tmp(*this); + tmp += off; + return *tmp; + } + + iterator& operator+=(difference_type off) + { + pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+off)); + return *this; + } + + friend iterator operator+(const iterator &left, difference_type off) + { + iterator tmp(left); + tmp += off; + return tmp; + } + + friend iterator operator+(difference_type off, const iterator& right) + { + iterator tmp(right); + tmp += off; + return tmp; + } + + iterator& operator-=(difference_type off) + { *this += -off; return *this; } + + friend iterator operator-(const iterator &left, difference_type off) + { + iterator tmp(left); + tmp -= off; + return tmp; + } + + friend difference_type operator-(const iterator& left, const iterator& right) + { + return void_ptr_ptr_cast(left.pn->up) - void_ptr_ptr_cast(right.pn->up); + } + + //Comparison operators + friend bool operator== (const iterator& l, const iterator& r) + { return l.pn == r.pn; } + + friend bool operator!= (const iterator& l, const iterator& r) + { return l.pn != r.pn; } + + friend bool operator< (const iterator& l, const iterator& r) + { return void_ptr_ptr_cast(l.pn->up) < void_ptr_ptr_cast(r.pn->up); } + + friend bool operator<= (const iterator& l, const iterator& r) + { return void_ptr_ptr_cast(l.pn->up) <= void_ptr_ptr_cast(r.pn->up); } + + friend bool operator> (const iterator& l, const iterator& r) + { return void_ptr_ptr_cast(l.pn->up) > void_ptr_ptr_cast(r.pn->up); } + + friend bool operator>= (const iterator& l, const iterator& r) + { return void_ptr_ptr_cast(l.pn->up) >= void_ptr_ptr_cast(r.pn->up); } + + node_type_ptr_t pn; +}; + +template +struct select_multiallocation_chain +{ + typedef typename A::multiallocation_chain type; +}; + +template +struct select_multiallocation_chain +{ + typedef typename boost::intrusive::pointer_traits + ::pointer>:: + template rebind_pointer::type void_ptr; + typedef container_detail::basic_multiallocation_chain + multialloc_cached_counted; + typedef boost::container::container_detail:: + transform_multiallocation_chain + < multialloc_cached_counted + , typename allocator_traits::value_type> type; +}; + +} //namespace stable_vector_detail + +#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + +#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) + +#define STABLE_VECTOR_CHECK_INVARIANT \ +invariant_checker BOOST_JOIN(check_invariant_,__LINE__)(*this); \ +BOOST_JOIN(check_invariant_,__LINE__).touch(); +#else + +#define STABLE_VECTOR_CHECK_INVARIANT + +#endif //#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) + +#endif //#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + +/// @endcond + +//! Originally developed by Joaquin M. Lopez Munoz, stable_vector is std::vector +//! drop-in replacement implemented as a node container, offering iterator and reference +//! stability. +//! +//! More details taken the author's blog: +//! ( +//! Introducing stable_vector) +//! +//! We present stable_vector, a fully STL-compliant stable container that provides +//! most of the features of std::vector except element contiguity. +//! +//! General properties: stable_vector satisfies all the requirements of a container, +//! a reversible container and a sequence and provides all the optional operations +//! present in std::vector. Like std::vector, iterators are random access. +//! stable_vector does not provide element contiguity; in exchange for this absence, +//! the container is stable, i.e. references and iterators to an element of a stable_vector +//! remain valid as long as the element is not erased, and an iterator that has been +//! assigned the return value of end() always remain valid until the destruction of +//! the associated stable_vector. +//! +//! Operation complexity: The big-O complexities of stable_vector operations match +//! exactly those of std::vector. In general, insertion/deletion is constant time at +//! the end of the sequence and linear elsewhere. Unlike std::vector, stable_vector +//! does not internally perform any value_type destruction, copy or assignment +//! operations other than those exactly corresponding to the insertion of new +//! elements or deletion of stored elements, which can sometimes compensate in terms +//! of performance for the extra burden of doing more pointer manipulation and an +//! additional allocation per element. +//! +//! Exception safety: As stable_vector does not internally copy elements around, some +//! operations provide stronger exception safety guarantees than in std::vector: +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template > +#else +template +#endif +class stable_vector +{ + ///@cond + typedef allocator_traits allocator_traits_type; + typedef typename container_detail:: + move_const_ref_type::type insert_const_ref_type; + typedef typename boost::intrusive::pointer_traits + :: + template rebind_pointer::type void_ptr; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type const_void_ptr; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type void_ptr_ptr; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type const_void_ptr_ptr; + typedef stable_vector_detail::node_type + node_type_t; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type node_type_ptr_t; + typedef stable_vector_detail::node_type_base + node_type_base_t; + typedef typename boost::intrusive::pointer_traits + ::template + rebind_pointer::type node_type_base_ptr_t; + typedef ::boost::container::vector::type> impl_type; + typedef typename impl_type::iterator impl_iterator; + typedef typename impl_type::const_iterator const_impl_iterator; + + typedef ::boost::container::container_detail:: + integral_constant allocator_v1; + typedef ::boost::container::container_detail:: + integral_constant allocator_v2; + typedef ::boost::container::container_detail::integral_constant + ::value> alloc_version; + typedef typename allocator_traits_type:: + template portable_rebind_alloc + ::type node_allocator_type; + + node_type_ptr_t allocate_one() + { return this->allocate_one(alloc_version()); } + + template + node_type_ptr_t allocate_one(AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { return node_alloc().allocate(1); } + + template + node_type_ptr_t allocate_one(AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { return node_alloc().allocate_one(); } + + void deallocate_one(node_type_ptr_t p) + { return this->deallocate_one(p, alloc_version()); } + + template + void deallocate_one(node_type_ptr_t p, AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { node_alloc().deallocate(p, 1); } + + template + void deallocate_one(node_type_ptr_t p, AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { node_alloc().deallocate_one(p); } + + friend class stable_vector_detail::clear_on_destroy; + ///@endcond + public: + + + // types: + + typedef typename allocator_traits_type::reference reference; + typedef typename allocator_traits_type::const_reference const_reference; + typedef typename allocator_traits_type::pointer pointer; + typedef typename allocator_traits_type::const_pointer const_pointer; + typedef stable_vector_detail::iterator + iterator; + typedef stable_vector_detail::iterator + const_iterator; + typedef typename impl_type::size_type size_type; + typedef typename iterator::difference_type difference_type; + typedef T value_type; + typedef A allocator_type; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; + typedef node_allocator_type stored_allocator_type; + + ///@cond + private: + BOOST_COPYABLE_AND_MOVABLE(stable_vector) + static const size_type ExtraPointers = 3; + //This container stores metadata at the end of the void_ptr vector with additional 3 pointers: + // back() is impl.back() - ExtraPointers; + // end node index is impl.end()[-3] + // Node cache first is impl.end()[-2]; + // Node cache last is *impl.back(); + + typedef typename stable_vector_detail:: + select_multiallocation_chain + < node_allocator_type + , alloc_version::value + >::type multiallocation_chain; + ///@endcond + public: + + //! Effects: Default constructs a stable_vector. + //! + //! Throws: If allocator_type's default constructor throws. + //! + //! Complexity: Constant. + stable_vector() + : internal_data(), impl() + { + STABLE_VECTOR_CHECK_INVARIANT; + } + + //! Effects: Constructs a stable_vector taking the allocator as parameter. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + explicit stable_vector(const allocator_type& al) + : internal_data(al),impl(al) + { + STABLE_VECTOR_CHECK_INVARIANT; + } + + //! Effects: Constructs a stable_vector that will use a copy of allocator a + //! and inserts n default contructed values. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's default or copy constructor throws. + //! + //! Complexity: Linear to n. + explicit stable_vector(size_type n) + : internal_data(),impl() + { + stable_vector_detail::clear_on_destroy cod(*this); + this->resize(n); + STABLE_VECTOR_CHECK_INVARIANT; + cod.release(); + } + + //! Effects: Constructs a stable_vector that will use a copy of allocator a + //! and inserts n copies of value. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's default or copy constructor throws. + //! + //! Complexity: Linear to n. + stable_vector(size_type n, const T& t, const allocator_type& al = allocator_type()) + : internal_data(al),impl(al) + { + stable_vector_detail::clear_on_destroy cod(*this); + this->insert(this->cbegin(), n, t); + STABLE_VECTOR_CHECK_INVARIANT; + cod.release(); + } + + //! Effects: Constructs a stable_vector that will use a copy of allocator a + //! and inserts a copy of the range [first, last) in the stable_vector. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's constructor taking an dereferenced InIt throws. + //! + //! Complexity: Linear to the range [first, last). + template + stable_vector(InputIterator first,InputIterator last, const allocator_type& al = allocator_type()) + : internal_data(al),impl(al) + { + stable_vector_detail::clear_on_destroy cod(*this); + this->insert(this->cbegin(), first, last); + STABLE_VECTOR_CHECK_INVARIANT; + cod.release(); + } + + //! Effects: Copy constructs a stable_vector. + //! + //! Postcondition: x == *this. + //! + //! Complexity: Linear to the elements x contains. + stable_vector(const stable_vector& x) + : internal_data(allocator_traits:: + select_on_container_copy_construction(x.node_alloc())) + , impl(allocator_traits:: + select_on_container_copy_construction(x.impl.get_stored_allocator())) + { + stable_vector_detail::clear_on_destroy cod(*this); + this->insert(this->cbegin(), x.begin(), x.end()); + STABLE_VECTOR_CHECK_INVARIANT; + cod.release(); + } + + //! Effects: Move constructor. Moves mx's resources to *this. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + stable_vector(BOOST_RV_REF(stable_vector) x) + : internal_data(boost::move(x.node_alloc())), impl(boost::move(x.impl)) + { + this->priv_swap_members(x); + } + + //! Effects: Copy constructs a stable_vector using the specified allocator. + //! + //! Postcondition: x == *this. + //! + //! Complexity: Linear to the elements x contains. + stable_vector(const stable_vector& x, const allocator_type &a) + : internal_data(a), impl(a) + { + stable_vector_detail::clear_on_destroy cod(*this); + this->insert(this->cbegin(), x.begin(), x.end()); + STABLE_VECTOR_CHECK_INVARIANT; + cod.release(); + } + + //! Effects: Move constructor using the specified allocator. + //! Moves mx's resources to *this. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant if a == x.get_allocator(), linear otherwise + stable_vector(BOOST_RV_REF(stable_vector) x, const allocator_type &a) + : internal_data(a), impl(a) + { + if(this->node_alloc() == x.node_alloc()){ + this->priv_swap_members(x); + } + else{ + stable_vector_detail::clear_on_destroy cod(*this); + this->insert(this->cbegin(), x.begin(), x.end()); + STABLE_VECTOR_CHECK_INVARIANT; + cod.release(); + } + } + + //! Effects: Destroys the stable_vector. All stored values are destroyed + //! and used memory is deallocated. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements. + ~stable_vector() + { + this->clear(); + clear_pool(); + } + + //! Effects: Makes *this contain the same elements as x. + //! + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to the number of elements in x. + stable_vector& operator=(BOOST_COPY_ASSIGN_REF(stable_vector) x) + { + STABLE_VECTOR_CHECK_INVARIANT; + if (&x != this){ + node_allocator_type &this_alloc = this->node_alloc(); + const node_allocator_type &x_alloc = x.node_alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + this->shrink_to_fit(); + } + container_detail::assign_alloc(this->node_alloc(), x.node_alloc(), flag); + container_detail::assign_alloc(this->impl.get_stored_allocator(), x.impl.get_stored_allocator(), flag); + this->assign(x.begin(), x.end()); + } + return *this; + } + + //! Effects: Move assignment. All mx's values are transferred to *this. + //! + //! Postcondition: x.empty(). *this contains a the elements x had + //! before the function. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Linear. + stable_vector& operator=(BOOST_RV_REF(stable_vector) x) + { + if (&x != this){ + node_allocator_type &this_alloc = this->node_alloc(); + node_allocator_type &x_alloc = x.node_alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy objects but retain memory + this->clear(); + this->impl = boost::move(x.impl); + this->priv_swap_members(x); + //Move allocator if needed + container_detail::bool_ flag; + container_detail::move_alloc(this->node_alloc(), x.node_alloc(), flag); + } + //If unequal allocators, then do a one by one move + else{ + typedef typename std::iterator_traits::iterator_category ItCat; + this->assign( boost::make_move_iterator(x.begin()) + , boost::make_move_iterator(x.end())); + } + } + return *this; + } + + //! Effects: Assigns the the range [first, last) to *this. + //! + //! Throws: If memory allocation throws or + //! T's constructor from dereferencing InpIt throws. + //! + //! Complexity: Linear to n. + template + void assign(InputIterator first,InputIterator last) + { + assign_dispatch(first, last, boost::is_integral()); + } + + + //! Effects: Assigns the n copies of val to *this. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + void assign(size_type n,const T& t) + { + typedef constant_iterator cvalue_iterator; + return assign_dispatch(cvalue_iterator(t, n), cvalue_iterator(), boost::mpl::false_()); + } + + //! Effects: Returns a copy of the internal allocator. + //! + //! Throws: If allocator's copy constructor throws. + //! + //! Complexity: Constant. + allocator_type get_allocator()const {return this->node_alloc();} + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT + { return node_alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT + { return node_alloc(); } + + + //! Effects: Returns an iterator to the first element contained in the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator begin() + { return (impl.empty()) ? end(): iterator(node_ptr_cast(impl.front())) ; } + + //! Effects: Returns a const_iterator to the first element contained in the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator begin()const + { return (impl.empty()) ? cend() : const_iterator(node_ptr_cast(impl.front())) ; } + + //! Effects: Returns an iterator to the end of the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator end() {return iterator(get_end_node());} + + //! Effects: Returns a const_iterator to the end of the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator end()const {return const_iterator(get_end_node());} + + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rbegin() {return reverse_iterator(this->end());} + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rbegin()const {return const_reverse_iterator(this->end());} + + //! Effects: Returns a reverse_iterator pointing to the end + //! of the reversed stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rend() {return reverse_iterator(this->begin());} + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rend()const {return const_reverse_iterator(this->begin());} + + //! Effects: Returns a const_iterator to the first element contained in the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin()const {return this->begin();} + + //! Effects: Returns a const_iterator to the end of the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend()const {return this->end();} + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin()const{return this->rbegin();} + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend()const {return this->rend();} + + //! Effects: Returns the number of the elements contained in the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type size() const + { return impl.empty() ? 0 : (impl.size() - ExtraPointers); } + + //! Effects: Returns the largest possible size of the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type max_size() const + { return impl.max_size() - ExtraPointers; } + + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type capacity() const + { + if(!impl.capacity()){ + return 0; + } + else{ + const size_type num_nodes = this->impl.size() + this->internal_data.pool_size; + const size_type num_buck = this->impl.capacity(); + return (num_nodes < num_buck) ? num_nodes : num_buck; + } + } + + //! Effects: Returns true if the stable_vector contains no elements. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + bool empty() const + { return impl.empty() || impl.size() == ExtraPointers; } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type n, const T& t) + { + STABLE_VECTOR_CHECK_INVARIANT; + if(n > size()) + this->insert(this->cend(), n - this->size(), t); + else if(n < this->size()) + this->erase(this->cbegin() + n, this->cend()); + } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type n) + { + typedef default_construct_iterator default_iterator; + STABLE_VECTOR_CHECK_INVARIANT; + if(n > size()) + this->insert(this->cend(), default_iterator(n - this->size()), default_iterator()); + else if(n < this->size()) + this->erase(this->cbegin() + n, this->cend()); + } + + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. + //! + //! Throws: If memory allocation allocation throws. + void reserve(size_type n) + { + STABLE_VECTOR_CHECK_INVARIANT; + if(n > this->max_size()) + throw std::bad_alloc(); + + size_type size = this->size(); + size_type old_capacity = this->capacity(); + if(n > old_capacity){ + this->initialize_end_node(n); + const void * old_ptr = &impl[0]; + impl.reserve(n + ExtraPointers); + bool realloced = &impl[0] != old_ptr; + //Fix the pointers for the newly allocated buffer + if(realloced){ + this->align_nodes(impl.begin(), impl.begin()+size+1); + } + //Now fill pool if data is not enough + if((n - size) > this->internal_data.pool_size){ + this->add_to_pool((n - size) - this->internal_data.pool_size); + } + } + } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference operator[](size_type n){return value(impl[n]);} + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference operator[](size_type n)const{return value(impl[n]);} + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + reference at(size_type n) + { + if(n>=size()) + throw std::out_of_range("invalid subscript at stable_vector::at"); + return operator[](n); + } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + const_reference at(size_type n)const + { + if(n>=size()) + throw std::out_of_range("invalid subscript at stable_vector::at"); + return operator[](n); + } + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the first + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference front() + { return value(impl.front()); } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the first + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference front()const + { return value(impl.front()); } + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference back() + { return value(*(&impl.back() - ExtraPointers)); } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference back()const + { return value(*(&impl.back() - ExtraPointers)); } + + //! Effects: Inserts a copy of x at the end of the stable_vector. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_back(insert_const_ref_type x) + { return priv_push_back(x); } + + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + void push_back(T &x) { push_back(const_cast(x)); } + + template + void push_back(const U &u, typename container_detail::enable_if_c + ::value && !::boost::has_move_emulation_enabled::value >::type* =0) + { return priv_push_back(u); } + #endif + + //! Effects: Constructs a new element in the end of the stable_vector + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_back(BOOST_RV_REF(T) t) + { this->insert(end(), boost::move(t)); } + + //! Effects: Removes the last element from the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant time. + void pop_back() + { this->erase(this->end()-1); } + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a copy of x before position. + //! + //! Throws: If memory allocation throws or x's copy constructor throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, insert_const_ref_type x) + { return this->priv_insert(position, x); } + + #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } + + template + iterator insert(const_iterator position, const U &u, typename container_detail::enable_if_c + ::value && !::boost::has_move_emulation_enabled::value >::type* =0) + { return this->priv_insert(position, u); } + #endif + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a new element before position with mx's resources. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, BOOST_RV_REF(T) x) + { + typedef repeat_iterator repeat_it; + typedef boost::move_iterator repeat_move_it; + //Just call more general insert(pos, size, value) and return iterator + size_type pos_n = position - cbegin(); + this->insert(position + ,repeat_move_it(repeat_it(x, 1)) + ,repeat_move_it(repeat_it())); + return iterator(this->begin() + pos_n); + } + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert n copies of x before pos. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + void insert(const_iterator position, size_type n, const T& t) + { + STABLE_VECTOR_CHECK_INVARIANT; + this->insert_not_iter(position, n, t); + } + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert a copy of the [first, last) range before pos. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InpIt throws or T's copy constructor throws. + //! + //! Complexity: Linear to std::distance [first, last). + template + void insert(const_iterator position,InputIterator first, InputIterator last) + { + STABLE_VECTOR_CHECK_INVARIANT; + this->insert_iter(position,first,last, + boost::mpl::not_ >()); + } + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the end of the stable_vector. + //! + //! Throws: If memory allocation throws or the in-place constructor throws. + //! + //! Complexity: Amortized constant time. + template + void emplace_back(Args &&...args) + { + typedef emplace_functor EmplaceFunctor; + typedef emplace_iterator EmplaceIterator; + EmplaceFunctor &&ef = EmplaceFunctor(boost::forward(args)...); + this->insert(this->cend(), EmplaceIterator(ef), EmplaceIterator()); + } + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... before position + //! + //! Throws: If memory allocation throws or the in-place constructor throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + template + iterator emplace(const_iterator position, Args && ...args) + { + //Just call more general insert(pos, size, value) and return iterator + size_type pos_n = position - cbegin(); + typedef emplace_functor EmplaceFunctor; + typedef emplace_iterator EmplaceIterator; + EmplaceFunctor &&ef = EmplaceFunctor(boost::forward(args)...); + this->insert(position, EmplaceIterator(ef), EmplaceIterator()); + return iterator(this->begin() + pos_n); + } + + #else + + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + typedef BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \ + BOOST_PP_EXPR_IF(n, <) BOOST_PP_ENUM_PARAMS(n, P) BOOST_PP_EXPR_IF(n, >) \ + EmplaceFunctor; \ + typedef emplace_iterator EmplaceIterator; \ + EmplaceFunctor ef BOOST_PP_LPAREN_IF(n) \ + BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) \ + BOOST_PP_RPAREN_IF(n); \ + this->insert(this->cend() , EmplaceIterator(ef), EmplaceIterator()); \ + } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(const_iterator pos \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + typedef BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \ + BOOST_PP_EXPR_IF(n, <) BOOST_PP_ENUM_PARAMS(n, P) BOOST_PP_EXPR_IF(n, >) \ + EmplaceFunctor; \ + typedef emplace_iterator EmplaceIterator; \ + EmplaceFunctor ef BOOST_PP_LPAREN_IF(n) \ + BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) \ + BOOST_PP_RPAREN_IF(n); \ + size_type pos_n = pos - this->cbegin(); \ + this->insert(pos, EmplaceIterator(ef), EmplaceIterator()); \ + return iterator(this->begin() + pos_n); \ + } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + //! Effects: Erases the element at position pos. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the elements between pos and the + //! last element. Constant if pos is the last element. + iterator erase(const_iterator position) + { + STABLE_VECTOR_CHECK_INVARIANT; + difference_type d = position - this->cbegin(); + impl_iterator it = impl.begin() + d; + this->delete_node(*it); + it = impl.erase(it); + this->align_nodes(it, get_last_align()); + return this->begin()+d; + } + + //! Effects: Erases the elements pointed by [first, last). + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the distance between first and last + //! plus linear to the elements between pos and the last element. + iterator erase(const_iterator first, const_iterator last) + { return priv_erase(first, last, alloc_version()); } + + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(stable_vector & x) + { + STABLE_VECTOR_CHECK_INVARIANT; + container_detail::bool_ flag; + container_detail::swap_alloc(this->node_alloc(), x.node_alloc(), flag); + //vector's allocator is swapped here + this->impl.swap(x.impl); + this->priv_swap_members(x); + } + + //! Effects: Erases all the elements of the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements in the stable_vector. + void clear() + { this->erase(this->cbegin(),this->cend()); } + + //! Effects: Tries to deallocate the excess of memory created + //! with previous allocations. The size of the stable_vector is unchanged + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { + if(this->capacity()){ + //First empty allocated node pool + this->clear_pool(); + //If empty completely destroy the index, let's recover default-constructed state + if(this->empty()){ + this->impl.clear(); + this->impl.shrink_to_fit(); + this->internal_data.set_end_pointer_to_default_constructed(); + } + //Otherwise, try to shrink-to-fit the index and readjust pointers if necessary + else{ + const size_type size = this->size(); + const void* old_ptr = &impl[0]; + this->impl.shrink_to_fit(); + bool realloced = &impl[0] != old_ptr; + //Fix the pointers for the newly allocated buffer + if(realloced){ + this->align_nodes(impl.begin(), impl.begin()+size+1); + } + } + } + } + + /// @cond + + iterator priv_insert(const_iterator position, const value_type &t) + { + typedef constant_iterator cvalue_iterator; + return this->insert_iter(position, cvalue_iterator(t, 1), cvalue_iterator(), std::forward_iterator_tag()); + } + + void priv_push_back(const value_type &t) + { this->insert(end(), t); } + + template + void clear_pool(AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { + if(!impl.empty() && impl.back()){ + void_ptr &pool_first_ref = impl.end()[-2]; + void_ptr &pool_last_ref = impl.back(); + + multiallocation_chain holder; + holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, this->internal_data.pool_size); + while(!holder.empty()){ + node_type_ptr_t n = holder.front(); + holder.pop_front(); + this->deallocate_one(n); + } + pool_first_ref = pool_last_ref = 0; + this->internal_data.pool_size = 0; + } + } + + template + void clear_pool(AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { + if(!impl.empty() && impl.back()){ + void_ptr &pool_first_ref = impl.end()[-2]; + void_ptr &pool_last_ref = impl.back(); + multiallocation_chain holder; + holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); + node_alloc().deallocate_individual(boost::move(holder)); + pool_first_ref = pool_last_ref = 0; + this->internal_data.pool_size = 0; + } + } + + void clear_pool() + { + this->clear_pool(alloc_version()); + } + + void add_to_pool(size_type n) + { + this->add_to_pool(n, alloc_version()); + } + + template + void add_to_pool(size_type n, AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { + size_type remaining = n; + while(remaining--){ + this->put_in_pool(this->allocate_one()); + } + } + + template + void add_to_pool(size_type n, AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { + void_ptr &pool_first_ref = impl.end()[-2]; + void_ptr &pool_last_ref = impl.back(); + multiallocation_chain holder; + holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); + //BOOST_STATIC_ASSERT((::boost::has_move_emulation_enabled::value == true)); + multiallocation_chain m (node_alloc().allocate_individual(n)); + holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n); + this->internal_data.pool_size += n; + std::pair data(holder.extract_data()); + pool_first_ref = data.first; + pool_last_ref = data.second; + } + + void put_in_pool(node_type_ptr_t p) + { + void_ptr &pool_first_ref = impl.end()[-2]; + void_ptr &pool_last_ref = impl.back(); + multiallocation_chain holder; + holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); + holder.push_front(p); + ++this->internal_data.pool_size; + std::pair ret(holder.extract_data()); + pool_first_ref = ret.first; + pool_last_ref = ret.second; + } + + node_type_ptr_t get_from_pool() + { + if(!impl.back()){ + return node_type_ptr_t(0); + } + else{ + void_ptr &pool_first_ref = impl.end()[-2]; + void_ptr &pool_last_ref = impl.back(); + multiallocation_chain holder; + holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); + node_type_ptr_t ret = holder.front(); + holder.pop_front(); + --this->internal_data.pool_size; + if(!internal_data.pool_size){ + pool_first_ref = pool_last_ref = void_ptr(0); + } + else{ + std::pair data(holder.extract_data()); + pool_first_ref = data.first; + pool_last_ref = data.second; + } + return ret; + } + } + + void insert_iter_prolog(size_type n, difference_type d) + { + initialize_end_node(n); + const void* old_ptr = &impl[0]; + //size_type old_capacity = capacity(); + //size_type old_size = size(); + impl.insert(impl.begin()+d, n, 0); + bool realloced = &impl[0] != old_ptr; + //Fix the pointers for the newly allocated buffer + if(realloced){ + align_nodes(impl.begin(), impl.begin()+d); + } + } + + template + void assign_dispatch(InputIterator first, InputIterator last, boost::mpl::false_) + { + STABLE_VECTOR_CHECK_INVARIANT; + iterator first1 = this->begin(); + iterator last1 = this->end(); + for ( ; first1 != last1 && first != last; ++first1, ++first) + *first1 = *first; + if (first == last){ + this->erase(first1, last1); + } + else{ + this->insert(last1, first, last); + } + } + + template + void assign_dispatch(Integer n, Integer t, boost::mpl::true_) + { + typedef constant_iterator cvalue_iterator; + this->assign_dispatch(cvalue_iterator(t, n), cvalue_iterator(), boost::mpl::false_()); + } + + iterator priv_erase(const_iterator first, const_iterator last, allocator_v1) + { + STABLE_VECTOR_CHECK_INVARIANT; + difference_type d1 = first - this->cbegin(), d2 = last - this->cbegin(); + if(d1 != d2){ + impl_iterator it1(impl.begin() + d1), it2(impl.begin() + d2); + for(impl_iterator it = it1; it != it2; ++it) + this->delete_node(*it); + impl_iterator e = impl.erase(it1, it2); + this->align_nodes(e, get_last_align()); + } + return iterator(this->begin() + d1); + } + + impl_iterator get_last_align() + { + return impl.end() - (ExtraPointers - 1); + } + + const_impl_iterator get_last_align() const + { + return impl.cend() - (ExtraPointers - 1); + } + + template + iterator priv_erase(const_iterator first, const_iterator last, AllocatorVersion, + typename boost::container::container_detail::enable_if_c + + ::value>::type * = 0) + { + STABLE_VECTOR_CHECK_INVARIANT; + return priv_erase(first, last, allocator_v1()); + } + + static node_type_ptr_t node_ptr_cast(const void_ptr &p) + { + return node_type_ptr_t(static_cast(container_detail::to_raw_pointer(p))); + } + + static node_type_base_ptr_t node_base_ptr_cast(const void_ptr &p) + { + return node_type_base_ptr_t(static_cast(container_detail::to_raw_pointer(p))); + } + + static value_type& value(const void_ptr &p) + { + return node_ptr_cast(p)->value; + } + + void initialize_end_node(size_type impl_capacity = 0) + { + if(impl.empty()){ + impl.reserve(impl_capacity + ExtraPointers); + impl.resize (ExtraPointers, void_ptr(0)); + impl[0] = &this->internal_data.end_node; + this->internal_data.end_node.up = &impl[0]; + } + } + + void readjust_end_node() + { + if(!this->impl.empty()){ + void_ptr &end_node_ref = *(this->get_last_align()-1); + end_node_ref = this->get_end_node(); + this->internal_data.end_node.up = &end_node_ref; + } + else{ + this->internal_data.end_node.up = void_ptr(&this->internal_data.end_node.up); + } + } + + node_type_ptr_t get_end_node() const + { + const node_type_base_t* cp = &this->internal_data.end_node; + node_type_base_t* p = const_cast(cp); + return node_ptr_cast(p); + } + + template + void_ptr new_node(const void_ptr &up, Iter it) + { + node_type_ptr_t p = this->allocate_one(); + try{ + boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->value), it); + //This does not throw + ::new(static_cast(container_detail::to_raw_pointer(p))) node_type_base_t; + p->set_pointer(up); + } + catch(...){ + this->deallocate_one(p); + throw; + } + return p; + } + + void delete_node(const void_ptr &p) + { + node_type_ptr_t n(node_ptr_cast(p)); + allocator_traits:: + destroy(this->node_alloc(), container_detail::to_raw_pointer(n)); + this->put_in_pool(n); + } + + static void align_nodes(impl_iterator first, impl_iterator last) + { + while(first!=last){ + node_ptr_cast(*first)->up = void_ptr(&*first); + ++first; + } + } + + void insert_not_iter(const_iterator position, size_type n, const T& t) + { + typedef constant_iterator cvalue_iterator; + this->insert_iter(position, cvalue_iterator(t, n), cvalue_iterator(), std::forward_iterator_tag()); + } + + template + void insert_iter(const_iterator position,InputIterator first,InputIterator last, boost::mpl::true_) + { + typedef typename std::iterator_traits::iterator_category category; + this->insert_iter(position, first, last, category()); + } + + template + void insert_iter(const_iterator position,InputIterator first,InputIterator last,std::input_iterator_tag) + { + for(; first!=last; ++first){ + this->insert(position, *first); + } + } + + template + iterator insert_iter(const_iterator position, InputIterator first, InputIterator last, std::forward_iterator_tag) + { + size_type n = (size_type)std::distance(first,last); + difference_type d = position-this->cbegin(); + if(n){ + this->insert_iter_prolog(n, d); + const impl_iterator it(impl.begin() + d); + this->insert_iter_fwd(it, first, last, n); + //Fix the pointers for the newly allocated buffer + this->align_nodes(it + n, get_last_align()); + } + return this->begin() + d; + } + + template + void insert_iter_fwd_alloc(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n, allocator_v1) + { + size_type i=0; + try{ + while(first!=last){ + it[i] = this->new_node(void_ptr_ptr(&it[i]), first); + ++first; + ++i; + } + } + catch(...){ + impl_iterator e = impl.erase(it + i, it + n); + this->align_nodes(e, get_last_align()); + throw; + } + } + + template + void insert_iter_fwd_alloc(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n, allocator_v2) + { + multiallocation_chain mem(node_alloc().allocate_individual(n)); + + size_type i = 0; + node_type_ptr_t p = 0; + try{ + while(first != last){ + p = mem.front(); + mem.pop_front(); + //This can throw + boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->value), first); + //This does not throw + ::new(static_cast(container_detail::to_raw_pointer(p))) node_type_base_t; + p->set_pointer(void_ptr_ptr(&it[i])); + ++first; + it[i] = p; + ++i; + } + } + catch(...){ + node_alloc().deallocate_one(p); + node_alloc().deallocate_many(boost::move(mem)); + impl_iterator e = impl.erase(it+i, it+n); + this->align_nodes(e, get_last_align()); + throw; + } + } + + template + void insert_iter_fwd(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n) + { + size_type i = 0; + node_type_ptr_t p = 0; + try{ + while(first != last){ + p = this->get_from_pool(); + if(!p){ + insert_iter_fwd_alloc(it+i, first, last, n-i, alloc_version()); + break; + } + //This can throw + boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->value), first); + //This does not throw + ::new(static_cast(container_detail::to_raw_pointer(p))) node_type_base_t; + p->set_pointer(void_ptr_ptr(&it[i])); + ++first; + it[i]=p; + ++i; + } + } + catch(...){ + put_in_pool(p); + impl_iterator e = impl.erase(it+i, it+n); + this->align_nodes(e, get_last_align()); + throw; + } + } + + template + void insert_iter(const_iterator position, InputIterator first, InputIterator last, boost::mpl::false_) + { + this->insert_not_iter(position, first, last); + } + + #if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) + bool invariant()const + { + if(impl.empty()) + return !capacity() && !size(); + if(get_end_node() != *(impl.end() - ExtraPointers)){ + return false; + } + for(const_impl_iterator it = impl.begin(), it_end = get_last_align(); it != it_end; ++it){ + if(const_void_ptr(node_ptr_cast(*it)->up) != + const_void_ptr(const_void_ptr_ptr(&*it))) + return false; + } + size_type n = capacity()-size(); + const void_ptr &pool_head = impl.back(); + size_type num_pool = 0; + node_type_ptr_t p = node_ptr_cast(pool_head); + while(p){ + ++num_pool; + p = node_ptr_cast(p->up); + } + return n >= num_pool; + } + + class invariant_checker + { + invariant_checker(const invariant_checker &); + invariant_checker & operator=(const invariant_checker &); + const stable_vector* p; + + public: + invariant_checker(const stable_vector& v):p(&v){} + ~invariant_checker(){BOOST_ASSERT(p->invariant());} + void touch(){} + }; + #endif + + class ebo_holder + : public node_allocator_type + { + private: + BOOST_MOVABLE_BUT_NOT_COPYABLE(ebo_holder) + public: +/* + explicit ebo_holder(BOOST_RV_REF(ebo_holder) x) + : node_allocator_type(boost::move(static_cast(x))) + , pool_size(0) + , end_node() + {} +*/ + template + explicit ebo_holder(BOOST_FWD_REF(AllocatorRLValue) a) + : node_allocator_type(boost::forward(a)) + , pool_size(0) + , end_node() + { + this->set_end_pointer_to_default_constructed(); + } + + ebo_holder() + : node_allocator_type() + , pool_size(0) + , end_node() + { + this->set_end_pointer_to_default_constructed(); + } + + void set_end_pointer_to_default_constructed() + { + end_node.set_pointer(void_ptr(&end_node.up)); + } + + size_type pool_size; + node_type_base_t end_node; + } internal_data; + + void priv_swap_members(stable_vector &x) + { + container_detail::do_swap(this->internal_data.pool_size, x.internal_data.pool_size); + this->readjust_end_node(); + x.readjust_end_node(); + } + + node_allocator_type &node_alloc() { return internal_data; } + const node_allocator_type &node_alloc() const { return internal_data; } + + impl_type impl; + /// @endcond +}; + +template +bool operator==(const stable_vector& x,const stable_vector& y) +{ + return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin()); +} + +template +bool operator< (const stable_vector& x,const stable_vector& y) +{ + return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end()); +} + +template +bool operator!=(const stable_vector& x,const stable_vector& y) +{ + return !(x==y); +} + +template +bool operator> (const stable_vector& x,const stable_vector& y) +{ + return y +bool operator>=(const stable_vector& x,const stable_vector& y) +{ + return !(x +bool operator<=(const stable_vector& x,const stable_vector& y) +{ + return !(x>y); +} + +// specialized algorithms: + +template +void swap(stable_vector& x,stable_vector& y) +{ + x.swap(y); +} + +/// @cond + +#undef STABLE_VECTOR_CHECK_INVARIANT + +/// @endcond + +}} + +#include + +#endif //BOOST_CONTAINER_STABLE_VECTOR_HPP diff --git a/3party/boost/boost/container/string.hpp b/3party/boost/boost/container/string.hpp new file mode 100644 index 0000000000..2a64cec428 --- /dev/null +++ b/3party/boost/boost/container/string.hpp @@ -0,0 +1,2922 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2012. 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) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 1996,1997 +// Silicon Graphics Computer Systems, Inc. +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Silicon Graphics makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. +// +// +// Copyright (c) 1994 +// Hewlett-Packard Company +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Hewlett-Packard Company makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. + +#ifndef BOOST_CONTAINER_STRING_HPP +#define BOOST_CONTAINER_STRING_HPP + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +namespace boost { +namespace container { +#else +namespace boost { +namespace container { +#endif + +/// @cond +namespace container_detail { +// ------------------------------------------------------------ +// Class basic_string_base. + +// basic_string_base is a helper class that makes it it easier to write +// an exception-safe version of basic_string. The constructor allocates, +// but does not initialize, a block of memory. The destructor +// deallocates, but does not destroy elements within, a block of +// memory. The destructor assumes that the memory either is the internal buffer, +// or else points to a block of memory that was allocated using _String_base's +// allocator and whose size is this->m_storage. +template +class basic_string_base +{ + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_string_base) + + typedef allocator_traits allocator_traits_type; + public: + typedef A allocator_type; + //! The stored allocator type + typedef allocator_type stored_allocator_type; + typedef typename allocator_traits_type::pointer pointer; + typedef typename allocator_traits_type::value_type value_type; + typedef typename allocator_traits_type::size_type size_type; + + basic_string_base() + : members_() + { init(); } + + basic_string_base(const allocator_type& a) + : members_(a) + { init(); } + + basic_string_base(const allocator_type& a, size_type n) + : members_(a) + { + this->init(); + this->allocate_initial_block(n); + } + + basic_string_base(BOOST_RV_REF(basic_string_base) b) + : members_(boost::move(b.alloc())) + { + this->init(); + this->swap_data(b); + } + + ~basic_string_base() + { + if(!this->is_short()){ + this->deallocate_block(); + allocator_traits_type::destroy + ( this->alloc() + , static_cast(static_cast(&this->members_.m_repr.r)) + ); + } + } + + private: + + //This is the structure controlling a long string + struct long_t + { + size_type is_short : 1; + size_type length : (sizeof(size_type)*CHAR_BIT - 1); + size_type storage; + pointer start; + + long_t() + {} + + long_t(const long_t &other) + { + this->is_short = other.is_short; + length = other.length; + storage = other.storage; + start = other.start; + } + + long_t &operator =(const long_t &other) + { + this->is_short = other.is_short; + length = other.length; + storage = other.storage; + start = other.start; + return *this; + } + }; + + //This type is the first part of the structure controlling a short string + //The "data" member stores + struct short_header + { + unsigned char is_short : 1; + unsigned char length : (CHAR_BIT - 1); + }; + + //This type has the same alignment and size as long_t but it's POD + //so, unlike long_t, it can be placed in a union + + typedef typename boost::aligned_storage< sizeof(long_t), + container_detail::alignment_of::value>::type long_raw_t; + + protected: + static const size_type MinInternalBufferChars = 8; + static const size_type AlignmentOfValueType = + alignment_of::value; + static const size_type ShortDataOffset = + container_detail::ct_rounded_size::value; + static const size_type ZeroCostInternalBufferChars = + (sizeof(long_t) - ShortDataOffset)/sizeof(value_type); + static const size_type UnalignedFinalInternalBufferChars = + (ZeroCostInternalBufferChars > MinInternalBufferChars) ? + ZeroCostInternalBufferChars : MinInternalBufferChars; + + struct short_t + { + short_header h; + value_type data[UnalignedFinalInternalBufferChars]; + }; + + union repr_t + { + long_raw_t r; + short_t s; + + short_t &short_repr() const + { return *const_cast(&s); } + + long_t &long_repr() const + { return *const_cast(reinterpret_cast(&r)); } + }; + + struct members_holder + : public A + { + members_holder() + : A() + {} + + template + explicit members_holder(BOOST_FWD_REF(AllocatorConvertible) a) + : A(boost::forward(a)) + {} + + repr_t m_repr; + } members_; + + const A &alloc() const + { return members_; } + + A &alloc() + { return members_; } + + static const size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type); + + private: + + static const size_type MinAllocation = InternalBufferChars*2; + + protected: + bool is_short() const + { return static_cast(this->members_.m_repr.s.h.is_short != 0); } + + void is_short(bool yes) + { + if(yes && !this->is_short()){ + allocator_traits_type::destroy + ( this->alloc() + , static_cast(static_cast(&this->members_.m_repr.r)) + ); + } + else{ + allocator_traits_type::construct + ( this->alloc() + , static_cast(static_cast(&this->members_.m_repr.r)) + ); + } + this->members_.m_repr.s.h.is_short = yes; + } + + private: + void init() + { + this->members_.m_repr.s.h.is_short = 1; + this->members_.m_repr.s.h.length = 0; + } + + protected: + + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + typedef container_detail::integral_constant::value> alloc_version; + + std::pair + allocation_command(allocation_type command, + size_type limit_size, + size_type preferred_size, + size_type &received_size, pointer reuse = 0) + { + if(this->is_short() && (command & (expand_fwd | expand_bwd)) ){ + reuse = pointer(0); + command &= ~(expand_fwd | expand_bwd); + } + return this->allocation_command + (command, limit_size, preferred_size, received_size, reuse, alloc_version()); + } + + std::pair + allocation_command(allocation_type command, + size_type limit_size, + size_type preferred_size, + size_type &received_size, + const pointer &reuse, + allocator_v1) + { + (void)limit_size; + (void)reuse; + if(!(command & allocate_new)) + return std::pair(pointer(0), false); + received_size = preferred_size; + return std::make_pair(this->alloc().allocate(received_size), false); + } + + std::pair + allocation_command(allocation_type command, + size_type limit_size, + size_type preferred_size, + size_type &received_size, + pointer reuse, + allocator_v2) + { + return this->alloc().allocation_command(command, limit_size, preferred_size, + received_size, reuse); + } + + size_type next_capacity(size_type additional_objects) const + { return get_next_capacity(allocator_traits_type::max_size(this->alloc()), this->priv_storage(), additional_objects); } + + void deallocate(pointer p, size_type n) + { + if (p && (n > InternalBufferChars)) + this->alloc().deallocate(p, n); + } + + void construct(pointer p, const value_type &value = value_type()) + { + allocator_traits_type::construct + ( this->alloc() + , container_detail::to_raw_pointer(p) + , value + ); + } + + void destroy(pointer p, size_type n) + { + for(; n--; ++p){ + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(p) + ); + } + } + + void destroy(pointer p) + { + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(p) + ); + } + + void allocate_initial_block(size_type n) + { + if (n <= this->max_size()) { + if(n > InternalBufferChars){ + size_type new_cap = this->next_capacity(n); + pointer p = this->allocation_command(allocate_new, n, new_cap, new_cap).first; + this->is_short(false); + this->priv_long_addr(p); + this->priv_size(0); + this->priv_storage(new_cap); + } + } + else + throw_length_error(); + } + + void deallocate_block() + { this->deallocate(this->priv_addr(), this->priv_storage()); } + + size_type max_size() const + { return allocator_traits_type::max_size(this->alloc()) - 1; } + + // Helper functions for exception handling. + void throw_length_error() const + { throw(std::length_error("basic_string")); } + + void throw_out_of_range() const + { throw(std::out_of_range("basic_string")); } + + protected: + size_type priv_capacity() const + { return this->priv_storage() - 1; } + + pointer priv_short_addr() const + { return pointer(&this->members_.m_repr.short_repr().data[0]); } + + pointer priv_long_addr() const + { return this->members_.m_repr.long_repr().start; } + + pointer priv_addr() const + { return this->is_short() ? pointer(&this->members_.m_repr.short_repr().data[0]) : this->members_.m_repr.long_repr().start; } + + void priv_long_addr(pointer addr) + { this->members_.m_repr.long_repr().start = addr; } + + size_type priv_storage() const + { return this->is_short() ? priv_short_storage() : priv_long_storage(); } + + size_type priv_short_storage() const + { return InternalBufferChars; } + + size_type priv_long_storage() const + { return this->members_.m_repr.long_repr().storage; } + + void priv_storage(size_type storage) + { + if(!this->is_short()) + this->priv_long_storage(storage); + } + + void priv_long_storage(size_type storage) + { + this->members_.m_repr.long_repr().storage = storage; + } + + size_type priv_size() const + { return this->is_short() ? priv_short_size() : priv_long_size(); } + + size_type priv_short_size() const + { return this->members_.m_repr.short_repr().h.length; } + + size_type priv_long_size() const + { return this->members_.m_repr.long_repr().length; } + + void priv_size(size_type sz) + { + if(this->is_short()) + this->priv_short_size(sz); + else + this->priv_long_size(sz); + } + + void priv_short_size(size_type sz) + { + this->members_.m_repr.s.h.length = (unsigned char)sz; + } + + void priv_long_size(size_type sz) + { + this->members_.m_repr.long_repr().length = static_cast(sz); + } + + void swap_data(basic_string_base& other) + { + if(this->is_short()){ + if(other.is_short()){ + container_detail::do_swap(this->members_.m_repr, other.members_.m_repr); + } + else{ + repr_t copied(this->members_.m_repr); + this->members_.m_repr.long_repr() = other.members_.m_repr.long_repr(); + other.members_.m_repr = copied; + } + } + else{ + if(other.is_short()){ + repr_t copied(other.members_.m_repr); + other.members_.m_repr.long_repr() = this->members_.m_repr.long_repr(); + this->members_.m_repr = copied; + } + else{ + container_detail::do_swap(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr()); + } + } + } +}; + +} //namespace container_detail { + +/// @endcond + +//! The basic_string class represents a Sequence of characters. It contains all the +//! usual operations of a Sequence, and, additionally, it contains standard string +//! operations such as search and concatenation. +//! +//! The basic_string class is parameterized by character type, and by that type's +//! Character Traits. +//! +//! This class has performance characteristics very much like vector<>, meaning, +//! for example, that it does not perform reference-count or copy-on-write, and that +//! concatenation of two strings is an O(N) operation. +//! +//! Some of basic_string's member functions use an unusual method of specifying positions +//! and ranges. In addition to the conventional method using iterators, many of +//! basic_string's member functions use a single value pos of type size_type to represent a +//! position (in which case the position is begin() + pos, and many of basic_string's +//! member functions use two values, pos and n, to represent a range. In that case pos is +//! the beginning of the range and n is its size. That is, the range is +//! [begin() + pos, begin() + pos + n). +//! +//! Note that the C++ standard does not specify the complexity of basic_string operations. +//! In this implementation, basic_string has performance characteristics very similar to +//! those of vector: access to a single character is O(1), while copy and concatenation +//! are O(N). +//! +//! In this implementation, begin(), +//! end(), rbegin(), rend(), operator[], c_str(), and data() do not invalidate iterators. +//! In this implementation, iterators are only invalidated by member functions that +//! explicitly change the string's contents. +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template , class A = std::allocator > +#else +template +#endif +class basic_string + : private container_detail::basic_string_base +{ + /// @cond + private: + typedef allocator_traits allocator_traits_type; + BOOST_COPYABLE_AND_MOVABLE(basic_string) + typedef container_detail::basic_string_base base_t; + static const typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars; + + protected: + // A helper class to use a char_traits as a function object. + + template + struct Eq_traits + : public std::binary_function + { + bool operator()(const typename Tr::char_type& x, + const typename Tr::char_type& y) const + { return Tr::eq(x, y); } + }; + + template + struct Not_within_traits + : public std::unary_function + { + typedef const typename Tr::char_type* Pointer; + const Pointer m_first; + const Pointer m_last; + + Not_within_traits(Pointer f, Pointer l) + : m_first(f), m_last(l) {} + + bool operator()(const typename Tr::char_type& x) const + { + return std::find_if(m_first, m_last, + std::bind1st(Eq_traits(), x)) == m_last; + } + }; + /// @endcond + + public: + + //! The allocator type + typedef A allocator_type; + //! The stored allocator type + typedef allocator_type stored_allocator_type; + //! The type of object, CharT, stored in the string + typedef CharT value_type; + //! The second template parameter Traits + typedef Traits traits_type; + //! Pointer to CharT + typedef typename allocator_traits_type::pointer pointer; + //! Const pointer to CharT + typedef typename allocator_traits_type::const_pointer const_pointer; + //! Reference to CharT + typedef typename allocator_traits_type::reference reference; + //! Const reference to CharT + typedef typename allocator_traits_type::const_reference const_reference; + //! An unsigned integral type + typedef typename allocator_traits_type::size_type size_type; + //! A signed integral type + typedef typename allocator_traits_type::difference_type difference_type; + //! Iterator used to iterate through a string. It's a Random Access Iterator + typedef pointer iterator; + //! Const iterator used to iterate through a string. It's a Random Access Iterator + typedef const_pointer const_iterator; + //! Iterator used to iterate backwards through a string + typedef std::reverse_iterator reverse_iterator; + //! Const iterator used to iterate backwards through a string + typedef std::reverse_iterator const_reverse_iterator; + //! The largest possible value of type size_type. That is, size_type(-1). + static const size_type npos; + + /// @cond + private: + typedef constant_iterator cvalue_iterator; + typedef typename base_t::allocator_v1 allocator_v1; + typedef typename base_t::allocator_v2 allocator_v2; + typedef typename base_t::alloc_version alloc_version; + /// @endcond + + public: // Constructor, destructor, assignment. + /// @cond + struct reserve_t {}; + + basic_string(reserve_t, size_type n, + const allocator_type& a = allocator_type()) + //Select allocator as in copy constructor as reserve_t-based constructors + //are two step copies optimized for capacity + : base_t( allocator_traits_type::select_on_container_copy_construction(a) + , n + 1) + { this->priv_terminate_string(); } + + /// @endcond + + //! Effects: Default constructs a basic_string. + //! + //! Throws: If allocator_type's default constructor throws. + basic_string() + : base_t() + { this->priv_terminate_string(); } + + + //! Effects: Constructs a basic_string taking the allocator as parameter. + //! + //! Throws: If allocator_type's copy constructor throws. + explicit basic_string(const allocator_type& a) + : base_t(a) + { this->priv_terminate_string(); } + + //! Effects: Copy constructs a basic_string. + //! + //! Postcondition: x == *this. + //! + //! Throws: If allocator_type's default constructor throws. + basic_string(const basic_string& s) + : base_t(allocator_traits_type::select_on_container_copy_construction(s.alloc())) + { this->priv_range_initialize(s.begin(), s.end()); } + + //! Effects: Move constructor. Moves s's resources to *this. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + basic_string(BOOST_RV_REF(basic_string) s) + : base_t(boost::move((base_t&)s)) + {} + + //! Effects: Copy constructs a basic_string using the specified allocator. + //! + //! Postcondition: x == *this. + //! + //! Throws: If allocation throws. + basic_string(const basic_string& s, const allocator_type &a) + : base_t(a) + { this->priv_range_initialize(s.begin(), s.end()); } + + //! Effects: Move constructor using the specified allocator. + //! Moves s's resources to *this. + //! + //! Throws: If allocation throws. + //! + //! Complexity: Constant if a == s.get_allocator(), linear otherwise. + basic_string(BOOST_RV_REF(basic_string) s, const allocator_type &a) + : base_t(a) + { + if(a == this->alloc()){ + this->swap_data(s); + } + else{ + this->priv_range_initialize(s.begin(), s.end()); + } + } + + //! Effects: Constructs a basic_string taking the allocator as parameter, + //! and is initialized by a specific number of characters of the s string. + basic_string(const basic_string& s, size_type pos, size_type n = npos, + const allocator_type& a = allocator_type()) + : base_t(a) + { + if (pos > s.size()) + this->throw_out_of_range(); + else + this->priv_range_initialize + (s.begin() + pos, s.begin() + pos + container_detail::min_value(n, s.size() - pos)); + } + + //! Effects: Constructs a basic_string taking the allocator as parameter, + //! and is initialized by a specific number of characters of the s c-string. + basic_string(const CharT* s, size_type n, + const allocator_type& a = allocator_type()) + : base_t(a) + { this->priv_range_initialize(s, s + n); } + + //! Effects: Constructs a basic_string taking the allocator as parameter, + //! and is initialized by the null-terminated s c-string. + basic_string(const CharT* s, + const allocator_type& a = allocator_type()) + : base_t(a) + { this->priv_range_initialize(s, s + Traits::length(s)); } + + //! Effects: Constructs a basic_string taking the allocator as parameter, + //! and is initialized by n copies of c. + basic_string(size_type n, CharT c, + const allocator_type& a = allocator_type()) + : base_t(a) + { + this->priv_range_initialize(cvalue_iterator(c, n), + cvalue_iterator()); + } + + //! Effects: Constructs a basic_string taking the allocator as parameter, + //! and a range of iterators. + template + basic_string(InputIterator f, InputIterator l, + const allocator_type& a = allocator_type()) + : base_t(a) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + this->priv_initialize_dispatch(f, l, Result()); + } + + //! Effects: Destroys the basic_string. All used memory is deallocated. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + ~basic_string() + {} + + //! Effects: Copy constructs a string. + //! + //! Postcondition: x == *this. + //! + //! Complexity: Linear to the elements x contains. + basic_string& operator=(BOOST_COPY_ASSIGN_REF(basic_string) x) + { + if (&x != this){ + allocator_type &this_alloc = this->alloc(); + const allocator_type &x_alloc = x.alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + if(!this->is_short()){ + this->deallocate_block(); + this->is_short(true); + Traits::assign(*this->priv_addr(), this->priv_null()); + this->priv_size(0); + } + } + container_detail::assign_alloc(this->alloc(), x.alloc(), flag); + this->assign(x.begin(), x.end()); + } + return *this; + } + + //! Effects: Move constructor. Moves mx's resources to *this. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + basic_string& operator=(BOOST_RV_REF(basic_string) x) + { + if (&x != this){ + allocator_type &this_alloc = this->alloc(); + allocator_type &x_alloc = x.alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy objects but retain memory in case x reuses it in the future + this->clear(); + this->swap_data(x); + //Move allocator if needed + container_detail::bool_ flag; + container_detail::move_alloc(this_alloc, x_alloc, flag); + } + //If unequal allocators, then do a one by one move + else{ + this->assign( x.begin(), x.end()); + } + } + return *this; + } + + //! Effects: Assignment from a null-terminated c-string. + basic_string& operator=(const CharT* s) + { return this->assign(s, s + Traits::length(s)); } + + //! Effects: Assignment from character. + basic_string& operator=(CharT c) + { return this->assign(static_cast(1), c); } + + //! Effects: Returns an iterator to the first element contained in the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator begin() + { return this->priv_addr(); } + + //! Effects: Returns a const_iterator to the first element contained in the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator begin() const + { return this->priv_addr(); } + + //! Effects: Returns a const_iterator to the first element contained in the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const + { return this->priv_addr(); } + + //! Effects: Returns an iterator to the end of the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator end() + { return this->priv_addr() + this->priv_size(); } + + //! Effects: Returns a const_iterator to the end of the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator end() const + { return this->priv_addr() + this->priv_size(); } + + //! Effects: Returns a const_iterator to the end of the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const + { return this->priv_addr() + this->priv_size(); } + + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rbegin() + { return reverse_iterator(this->priv_addr() + this->priv_size()); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rbegin() const + { return this->crbegin(); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const + { return const_reverse_iterator(this->priv_addr() + this->priv_size()); } + + //! Effects: Returns a reverse_iterator pointing to the end + //! of the reversed vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rend() + { return reverse_iterator(this->priv_addr()); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rend() const + { return this->crend(); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend() const + { return const_reverse_iterator(this->priv_addr()); } + + //! Effects: Returns a copy of the internal allocator. + //! + //! Throws: If allocator's copy constructor throws. + //! + //! Complexity: Constant. + allocator_type get_allocator() const + { return this->alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT + { return this->alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT + { return this->alloc(); } + + //! Effects: Returns the number of the elements contained in the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type size() const + { return this->priv_size(); } + + //! Effects: Returns the number of the elements contained in the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type length() const + { return this->size(); } + + //! Effects: Returns the largest possible size of the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type max_size() const + { return base_t::max_size(); } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. + //! + //! Throws: If memory allocation throws + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type n, CharT c) + { + if (n <= size()) + this->erase(this->begin() + n, this->end()); + else + this->append(n - this->size(), c); + } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. + //! + //! Throws: If memory allocation throws + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type n) + { resize(n, this->priv_null()); } + + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. + //! + //! Throws: If memory allocation allocation throws + void reserve(size_type res_arg) + { + if (res_arg > this->max_size()) + this->throw_length_error(); + + if (this->capacity() < res_arg){ + size_type n = container_detail::max_value(res_arg, this->size()) + 1; + size_type new_cap = this->next_capacity(n); + pointer new_start = this->allocation_command + (allocate_new, n, new_cap, new_cap).first; + size_type new_length = 0; + + new_length += priv_uninitialized_copy + (this->priv_addr(), this->priv_addr() + this->priv_size(), new_start); + this->priv_construct_null(new_start + new_length); + this->deallocate_block(); + this->is_short(false); + this->priv_long_addr(new_start); + this->priv_size(new_length); + this->priv_storage(new_cap); + } + } + + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type capacity() const + { return this->priv_capacity(); } + + //! Effects: Erases all the elements of the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements in the vector. + void clear() + { + if (!empty()) { + Traits::assign(*this->priv_addr(), this->priv_null()); + this->priv_size(0); + } + } + + //! Effects: Tries to deallocate the excess of memory created + //! with previous allocations. The size of the string is unchanged + //! + //! Throws: Nothing + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { + //Check if shrinking is possible + if(this->priv_storage() > InternalBufferChars){ + //Check if we should pass from dynamically allocated buffer + //to the internal storage + if(this->priv_size() < (InternalBufferChars)){ + //Dynamically allocated buffer attributes + pointer long_addr = this->priv_long_addr(); + size_type long_storage = this->priv_long_storage(); + size_type long_size = this->priv_long_size(); + //Shrink from allocated buffer to the internal one, including trailing null + Traits::copy( container_detail::to_raw_pointer(this->priv_short_addr()) + , container_detail::to_raw_pointer(long_addr) + , long_size+1); + this->is_short(true); + this->alloc().deallocate(long_addr, long_storage); + } + else{ + //Shrinking in dynamic buffer + this->priv_shrink_to_fit_dynamic_buffer(alloc_version()); + } + } + } + + //! Effects: Returns true if the vector contains no elements. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + bool empty() const + { return !this->priv_size(); } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference operator[](size_type n) + { return *(this->priv_addr() + n); } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference operator[](size_type n) const + { return *(this->priv_addr() + n); } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + reference at(size_type n) { + if (n >= size()) + this->throw_out_of_range(); + return *(this->priv_addr() + n); + } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + const_reference at(size_type n) const { + if (n >= size()) + this->throw_out_of_range(); + return *(this->priv_addr() + n); + } + + //! Effects: Calls append(str.data, str.size()). + //! + //! Returns: *this + basic_string& operator+=(const basic_string& s) + { return this->append(s); } + + //! Effects: Calls append(s). + //! + //! Returns: *this + basic_string& operator+=(const CharT* s) + { return this->append(s); } + + //! Effects: Calls append(1, c). + //! + //! Returns: *this + basic_string& operator+=(CharT c) + { this->push_back(c); return *this; } + + //! Effects: Calls append(str.data(), str.size()). + //! + //! Returns: *this + basic_string& append(const basic_string& s) + { return this->append(s.begin(), s.end()); } + + //! Requires: pos <= str.size() + //! + //! Effects: Determines the effective length rlen of the string to append + //! as the smaller of n and str.size() - pos and calls append(str.data() + pos, rlen). + //! + //! Throws: If memory allocation throws and out_of_range if pos > str.size() + //! + //! Returns: *this + basic_string& append(const basic_string& s, size_type pos, size_type n) + { + if (pos > s.size()) + this->throw_out_of_range(); + return this->append(s.begin() + pos, + s.begin() + pos + container_detail::min_value(n, s.size() - pos)); + } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Effects: The function replaces the string controlled by *this with + //! a string of length size() + n whose irst size() elements are a copy of the + //! original string controlled by *this and whose remaining + //! elements are a copy of the initial n elements of s. + //! + //! Throws: If memory allocation throws length_error if size() + n > max_size(). + //! + //! Returns: *this + basic_string& append(const CharT* s, size_type n) + { return this->append(s, s + n); } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Effects: Calls append(s, traits::length(s)). + //! + //! Returns: *this + basic_string& append(const CharT* s) + { return this->append(s, s + Traits::length(s)); } + + //! Effects: Equivalent to append(basic_string(n, c)). + //! + //! Returns: *this + basic_string& append(size_type n, CharT c) + { return this->append(cvalue_iterator(c, n), cvalue_iterator()); } + + //! Requires: [first,last) is a valid range. + //! + //! Effects: Equivalent to append(basic_string(first, last)). + //! + //! Returns: *this + template + basic_string& append(InputIter first, InputIter last) + { this->insert(this->end(), first, last); return *this; } + + //! Effects: Equivalent to append(static_cast(1), c). + void push_back(CharT c) + { + if (this->priv_size() < this->capacity()){ + this->priv_construct_null(this->priv_addr() + (this->priv_size() + 1)); + Traits::assign(this->priv_addr()[this->priv_size()], c); + this->priv_size(this->priv_size()+1); + } + else{ + //No enough memory, insert a new object at the end + this->append((size_type)1, c); + } + } + + //! Effects: Equivalent to assign(str, 0, npos). + //! + //! Returns: *this + basic_string& assign(const basic_string& s) + { return this->operator=(s); } + + //! Effects: The function replaces the string controlled by *this + //! with a string of length str.size() whose elements are a copy of the string + //! controlled by str. Leaves str in a valid but unspecified state. + //! + //! Throws: Nothing + //! + //! Returns: *this + basic_string& assign(BOOST_RV_REF(basic_string) ms) + { return this->swap_data(ms), *this; } + + //! Requires: pos <= str.size() + //! + //! Effects: Determines the effective length rlen of the string to assign as + //! the smaller of n and str.size() - pos and calls assign(str.data() + pos rlen). + //! + //! Throws: If memory allocation throws or out_of_range if pos > str.size(). + //! + //! Returns: *this + basic_string& assign(const basic_string& s, + size_type pos, size_type n) { + if (pos > s.size()) + this->throw_out_of_range(); + return this->assign(s.begin() + pos, + s.begin() + pos + container_detail::min_value(n, s.size() - pos)); + } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Effects: Replaces the string controlled by *this with a string of + //! length n whose elements are a copy of those pointed to by s. + //! + //! Throws: If memory allocation throws or length_error if n > max_size(). + //! + //! Returns: *this + basic_string& assign(const CharT* s, size_type n) + { return this->assign(s, s + n); } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Effects: Calls assign(s, traits::length(s)). + //! + //! Returns: *this + basic_string& assign(const CharT* s) + { return this->assign(s, s + Traits::length(s)); } + + //! Effects: Equivalent to assign(basic_string(n, c)). + //! + //! Returns: *this + basic_string& assign(size_type n, CharT c) + { return this->assign(cvalue_iterator(c, n), cvalue_iterator()); } + + //! Effects: Equivalent to assign(basic_string(first, last)). + //! + //! Returns: *this + template + basic_string& assign(InputIter first, InputIter last) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + return this->priv_assign_dispatch(first, last, Result()); + } + + //! Requires: pos <= size(). + //! + //! Effects: Calls insert(pos, str.data(), str.size()). + //! + //! Throws: If memory allocation throws or out_of_range if pos > size(). + //! + //! Returns: *this + basic_string& insert(size_type pos, const basic_string& s) + { + if (pos > size()) + this->throw_out_of_range(); + if (this->size() > this->max_size() - s.size()) + this->throw_length_error(); + this->insert(this->priv_addr() + pos, s.begin(), s.end()); + return *this; + } + + //! Requires: pos1 <= size() and pos2 <= str.size() + //! + //! Effects: Determines the effective length rlen of the string to insert as + //! the smaller of n and str.size() - pos2 and calls insert(pos1, str.data() + pos2, rlen). + //! + //! Throws: If memory allocation throws or out_of_range if pos1 > size() or pos2 > str.size(). + //! + //! Returns: *this + basic_string& insert(size_type pos1, const basic_string& s, + size_type pos2, size_type n) + { + if (pos1 > this->size() || pos2 > s.size()) + this->throw_out_of_range(); + size_type len = container_detail::min_value(n, s.size() - pos2); + if (this->size() > this->max_size() - len) + this->throw_length_error(); + const CharT *beg_ptr = container_detail::to_raw_pointer(s.begin()) + pos2; + const CharT *end_ptr = beg_ptr + len; + this->insert(this->priv_addr() + pos1, beg_ptr, end_ptr); + return *this; + } + + //! Requires: s points to an array of at least n elements of CharT and pos <= size(). + //! + //! Effects: Replaces the string controlled by *this with a string of length size() + n + //! whose first pos elements are a copy of the initial elements of the original string + //! controlled by *this and whose next n elements are a copy of the elements in s and whose + //! remaining elements are a copy of the remaining elements of the original string controlled by *this. + //! + //! Throws: If memory allocation throws, out_of_range if pos > size() or + //! length_error if size() + n > max_size(). + //! + //! Returns: *this + basic_string& insert(size_type pos, const CharT* s, size_type n) + { + if (pos > this->size()) + this->throw_out_of_range(); + if (this->size() > this->max_size() - n) + this->throw_length_error(); + this->insert(this->priv_addr() + pos, s, s + n); + return *this; + } + + //! Requires: pos <= size() and s points to an array of at least traits::length(s) + 1 elements of CharT + //! + //! Effects: Calls insert(pos, s, traits::length(s)). + //! + //! Throws: If memory allocation throws, out_of_range if pos > size() + //! length_error if size() > max_size() - Traits::length(s) + //! + //! Returns: *this + basic_string& insert(size_type pos, const CharT* s) + { + if (pos > size()) + this->throw_out_of_range(); + size_type len = Traits::length(s); + if (this->size() > this->max_size() - len) + this->throw_length_error(); + this->insert(this->priv_addr() + pos, s, s + len); + return *this; + } + + //! Effects: Equivalent to insert(pos, basic_string(n, c)). + //! + //! Throws: If memory allocation throws, out_of_range if pos > size() + //! length_error if size() > max_size() - n + //! + //! Returns: *this + basic_string& insert(size_type pos, size_type n, CharT c) + { + if (pos > this->size()) + this->throw_out_of_range(); + if (this->size() > this->max_size() - n) + this->throw_length_error(); + this->insert(const_iterator(this->priv_addr() + pos), n, c); + return *this; + } + + //! Requires: p is a valid iterator on *this. + //! + //! Effects: inserts a copy of c before the character referred to by p. + //! + //! Returns: An iterator which refers to the copy of the inserted character. + iterator insert(const_iterator p, CharT c) + { + size_type new_offset = p - this->priv_addr() + 1; + this->insert(p, cvalue_iterator(c, 1), cvalue_iterator()); + return this->priv_addr() + new_offset; + } + + + //! Requires: p is a valid iterator on *this. + //! + //! Effects: Inserts n copies of c before the character referred to by p. + //! + //! Returns: An iterator which refers to the copy of the first + //! inserted character, or p if n == 0. + void insert(const_iterator p, size_type n, CharT c) + { + this->insert(p, cvalue_iterator(c, n), cvalue_iterator()); + } + + //! Requires: p is a valid iterator on *this. [first,last) is a valid range. + //! + //! Effects: Equivalent to insert(p - begin(), basic_string(first, last)). + //! + //! Returns: An iterator which refers to the copy of the first + //! inserted character, or p if first == last. + template + void insert(const_iterator p, InputIter first, InputIter last) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + this->priv_insert_dispatch(p, first, last, Result()); + } + + //! Requires: pos <= size() + //! + //! Effects: Determines the effective length xlen of the string to be removed as the smaller of n and size() - pos. + //! The function then replaces the string controlled by *this with a string of length size() - xlen + //! whose first pos elements are a copy of the initial elements of the original string controlled by *this, + //! and whose remaining elements are a copy of the elements of the original string controlled by *this + //! beginning at position pos + xlen. + //! + //! Throws: out_of_range if pos > size(). + //! + //! Returns: *this + basic_string& erase(size_type pos = 0, size_type n = npos) + { + if (pos > size()) + this->throw_out_of_range(); + erase(this->priv_addr() + pos, this->priv_addr() + pos + container_detail::min_value(n, size() - pos)); + return *this; + } + + //! Effects: Removes the character referred to by p. + //! + //! Throws: Nothing + //! + //! Returns: An iterator which points to the element immediately following p prior to the element being + //! erased. If no such element exists, end() is returned. + iterator erase(const_iterator p) + { + // The move includes the terminating null. + CharT *ptr = const_cast(container_detail::to_raw_pointer(p)); + Traits::move(ptr, + container_detail::to_raw_pointer(p + 1), + this->priv_size() - (p - this->priv_addr())); + this->priv_size(this->priv_size()-1); + return iterator(ptr); + } + + //! Requires: first and last are valid iterators on *this, defining a range [first,last). + //! + //! Effects: Removes the characters in the range [first,last). + //! + //! Throws: Nothing + //! + //! Returns: An iterator which points to the element pointed to by last prior to + //! the other elements being erased. If no such element exists, end() is returned. + iterator erase(const_iterator first, const_iterator last) + { + CharT * f = const_cast(container_detail::to_raw_pointer(first)); + if (first != last) { // The move includes the terminating null. + size_type num_erased = last - first; + Traits::move(f, + container_detail::to_raw_pointer(last), + (this->priv_size() + 1)-(last - this->priv_addr())); + size_type new_length = this->priv_size() - num_erased; + this->priv_size(new_length); + } + return iterator(f); + } + + //! Requires: !empty() + //! + //! Throws: Nothing + //! + //! Effects: Equivalent to erase(size() - 1, 1). + void pop_back() + { + Traits::assign(this->priv_addr()[this->priv_size()-1], this->priv_null()); + this->priv_size(this->priv_size()-1);; + } + + //! Requires: pos1 <= size(). + //! + //! Effects: Calls replace(pos1, n1, str.data(), str.size()). + //! + //! Throws: if memory allocation throws or out_of_range if pos1 > size(). + //! + //! Returns: *this + basic_string& replace(size_type pos1, size_type n1, const basic_string& str) + { + if (pos1 > size()) + this->throw_out_of_range(); + const size_type len = container_detail::min_value(n1, size() - pos1); + if (this->size() - len >= this->max_size() - str.size()) + this->throw_length_error(); + return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len, + str.begin(), str.end()); + } + + //! Requires: pos1 <= size() and pos2 <= str.size(). + //! + //! Effects: Determines the effective length rlen of the string to be + //! inserted as the smaller of n2 and str.size() - pos2 and calls + //! replace(pos1, n1, str.data() + pos2, rlen). + //! + //! Throws: if memory allocation throws, out_of_range if pos1 > size() or pos2 > str.size(). + //! + //! Returns: *this + basic_string& replace(size_type pos1, size_type n1, + const basic_string& str, size_type pos2, size_type n2) + { + if (pos1 > size() || pos2 > str.size()) + this->throw_out_of_range(); + const size_type len1 = container_detail::min_value(n1, size() - pos1); + const size_type len2 = container_detail::min_value(n2, str.size() - pos2); + if (this->size() - len1 >= this->max_size() - len2) + this->throw_length_error(); + return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len1, + str.priv_addr() + pos2, str.priv_addr() + pos2 + len2); + } + + //! Requires: pos1 <= size() and s points to an array of at least n2 elements of CharT. + //! + //! Effects: Determines the effective length xlen of the string to be removed as the + //! smaller of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error. + //! Otherwise, the function replaces the string controlled by *this with a string of + //! length size() - xlen + n2 whose first pos1 elements are a copy of the initial elements + //! of the original string controlled by *this, whose next n2 elements are a copy of the + //! initial n2 elements of s, and whose remaining elements are a copy of the elements of + //! the original string controlled by *this beginning at position pos + xlen. + //! + //! Throws: if memory allocation throws, out_of_range if pos1 > size() or length_error + //! if the length of the resulting string would exceed max_size() + //! + //! Returns: *this + basic_string& replace(size_type pos1, size_type n1, + const CharT* s, size_type n2) + { + if (pos1 > size()) + this->throw_out_of_range(); + const size_type len = container_detail::min_value(n1, size() - pos1); + if (n2 > this->max_size() || size() - len >= this->max_size() - n2) + this->throw_length_error(); + return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len, + s, s + n2); + } + + //! Requires: pos1 <= size() and s points to an array of at least n2 elements of CharT. + //! + //! Effects: Determines the effective length xlen of the string to be removed as the smaller + //! of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error. Otherwise, + //! the function replaces the string controlled by *this with a string of length size() - xlen + n2 + //! whose first pos1 elements are a copy of the initial elements of the original string controlled + //! by *this, whose next n2 elements are a copy of the initial n2 elements of s, and whose + //! remaining elements are a copy of the elements of the original string controlled by *this + //! beginning at position pos + xlen. + //! + //! Throws: if memory allocation throws, out_of_range if pos1 > size() or length_error + //! if the length of the resulting string would exceed max_size() + //! + //! Returns: *this + basic_string& replace(size_type pos, size_type n1, const CharT* s) + { + if (pos > size()) + this->throw_out_of_range(); + const size_type len = container_detail::min_value(n1, size() - pos); + const size_type n2 = Traits::length(s); + if (n2 > this->max_size() || size() - len >= this->max_size() - n2) + this->throw_length_error(); + return this->replace(this->priv_addr() + pos, this->priv_addr() + pos + len, + s, s + Traits::length(s)); + } + + //! Requires: pos1 <= size(). + //! + //! Effects: Equivalent to replace(pos1, n1, basic_string(n2, c)). + //! + //! Throws: if memory allocation throws, out_of_range if pos1 > size() or length_error + //! if the length of the resulting string would exceed max_size() + //! + //! Returns: *this + basic_string& replace(size_type pos1, size_type n1, size_type n2, CharT c) + { + if (pos1 > size()) + this->throw_out_of_range(); + const size_type len = container_detail::min_value(n1, size() - pos1); + if (n2 > this->max_size() || size() - len >= this->max_size() - n2) + this->throw_length_error(); + return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len, n2, c); + } + + //! Requires: [begin(),i1) and [i1,i2) are valid ranges. + //! + //! Effects: Calls replace(i1 - begin(), i2 - i1, str). + //! + //! Throws: if memory allocation throws + //! + //! Returns: *this + basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str) + { return this->replace(i1, i2, str.begin(), str.end()); } + + //! Requires: [begin(),i1) and [i1,i2) are valid ranges and + //! s points to an array of at least n elements + //! + //! Effects: Calls replace(i1 - begin(), i2 - i1, s, n). + //! + //! Throws: if memory allocation throws + //! + //! Returns: *this + basic_string& replace(const_iterator i1, const_iterator i2, const CharT* s, size_type n) + { return this->replace(i1, i2, s, s + n); } + + //! Requires: [begin(),i1) and [i1,i2) are valid ranges and s points to an + //! array of at least traits::length(s) + 1 elements of CharT. + //! + //! Effects: Calls replace(i1 - begin(), i2 - i1, s, traits::length(s)). + //! + //! Throws: if memory allocation throws + //! + //! Returns: *this + basic_string& replace(const_iterator i1, const_iterator i2, const CharT* s) + { return this->replace(i1, i2, s, s + Traits::length(s)); } + + //! Requires: [begin(),i1) and [i1,i2) are valid ranges. + //! + //! Effects: Calls replace(i1 - begin(), i2 - i1, basic_string(n, c)). + //! + //! Throws: if memory allocation throws + //! + //! Returns: *this + basic_string& replace(const_iterator i1, const_iterator i2, size_type n, CharT c) + { + const size_type len = static_cast(i2 - i1); + if (len >= n) { + Traits::assign(const_cast(container_detail::to_raw_pointer(i1)), n, c); + erase(i1 + n, i2); + } + else { + Traits::assign(const_cast(container_detail::to_raw_pointer(i1)), len, c); + insert(i2, n - len, c); + } + return *this; + } + + //! Requires: [begin(),i1), [i1,i2) and [j1,j2) are valid ranges. + //! + //! Effects: Calls replace(i1 - begin(), i2 - i1, basic_string(j1, j2)). + //! + //! Throws: if memory allocation throws + //! + //! Returns: *this + template + basic_string& replace(const_iterator i1, const_iterator i2, InputIter j1, InputIter j2) + { + //Dispatch depending on integer/iterator + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; + return this->priv_replace_dispatch(i1, i2, j1, j2, Result()); + } + + //! Requires: pos <= size() + //! + //! Effects: Determines the effective length rlen of the string to copy as the + //! smaller of n and size() - pos. s shall designate an array of at least rlen elements. + //! The function then replaces the string designated by s with a string of length rlen + //! whose elements are a copy of the string controlled by *this beginning at position pos. + //! The function does not append a null object to the string designated by s. + //! + //! Throws: if memory allocation throws, out_of_range if pos > size(). + //! + //! Returns: rlen + size_type copy(CharT* s, size_type n, size_type pos = 0) const + { + if (pos > size()) + this->throw_out_of_range(); + const size_type len = container_detail::min_value(n, size() - pos); + Traits::copy(s, container_detail::to_raw_pointer(this->priv_addr() + pos), len); + return len; + } + + //! Effects: *this contains the same sequence of characters that was in s, + //! s contains the same sequence of characters that was in *this. + //! + //! Throws: Nothing + void swap(basic_string& x) + { + this->base_t::swap_data(x); + container_detail::bool_ flag; + container_detail::swap_alloc(this->alloc(), x.alloc(), flag); + } + + //! Requires: The program shall not alter any of the values stored in the character array. + //! + //! Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()]. + //! + //! Complexity: constant time. + const CharT* c_str() const + { return container_detail::to_raw_pointer(this->priv_addr()); } + + //! Requires: The program shall not alter any of the values stored in the character array. + //! + //! Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()]. + //! + //! Complexity: constant time. + const CharT* data() const + { return container_detail::to_raw_pointer(this->priv_addr()); } + + //! Effects: Determines the lowest position xpos, if possible, such that both + //! of the following conditions obtain: 19 pos <= xpos and xpos + str.size() <= size(); + //! 2) traits::eq(at(xpos+I), str.at(I)) for all elements I of the string controlled by str. + //! + //! Throws: Nothing + //! + //! Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos. + size_type find(const basic_string& s, size_type pos = 0) const + { return find(s.c_str(), pos, s.size()); } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find(basic_string(s,n),pos). + size_type find(const CharT* s, size_type pos, size_type n) const + { + if (pos + n > size()) + return npos; + else { + pointer finish = this->priv_addr() + this->priv_size(); + const const_iterator result = + std::search(container_detail::to_raw_pointer(this->priv_addr() + pos), + container_detail::to_raw_pointer(finish), + s, s + n, Eq_traits()); + return result != finish ? result - begin() : npos; + } + } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find(basic_string(s), pos). + size_type find(const CharT* s, size_type pos = 0) const + { return find(s, pos, Traits::length(s)); } + + //! Throws: Nothing + //! + //! Returns: find(basic_string(1,c), pos). + size_type find(CharT c, size_type pos = 0) const + { + if (pos >= size()) + return npos; + else { + pointer finish = this->priv_addr() + this->priv_size(); + const const_iterator result = + std::find_if(this->priv_addr() + pos, finish, + std::bind2nd(Eq_traits(), c)); + return result != finish ? result - begin() : npos; + } + } + + //! Effects: Determines the highest position xpos, if possible, such + //! that both of the following conditions obtain: + //! a) xpos <= pos and xpos + str.size() <= size(); + //! b) traits::eq(at(xpos+I), str.at(I)) for all elements I of the string controlled by str. + //! + //! Throws: Nothing + //! + //! Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos. + size_type rfind(const basic_string& str, size_type pos = npos) const + { return rfind(str.c_str(), pos, str.size()); } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: rfind(basic_string(s, n), pos). + size_type rfind(const CharT* s, size_type pos, size_type n) const + { + const size_type len = size(); + + if (n > len) + return npos; + else if (n == 0) + return container_detail::min_value(len, pos); + else { + const const_iterator last = begin() + container_detail::min_value(len - n, pos) + n; + const const_iterator result = find_end(begin(), last, + s, s + n, + Eq_traits()); + return result != last ? result - begin() : npos; + } + } + + //! Requires: pos <= size() and s points to an array of at least + //! traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: rfind(basic_string(s), pos). + size_type rfind(const CharT* s, size_type pos = npos) const + { return rfind(s, pos, Traits::length(s)); } + + //! Throws: Nothing + //! + //! Returns: rfind(basic_string(1,c),pos). + size_type rfind(CharT c, size_type pos = npos) const + { + const size_type len = size(); + + if (len < 1) + return npos; + else { + const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1; + const_reverse_iterator rresult = + std::find_if(const_reverse_iterator(last), rend(), + std::bind2nd(Eq_traits(), c)); + return rresult != rend() ? (rresult.base() - 1) - begin() : npos; + } + } + + //! Effects: Determines the lowest position xpos, if possible, such that both of the + //! following conditions obtain: a) pos <= xpos and xpos < size(); + //! b) traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str. + //! + //! Throws: Nothing + //! + //! Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos. + size_type find_first_of(const basic_string& s, size_type pos = 0) const + { return find_first_of(s.c_str(), pos, s.size()); } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_first_of(basic_string(s, n), pos). + size_type find_first_of(const CharT* s, size_type pos, size_type n) const + { + if (pos >= size()) + return npos; + else { + pointer finish = this->priv_addr() + this->priv_size(); + const_iterator result = std::find_first_of(this->priv_addr() + pos, finish, + s, s + n, + Eq_traits()); + return result != finish ? result - begin() : npos; + } + } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_first_of(basic_string(s), pos). + size_type find_first_of(const CharT* s, size_type pos = 0) const + { return find_first_of(s, pos, Traits::length(s)); } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_first_of(basic_string(1,c), pos). + size_type find_first_of(CharT c, size_type pos = 0) const + { return find(c, pos); } + + //! Effects: Determines the highest position xpos, if possible, such that both of + //! the following conditions obtain: a) xpos <= pos and xpos < size(); b) + //! traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str. + //! + //! Throws: Nothing + //! + //! Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos. + size_type find_last_of(const basic_string& str, size_type pos = npos) const + { return find_last_of(str.c_str(), pos, str.size()); } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_last_of(basic_string(s, n), pos). + size_type find_last_of(const CharT* s, size_type pos, size_type n) const + { + const size_type len = size(); + + if (len < 1) + return npos; + else { + const const_iterator last = this->priv_addr() + container_detail::min_value(len - 1, pos) + 1; + const const_reverse_iterator rresult = + std::find_first_of(const_reverse_iterator(last), rend(), + s, s + n, + Eq_traits()); + return rresult != rend() ? (rresult.base() - 1) - this->priv_addr() : npos; + } + } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_last_of(basic_string(1,c),pos). + size_type find_last_of(const CharT* s, size_type pos = npos) const + { return find_last_of(s, pos, Traits::length(s)); } + + //! Throws: Nothing + //! + //! Returns: find_last_of(basic_string(s), pos). + size_type find_last_of(CharT c, size_type pos = npos) const + { return rfind(c, pos); } + + //! Effects: Determines the lowest position xpos, if possible, such that + //! both of the following conditions obtain: + //! a) pos <= xpos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for no + //! element I of the string controlled by str. + //! + //! Throws: Nothing + //! + //! Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos. + size_type find_first_not_of(const basic_string& str, size_type pos = 0) const + { return find_first_not_of(str.c_str(), pos, str.size()); } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_first_not_of(basic_string(s, n), pos). + size_type find_first_not_of(const CharT* s, size_type pos, size_type n) const + { + if (pos > size()) + return npos; + else { + pointer finish = this->priv_addr() + this->priv_size(); + const_iterator result = std::find_if(this->priv_addr() + pos, finish, + Not_within_traits(s, s + n)); + return result != finish ? result - this->priv_addr() : npos; + } + } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_first_not_of(basic_string(s), pos). + size_type find_first_not_of(const CharT* s, size_type pos = 0) const + { return find_first_not_of(s, pos, Traits::length(s)); } + + //! Throws: Nothing + //! + //! Returns: find_first_not_of(basic_string(1, c), pos). + size_type find_first_not_of(CharT c, size_type pos = 0) const + { + if (pos > size()) + return npos; + else { + pointer finish = this->priv_addr() + this->priv_size(); + const_iterator result + = std::find_if(this->priv_addr() + pos, finish, + std::not1(std::bind2nd(Eq_traits(), c))); + return result != finish ? result - begin() : npos; + } + } + + //! Effects: Determines the highest position xpos, if possible, such that + //! both of the following conditions obtain: a) xpos <= pos and xpos < size(); + //! b) traits::eq(at(xpos), str.at(I)) for no element I of the string controlled by str. + //! + //! Throws: Nothing + //! + //! Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos. + size_type find_last_not_of(const basic_string& str, size_type pos = npos) const + { return find_last_not_of(str.c_str(), pos, str.size()); } + + //! Requires: s points to an array of at least n elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_last_not_of(basic_string(s, n), pos). + size_type find_last_not_of(const CharT* s, size_type pos, size_type n) const + { + const size_type len = size(); + + if (len < 1) + return npos; + else { + const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1; + const const_reverse_iterator rresult = + std::find_if(const_reverse_iterator(last), rend(), + Not_within_traits(s, s + n)); + return rresult != rend() ? (rresult.base() - 1) - begin() : npos; + } + } + + //! Requires: s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: Nothing + //! + //! Returns: find_last_not_of(basic_string(s), pos). + size_type find_last_not_of(const CharT* s, size_type pos = npos) const + { return find_last_not_of(s, pos, Traits::length(s)); } + + //! Throws: Nothing + //! + //! Returns: find_last_not_of(basic_string(1, c), pos). + size_type find_last_not_of(CharT c, size_type pos = npos) const + { + const size_type len = size(); + + if (len < 1) + return npos; + else { + const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1; + const_reverse_iterator rresult = + std::find_if(const_reverse_iterator(last), rend(), + std::not1(std::bind2nd(Eq_traits(), c))); + return rresult != rend() ? (rresult.base() - 1) - begin() : npos; + } + } + + //! Requires: Requires: pos <= size() + //! + //! Effects: Determines the effective length rlen of the string to copy as + //! the smaller of n and size() - pos. + //! + //! Throws: If memory allocation throws or out_of_range if pos > size(). + //! + //! Returns: basic_string(data()+pos,rlen). + basic_string substr(size_type pos = 0, size_type n = npos) const + { + if (pos > size()) + this->throw_out_of_range(); + return basic_string(this->priv_addr() + pos, + this->priv_addr() + pos + container_detail::min_value(n, size() - pos), this->alloc()); + } + + //! Effects: Determines the effective length rlen of the string to copy as + //! the smaller of size() and str.size(). The function then compares the two strings by + //! calling traits::compare(data(), str.data(), rlen). + //! + //! Throws: Nothing + //! + //! Returns: The nonzero result if the result of the comparison is nonzero. + //! Otherwise, returns a value < 0 if size() < str.size(), a 0 value if size() == str.size(), + //! and value > 0 if size() > str.size() + int compare(const basic_string& str) const + { return s_compare(this->priv_addr(), this->priv_addr() + this->priv_size(), str.priv_addr(), str.priv_addr() + str.priv_size()); } + + //! Requires: pos1 <= size() + //! + //! Effects: Determines the effective length rlen of the string to copy as + //! the smaller of + //! + //! Throws: out_of_range if pos1 > size() + //! + //! Returns:basic_string(*this,pos1,n1).compare(str). + int compare(size_type pos1, size_type n1, const basic_string& str) const + { + if (pos1 > size()) + this->throw_out_of_range(); + return s_compare(this->priv_addr() + pos1, + this->priv_addr() + pos1 + container_detail::min_value(n1, size() - pos1), + str.priv_addr(), str.priv_addr() + str.priv_size()); + } + + //! Requires: pos1 <= size() and pos2 <= str.size() + //! + //! Effects: Determines the effective length rlen of the string to copy as + //! the smaller of + //! + //! Throws: out_of_range if pos1 > size() or pos2 > str.size() + //! + //! Returns: basic_string(*this, pos1, n1).compare(basic_string(str, pos2, n2)). + int compare(size_type pos1, size_type n1, + const basic_string& str, size_type pos2, size_type n2) const { + if (pos1 > size() || pos2 > str.size()) + this->throw_out_of_range(); + return s_compare(this->priv_addr() + pos1, + this->priv_addr() + pos1 + container_detail::min_value(n1, size() - pos1), + str.priv_addr() + pos2, + str.priv_addr() + pos2 + container_detail::min_value(n2, size() - pos2)); + } + + //! Throws: Nothing + //! + //! Returns: compare(basic_string(s)). + int compare(const CharT* s) const + { return s_compare(this->priv_addr(), this->priv_addr() + this->priv_size(), s, s + Traits::length(s)); } + + + //! Requires: pos1 > size() and s points to an array of at least n2 elements of CharT. + //! + //! Throws: out_of_range if pos1 > size() + //! + //! Returns: basic_string(*this, pos, n1).compare(basic_string(s, n2)). + int compare(size_type pos1, size_type n1, + const CharT* s, size_type n2) const + { + if (pos1 > size()) + this->throw_out_of_range(); + return s_compare(this->priv_addr() + pos1, + this->priv_addr() + pos1 + container_detail::min_value(n1, size() - pos1), + s, s + n2); + } + + //! Requires: pos1 > size() and s points to an array of at least traits::length(s) + 1 elements of CharT. + //! + //! Throws: out_of_range if pos1 > size() + //! + //! Returns: basic_string(*this, pos, n1).compare(basic_string(s, n2)). + int compare(size_type pos1, size_type n1, const CharT* s) const + { return this->compare(pos1, n1, s, Traits::length(s)); } + + /// @cond + private: + static int s_compare(const_pointer f1, const_pointer l1, + const_pointer f2, const_pointer l2) + { + const difference_type n1 = l1 - f1; + const difference_type n2 = l2 - f2; + const int cmp = Traits::compare(container_detail::to_raw_pointer(f1), + container_detail::to_raw_pointer(f2), + container_detail::min_value(n1, n2)); + return cmp != 0 ? cmp : (n1 < n2 ? -1 : (n1 > n2 ? 1 : 0)); + } + + template + void priv_shrink_to_fit_dynamic_buffer + ( AllocVersion + , typename container_detail::enable_if >::type* = 0) + { + //Allocate a new buffer. + size_type real_cap = 0; + pointer long_addr = this->priv_long_addr(); + size_type long_size = this->priv_long_size(); + size_type long_storage = this->priv_long_storage(); + //We can make this nothrow as chars are always NoThrowCopyables + try{ + std::pair ret = this->allocation_command + (allocate_new, long_size+1, long_size+1, real_cap, long_addr); + //Copy and update + Traits::copy( container_detail::to_raw_pointer(ret.first) + , container_detail::to_raw_pointer(this->priv_long_addr()) + , long_size+1); + this->priv_long_addr(ret.first); + this->priv_storage(real_cap); + //And release old buffer + this->alloc().deallocate(long_addr, long_storage); + } + catch(...){ + return; + } + } + + template + void priv_shrink_to_fit_dynamic_buffer + ( AllocVersion + , typename container_detail::enable_if >::type* = 0) + { + size_type received_size; + if(this->alloc().allocation_command + ( shrink_in_place | nothrow_allocation + , this->priv_long_storage(), this->priv_long_size()+1 + , received_size, this->priv_long_addr()).first){ + this->priv_storage(received_size); + } + } + + void priv_construct_null(pointer p) + { this->construct(p, 0); } + + static CharT priv_null() + { return (CharT) 0; } + + // Helper functions used by constructors. It is a severe error for + // any of them to be called anywhere except from within constructors. + void priv_terminate_string() + { this->priv_construct_null(this->priv_addr() + this->priv_size()); } + + template + void priv_range_initialize(InputIter f, InputIter l, + std::input_iterator_tag) + { + this->allocate_initial_block(InternalBufferChars); + this->priv_construct_null(this->priv_addr() + this->priv_size()); + this->append(f, l); + } + + template + void priv_range_initialize(ForwardIter f, ForwardIter l, + std::forward_iterator_tag) + { + difference_type n = std::distance(f, l); + this->allocate_initial_block(container_detail::max_value(n+1, InternalBufferChars)); + priv_uninitialized_copy(f, l, this->priv_addr()); + this->priv_size(n); + this->priv_terminate_string(); + } + + template + void priv_range_initialize(InputIter f, InputIter l) + { + typedef typename std::iterator_traits::iterator_category Category; + this->priv_range_initialize(f, l, Category()); + } + + template + void priv_initialize_dispatch(Integer n, Integer x, container_detail::true_) + { + this->allocate_initial_block(container_detail::max_value(n+1, InternalBufferChars)); + priv_uninitialized_fill_n(this->priv_addr(), n, x); + this->priv_size(n); + this->priv_terminate_string(); + } + + template + void priv_initialize_dispatch(InputIter f, InputIter l, container_detail::false_) + { this->priv_range_initialize(f, l); } + + template inline + void priv_uninitialized_fill_n(FwdIt first, Count count, const CharT val) + { + //Save initial position + FwdIt init = first; + + BOOST_TRY{ + //Construct objects + for (; count--; ++first){ + this->construct(first, val); + } + } + BOOST_CATCH(...){ + //Call destructors + for (; init != first; ++init){ + this->destroy(init); + } + BOOST_RETHROW + } + BOOST_CATCH_END + } + + template inline + size_type priv_uninitialized_copy(InpIt first, InpIt last, FwdIt dest) + { + //Save initial destination position + FwdIt dest_init = dest; + size_type constructed = 0; + + BOOST_TRY{ + //Try to build objects + for (; first != last; ++dest, ++first, ++constructed){ + this->construct(dest, *first); + } + } + BOOST_CATCH(...){ + //Call destructors + for (; constructed--; ++dest_init){ + this->destroy(dest_init); + } + BOOST_RETHROW + } + BOOST_CATCH_END + return (constructed); + } + + template + basic_string& priv_assign_dispatch(Integer n, Integer x, container_detail::true_) + { return this->assign((size_type) n, (CharT) x); } + + template + basic_string& priv_assign_dispatch(InputIter f, InputIter l, + container_detail::false_) + { + size_type cur = 0; + CharT *ptr = container_detail::to_raw_pointer(this->priv_addr()); + while (f != l && cur != this->priv_size()) { + Traits::assign(*ptr, *f); + ++f; + ++cur; + ++ptr; + } + if (f == l) + this->erase(this->priv_addr() + cur, this->priv_addr() + this->priv_size()); + else + this->append(f, l); + return *this; + } + + template + void priv_insert(const_iterator p, InputIter first, InputIter last, std::input_iterator_tag) + { + for ( ; first != last; ++first, ++p) { + p = this->insert(p, *first); + } + } + + template + void priv_insert(const_iterator position, ForwardIter first, + ForwardIter last, std::forward_iterator_tag) + { + if (first != last) { + size_type n = std::distance(first, last); + size_type remaining = this->capacity() - this->priv_size(); + const size_type old_size = this->size(); + pointer old_start = this->priv_addr(); + bool enough_capacity = false; + std::pair allocation_ret; + size_type new_cap = 0; + + //Check if we have enough capacity + if (remaining >= n){ + enough_capacity = true; + } + else { + //Otherwise expand current buffer or allocate new storage + new_cap = this->next_capacity(n); + allocation_ret = this->allocation_command + (allocate_new | expand_fwd | expand_bwd, old_size + n + 1, + new_cap, new_cap, old_start); + + //Check forward expansion + if(old_start == allocation_ret.first){ + enough_capacity = true; + this->priv_storage(new_cap); + } + } + + //Reuse same buffer + if(enough_capacity){ + const size_type elems_after = + this->priv_size() - (position - this->priv_addr()); + size_type old_length = this->priv_size(); + if (elems_after >= n) { + pointer pointer_past_last = this->priv_addr() + this->priv_size() + 1; + priv_uninitialized_copy(this->priv_addr() + (this->priv_size() - n + 1), + pointer_past_last, pointer_past_last); + + this->priv_size(this->priv_size()+n); + Traits::move(const_cast(container_detail::to_raw_pointer(position + n)), + container_detail::to_raw_pointer(position), + (elems_after - n) + 1); + this->priv_copy(first, last, const_cast(container_detail::to_raw_pointer(position))); + } + else { + ForwardIter mid = first; + std::advance(mid, elems_after + 1); + + priv_uninitialized_copy(mid, last, this->priv_addr() + this->priv_size() + 1); + this->priv_size(this->priv_size() + (n - elems_after)); + priv_uninitialized_copy + (position, const_iterator(this->priv_addr() + old_length + 1), + this->priv_addr() + this->priv_size()); + this->priv_size(this->priv_size() + elems_after); + this->priv_copy(first, mid, const_cast(container_detail::to_raw_pointer(position))); + } + } + else{ + pointer new_start = allocation_ret.first; + if(!allocation_ret.second){ + //Copy data to new buffer + size_type new_length = 0; + //This can't throw, since characters are POD + new_length += priv_uninitialized_copy + (const_iterator(this->priv_addr()), position, new_start); + new_length += priv_uninitialized_copy + (first, last, new_start + new_length); + new_length += priv_uninitialized_copy + (position, const_iterator(this->priv_addr() + this->priv_size()), + new_start + new_length); + this->priv_construct_null(new_start + new_length); + + this->deallocate_block(); + this->is_short(false); + this->priv_long_addr(new_start); + this->priv_long_size(new_length); + this->priv_long_storage(new_cap); + } + else{ + //value_type is POD, so backwards expansion is much easier + //than with vector + value_type *oldbuf = container_detail::to_raw_pointer(old_start); + value_type *newbuf = container_detail::to_raw_pointer(new_start); + const value_type *pos = container_detail::to_raw_pointer(position); + size_type before = pos - oldbuf; + + //First move old data + Traits::move(newbuf, oldbuf, before); + Traits::move(newbuf + before + n, pos, old_size - before); + //Now initialize the new data + priv_uninitialized_copy(first, last, new_start + before); + this->priv_construct_null(new_start + (old_size + n)); + this->is_short(false); + this->priv_long_addr(new_start); + this->priv_long_size(old_size + n); + this->priv_long_storage(new_cap); + } + } + } + } + + template + void priv_insert_dispatch(const_iterator p, Integer n, Integer x, + container_detail::true_) + { insert(p, (size_type) n, (CharT) x); } + + template + void priv_insert_dispatch(const_iterator p, InputIter first, InputIter last, + container_detail::false_) + { + typedef typename std::iterator_traits::iterator_category Category; + priv_insert(p, first, last, Category()); + } + + template + void priv_copy(InputIterator first, InputIterator last, OutIterator result) + { + for ( ; first != last; ++first, ++result) + Traits::assign(*result, *first); + } + + void priv_copy(const CharT* first, const CharT* last, CharT* result) + { Traits::copy(result, first, last - first); } + + template + basic_string& priv_replace_dispatch(const_iterator first, const_iterator last, + Integer n, Integer x, + container_detail::true_) + { return this->replace(first, last, (size_type) n, (CharT) x); } + + template + basic_string& priv_replace_dispatch(const_iterator first, const_iterator last, + InputIter f, InputIter l, + container_detail::false_) + { + typedef typename std::iterator_traits::iterator_category Category; + return this->priv_replace(first, last, f, l, Category()); + } + + + template + basic_string& priv_replace(const_iterator first, const_iterator last, + InputIter f, InputIter l, std::input_iterator_tag) + { + for ( ; first != last && f != l; ++first, ++f) + Traits::assign(*first, *f); + + if (f == l) + this->erase(first, last); + else + this->insert(last, f, l); + return *this; + } + + template + basic_string& priv_replace(const_iterator first, const_iterator last, + ForwardIter f, ForwardIter l, + std::forward_iterator_tag) + { + difference_type n = std::distance(f, l); + const difference_type len = last - first; + if (len >= n) { + this->priv_copy(f, l, const_cast(container_detail::to_raw_pointer(first))); + this->erase(first + n, last); + } + else { + ForwardIter m = f; + std::advance(m, len); + this->priv_copy(f, m, const_cast(container_detail::to_raw_pointer(first))); + this->insert(last, m, l); + } + return *this; + } + /// @endcond +}; + +//!Typedef for a basic_string of +//!narrow characters +typedef basic_string + + ,std::allocator > +string; + +//!Typedef for a basic_string of +//!narrow characters +typedef basic_string + + ,std::allocator > +wstring; + +/// @cond + +template +const typename basic_string::size_type +basic_string::npos + = (typename basic_string::size_type) -1; + +/// @endcond + +// ------------------------------------------------------------ +// Non-member functions. + +// Operator+ + +template +inline basic_string +operator+(const basic_string& x, + const basic_string& y) +{ + typedef basic_string str_t; + typedef typename str_t::reserve_t reserve_t; + reserve_t reserve; + str_t result(reserve, x.size() + y.size(), x.get_stored_allocator()); + result.append(x); + result.append(y); + return boost::move(result); +} + +template inline +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) + operator+( + BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx + , BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +{ + mx += my; + return boost::move(mx); +} + +template inline +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) + operator+( + BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx + , const basic_string& y) +{ + mx += y; + return boost::move(mx); +} + +template inline +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) + operator+(const basic_string& x, + BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +{ + typedef typename basic_string::size_type size_type; + my.replace(size_type(0), size_type(0), x); + return boost::move(my); +} + +template +inline basic_string +operator+(const CharT* s, const basic_string& y) +{ + typedef basic_string str_t; + typedef typename str_t::reserve_t reserve_t; + reserve_t reserve; + const typename str_t::size_type n = Traits::length(s); + str_t result(reserve, n + y.size()); + result.append(s, s + n); + result.append(y); + return boost::move(result); +} + +template inline +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) +operator+(const CharT* s, + BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +{ + typedef typename basic_string::size_type size_type; + return boost::move(my.replace(size_type(0), size_type(0), s)); +} + +template +inline basic_string +operator+(CharT c, const basic_string& y) +{ + typedef basic_string str_t; + typedef typename str_t::reserve_t reserve_t; + reserve_t reserve; + str_t result(reserve, 1 + y.size()); + result.push_back(c); + result.append(y); + return boost::move(result); +} + +template inline +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) +operator+(CharT c, + BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +{ + typedef typename basic_string::size_type size_type; + return boost::move(my.replace(size_type(0), size_type(0), &c, &c + 1)); +} + +template +inline basic_string +operator+(const basic_string& x, const CharT* s) +{ + typedef basic_string str_t; + typedef typename str_t::reserve_t reserve_t; + reserve_t reserve; + const typename str_t::size_type n = Traits::length(s); + str_t result(reserve, x.size() + n, x.get_stored_allocator()); + result.append(x); + result.append(s, s + n); + return boost::move(result); +} + +template +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) +operator+(BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx + , const CharT* s) +{ + mx += s; + return boost::move(mx); +} + +template +inline basic_string +operator+(const basic_string& x, const CharT c) +{ + typedef basic_string str_t; + typedef typename str_t::reserve_t reserve_t; + reserve_t reserve; + str_t result(reserve, x.size() + 1, x.get_stored_allocator()); + result.append(x); + result.push_back(c); + return boost::move(result); +} + +template +BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) +operator+( BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx + , const CharT c) +{ + mx += c; + return boost::move(mx); +} + +// Operator== and operator!= + +template +inline bool +operator==(const basic_string& x, + const basic_string& y) +{ + return x.size() == y.size() && + Traits::compare(x.data(), y.data(), x.size()) == 0; +} + +template +inline bool +operator==(const CharT* s, const basic_string& y) +{ + typename basic_string::size_type n = Traits::length(s); + return n == y.size() && Traits::compare(s, y.data(), n) == 0; +} + +template +inline bool +operator==(const basic_string& x, const CharT* s) +{ + typename basic_string::size_type n = Traits::length(s); + return x.size() == n && Traits::compare(x.data(), s, n) == 0; +} + +template +inline bool +operator!=(const basic_string& x, + const basic_string& y) + { return !(x == y); } + +template +inline bool +operator!=(const CharT* s, const basic_string& y) + { return !(s == y); } + +template +inline bool +operator!=(const basic_string& x, const CharT* s) + { return !(x == s); } + + +// Operator< (and also >, <=, and >=). + +template +inline bool +operator<(const basic_string& x, const basic_string& y) +{ + return x.compare(y) < 0; +// return basic_string +// ::s_compare(x.begin(), x.end(), y.begin(), y.end()) < 0; +} + +template +inline bool +operator<(const CharT* s, const basic_string& y) +{ + return y.compare(s) > 0; +// basic_string::size_type n = Traits::length(s); +// return basic_string +// ::s_compare(s, s + n, y.begin(), y.end()) < 0; +} + +template +inline bool +operator<(const basic_string& x, + const CharT* s) +{ + return x.compare(s) < 0; +// basic_string::size_type n = Traits::length(s); +// return basic_string +// ::s_compare(x.begin(), x.end(), s, s + n) < 0; +} + +template +inline bool +operator>(const basic_string& x, + const basic_string& y) { + return y < x; +} + +template +inline bool +operator>(const CharT* s, const basic_string& y) { + return y < s; +} + +template +inline bool +operator>(const basic_string& x, const CharT* s) +{ + return s < x; +} + +template +inline bool +operator<=(const basic_string& x, + const basic_string& y) +{ + return !(y < x); +} + +template +inline bool +operator<=(const CharT* s, const basic_string& y) + { return !(y < s); } + +template +inline bool +operator<=(const basic_string& x, const CharT* s) + { return !(s < x); } + +template +inline bool +operator>=(const basic_string& x, + const basic_string& y) + { return !(x < y); } + +template +inline bool +operator>=(const CharT* s, const basic_string& y) + { return !(s < y); } + +template +inline bool +operator>=(const basic_string& x, const CharT* s) + { return !(x < s); } + +// Swap. +template +inline void swap(basic_string& x, basic_string& y) +{ x.swap(y); } + +/// @cond +// I/O. +namespace container_detail { + +template +inline bool +string_fill(std::basic_ostream& os, + std::basic_streambuf* buf, + std::size_t n) +{ + CharT f = os.fill(); + std::size_t i; + bool ok = true; + + for (i = 0; i < n; i++) + ok = ok && !Traits::eq_int_type(buf->sputc(f), Traits::eof()); + return ok; +} + +} //namespace container_detail { +/// @endcond + +template +std::basic_ostream& +operator<<(std::basic_ostream& os, const basic_string& s) +{ + typename std::basic_ostream::sentry sentry(os); + bool ok = false; + + if (sentry) { + ok = true; + typename basic_string::size_type n = s.size(); + typename basic_string::size_type pad_len = 0; + const bool left = (os.flags() & std::ios::left) != 0; + const std::size_t w = os.width(0); + std::basic_streambuf* buf = os.rdbuf(); + + if (w != 0 && n < w) + pad_len = w - n; + + if (!left) + ok = container_detail::string_fill(os, buf, pad_len); + + ok = ok && + buf->sputn(s.data(), std::streamsize(n)) == std::streamsize(n); + + if (left) + ok = ok && container_detail::string_fill(os, buf, pad_len); + } + + if (!ok) + os.setstate(std::ios_base::failbit); + + return os; +} + + +template +std::basic_istream& +operator>>(std::basic_istream& is, basic_string& s) +{ + typename std::basic_istream::sentry sentry(is); + + if (sentry) { + std::basic_streambuf* buf = is.rdbuf(); + const std::ctype& ctype = std::use_facet >(is.getloc()); + + s.clear(); + std::size_t n = is.width(0); + if (n == 0) + n = static_cast(-1); + else + s.reserve(n); + + while (n-- > 0) { + typename Traits::int_type c1 = buf->sbumpc(); + + if (Traits::eq_int_type(c1, Traits::eof())) { + is.setstate(std::ios_base::eofbit); + break; + } + else { + CharT c = Traits::to_char_type(c1); + + if (ctype.is(std::ctype::space, c)) { + if (Traits::eq_int_type(buf->sputbackc(c), Traits::eof())) + is.setstate(std::ios_base::failbit); + break; + } + else + s.push_back(c); + } + } + + // If we have read no characters, then set failbit. + if (s.size() == 0) + is.setstate(std::ios_base::failbit); + } + else + is.setstate(std::ios_base::failbit); + + return is; +} + +template +std::basic_istream& +getline(std::istream& is, basic_string& s,CharT delim) +{ + typename basic_string::size_type nread = 0; + typename std::basic_istream::sentry sentry(is, true); + if (sentry) { + std::basic_streambuf* buf = is.rdbuf(); + s.clear(); + + while (nread < s.max_size()) { + int c1 = buf->sbumpc(); + if (Traits::eq_int_type(c1, Traits::eof())) { + is.setstate(std::ios_base::eofbit); + break; + } + else { + ++nread; + CharT c = Traits::to_char_type(c1); + if (!Traits::eq(c, delim)) + s.push_back(c); + else + break; // Character is extracted but not appended. + } + } + } + if (nread == 0 || nread >= s.max_size()) + is.setstate(std::ios_base::failbit); + + return is; +} + +template +inline std::basic_istream& +getline(std::basic_istream& is, basic_string& s) +{ + return getline(is, s, '\n'); +} + +template +inline std::size_t hash_value(basic_string, A> const& v) +{ + return hash_range(v.begin(), v.end()); +} + +}} + +/// @cond + +namespace boost { +/* +//!has_trivial_destructor_after_move<> == true_type +//!specialization for optimizations +template +struct has_trivial_destructor_after_move > +{ + static const bool value = has_trivial_destructor::value; +}; +*/ +} + +/// @endcond + +#include + +#endif // BOOST_CONTAINER_STRING_HPP diff --git a/3party/boost/boost/interprocess/containers/container/vector.hpp b/3party/boost/boost/container/vector.hpp similarity index 59% rename from 3party/boost/boost/interprocess/containers/container/vector.hpp rename to 3party/boost/boost/container/vector.hpp index 71399a26f5..c6e5b51c30 100644 --- a/3party/boost/boost/interprocess/containers/container/vector.hpp +++ b/3party/boost/boost/container/vector.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2012. 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) // @@ -8,16 +8,16 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_CONTAINERS_VECTOR_HPP -#define BOOST_CONTAINERS_CONTAINERS_VECTOR_HPP +#ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP +#define BOOST_CONTAINER_CONTAINER_VECTOR_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP +#include +#include +#include #include #include @@ -31,42 +31,41 @@ #include #include #include -#include INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALLOCATION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_DESTROYERS_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ADVANCED_INSERT_INT_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace boost { namespace container { /// @cond -namespace containers_detail { +namespace container_detail { -//! Const vector_iterator used to iterate through a vector. +//! Const vector_iterator used to iterate through a vector. template class vector_const_iterator - : public std::iterator::value_type - ,typename std::iterator_traits::difference_type - ,typename boost::pointer_to_other - ::value_type - >::type - ,const typename std::iterator_traits::value_type &> { public: - typedef typename std::iterator_traits::value_type value_type; - typedef typename std::iterator_traits::difference_type difference_type; - typedef typename boost::pointer_to_other::type pointer; - typedef const value_type& reference; + typedef std::random_access_iterator_tag iterator_category; + typedef typename boost::intrusive::pointer_traits::element_type value_type; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::intrusive::pointer_traits::template + rebind_pointer::type pointer; + typedef const value_type& reference; /// @cond protected: @@ -83,20 +82,20 @@ class vector_const_iterator vector_const_iterator() : m_ptr(0){} //Pointer like operators - reference operator*() const + reference operator*() const { return *m_ptr; } - const value_type * operator->() const - { return containers_detail::get_pointer(m_ptr); } + const value_type * operator->() const + { return container_detail::to_raw_pointer(m_ptr); } reference operator[](difference_type off) const { return m_ptr[off]; } //Increment / Decrement - vector_const_iterator& operator++() + vector_const_iterator& operator++() { ++m_ptr; return *this; } - vector_const_iterator operator++(int) + vector_const_iterator operator++(int) { Pointer tmp = m_ptr; ++*this; return vector_const_iterator(tmp); } vector_const_iterator& operator--() @@ -155,32 +154,33 @@ class vector_iterator {} public: - typedef typename std::iterator_traits::value_type value_type; - typedef typename vector_const_iterator::difference_type difference_type; - typedef Pointer pointer; - typedef value_type& reference; + typedef std::random_access_iterator_tag iterator_category; + typedef typename boost::intrusive::pointer_traits::element_type value_type; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef Pointer pointer; + typedef value_type& reference; //Constructors vector_iterator() {} //Pointer like operators - reference operator*() const + reference operator*() const { return *this->m_ptr; } - value_type* operator->() const - { return containers_detail::get_pointer(this->m_ptr); } + value_type* operator->() const + { return container_detail::to_raw_pointer(this->m_ptr); } - reference operator[](difference_type off) const + reference operator[](difference_type off) const { return this->m_ptr[off]; } //Increment / Decrement - vector_iterator& operator++() + vector_iterator& operator++() { ++this->m_ptr; return *this; } vector_iterator operator++(int) { pointer tmp = this->m_ptr; ++*this; return vector_iterator(tmp); } - + vector_iterator& operator--() { --this->m_ptr; return *this; } @@ -213,47 +213,60 @@ struct vector_value_traits typedef T value_type; typedef A allocator_type; static const bool trivial_dctr = boost::has_trivial_destructor::value; - static const bool trivial_dctr_after_move = false; + static const bool trivial_dctr_after_move = trivial_dctr; //::boost::has_trivial_destructor_after_move::value || trivial_dctr; + //static const bool trivial_copy = has_trivial_copy::value; + //static const bool nothrow_copy = has_nothrow_copy::value; + //static const bool trivial_assign = has_trivial_assign::value; + //static const bool nothrow_assign = has_nothrow_assign::value; + static const bool trivial_copy = has_trivial_copy::value; static const bool nothrow_copy = has_nothrow_copy::value; static const bool trivial_assign = has_trivial_assign::value; - static const bool nothrow_assign = has_nothrow_assign::value; + static const bool nothrow_assign = false; //This is the anti-exception array destructor //to deallocate values already constructed - typedef typename containers_detail::if_c + typedef typename container_detail::if_c - ,containers_detail::scoped_destructor_n + ,container_detail::null_scoped_destructor_n + ,container_detail::scoped_destructor_n >::type OldArrayDestructor; //This is the anti-exception array destructor //to destroy objects created with copy construction - typedef typename containers_detail::if_c + typedef typename container_detail::if_c - ,containers_detail::scoped_destructor_n - >::type UCopiedArrayDestructor; + ,container_detail::null_scoped_destructor_n + ,container_detail::scoped_destructor_n + >::type ArrayDestructor; //This is the anti-exception array deallocator - typedef typename containers_detail::if_c + typedef typename container_detail::if_c - ,containers_detail::scoped_array_deallocator - >::type UCopiedArrayDeallocator; + ,container_detail::null_scoped_array_deallocator + ,container_detail::scoped_array_deallocator + >::type ArrayDeallocator; }; //!This struct deallocates and allocated memory template -struct vector_alloc_holder +struct vector_alloc_holder { - typedef typename A::pointer pointer; - typedef typename A::size_type size_type; - typedef typename A::value_type value_type; - typedef vector_value_traits value_traits; + typedef boost::container::allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::pointer pointer; + typedef typename allocator_traits_type::size_type size_type; + typedef typename allocator_traits_type::value_type value_type; + typedef vector_value_traits value_traits; //Constructor, does not throw - vector_alloc_holder(const A &a) - : members_(a) + vector_alloc_holder() + BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor::value) + : members_() + {} + + //Constructor, does not throw + template + explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a) BOOST_CONTAINER_NOEXCEPT + : members_(boost::forward(a)) {} //Destructor @@ -263,13 +276,13 @@ struct vector_alloc_holder this->prot_deallocate(); } - typedef containers_detail::integral_constant allocator_v1; - typedef containers_detail::integral_constant allocator_v2; - typedef containers_detail::integral_constant::value> alloc_version; + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + typedef container_detail::integral_constant::value> alloc_version; std::pair allocation_command(allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0) { @@ -279,7 +292,7 @@ struct vector_alloc_holder std::pair allocation_command(allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse, @@ -295,7 +308,7 @@ struct vector_alloc_holder std::pair allocation_command(allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse, @@ -306,7 +319,10 @@ struct vector_alloc_holder } size_type next_capacity(size_type additional_objects) const - { return get_next_capacity(this->alloc().max_size(), this->members_.m_capacity, additional_objects); } + { + return get_next_capacity( allocator_traits_type::max_size(this->alloc()) + , this->members_.m_capacity, additional_objects); + } struct members_holder : public A @@ -315,8 +331,13 @@ struct vector_alloc_holder members_holder(const members_holder&); public: - members_holder(const A &alloc) - : A(alloc), m_start(0), m_size(0), m_capacity(0) + template + explicit members_holder(BOOST_FWD_REF(Alloc) alloc) + : A(boost::forward(alloc)), m_start(0), m_size(0), m_capacity(0) + {} + + members_holder() + : A(), m_start(0), m_size(0), m_capacity(0) {} pointer m_start; @@ -324,6 +345,13 @@ struct vector_alloc_holder size_type m_capacity; } members_; + void swap_members(vector_alloc_holder &x) + { + container_detail::do_swap(this->members_.m_start, x.members_.m_start); + container_detail::do_swap(this->members_.m_size, x.members_.m_size); + container_detail::do_swap(this->members_.m_capacity, x.members_.m_capacity); + } + A &alloc() { return members_; } @@ -343,77 +371,83 @@ struct vector_alloc_holder void destroy(value_type* p) { if(!value_traits::trivial_dctr) - containers_detail::get_pointer(p)->~value_type(); + allocator_traits_type::destroy(this->alloc(), p); } void destroy_n(value_type* p, size_type n) { - if(!value_traits::trivial_dctr) - for(; n--; ++p) p->~value_type(); + if(!value_traits::trivial_dctr){ + for(; n--; ++p){ + allocator_traits_type::destroy(this->alloc(), p); + } + } } void prot_destroy_all() { - this->destroy_n(containers_detail::get_pointer(this->members_.m_start), this->members_.m_size); + this->destroy_n(container_detail::to_raw_pointer(this->members_.m_start), this->members_.m_size); this->members_.m_size = 0; } }; -} //namespace containers_detail { +} //namespace container_detail { /// @endcond //! \class vector -//! A vector is a sequence that supports random access to elements, constant -//! time insertion and removal of elements at the end, and linear time insertion -//! and removal of elements at the beginning or in the middle. The number of +//! A vector is a sequence that supports random access to elements, constant +//! time insertion and removal of elements at the end, and linear time insertion +//! and removal of elements at the beginning or in the middle. The number of //! elements in a vector may vary dynamically; memory management is automatic. //! boost::container::vector is similar to std::vector but it's compatible //! with shared memory and memory mapped files. +#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED +template > +#else template -class vector : private containers_detail::vector_alloc_holder +#endif +class vector : private container_detail::vector_alloc_holder { /// @cond typedef vector self_t; - typedef containers_detail::vector_alloc_holder base_t; - typedef typename containers_detail:: - move_const_ref_type::type insert_const_ref_type; + typedef container_detail::vector_alloc_holder base_t; + typedef allocator_traits allocator_traits_type; /// @endcond public: //! The type of object, T, stored in the vector - typedef T value_type; + typedef T value_type; //! Pointer to T - typedef typename A::pointer pointer; + typedef typename allocator_traits_type::pointer pointer; //! Const pointer to T - typedef typename A::const_pointer const_pointer; + typedef typename allocator_traits_type::const_pointer const_pointer; //! Reference to T - typedef typename A::reference reference; + typedef typename allocator_traits_type::reference reference; //! Const reference to T - typedef typename A::const_reference const_reference; + typedef typename allocator_traits_type::const_reference const_reference; //! An unsigned integral type - typedef typename A::size_type size_type; + typedef typename allocator_traits_type::size_type size_type; //! A signed integral type - typedef typename A::difference_type difference_type; + typedef typename allocator_traits_type::difference_type difference_type; //! The allocator type typedef A allocator_type; //! The random access iterator - typedef containers_detail::vector_iterator iterator; + typedef container_detail::vector_iterator iterator; //! The random access const_iterator - typedef containers_detail::vector_const_iterator const_iterator; + typedef container_detail::vector_const_iterator const_iterator; - //! Iterator used to iterate backwards through a vector. - typedef std::reverse_iterator + //! Iterator used to iterate backwards through a vector. + typedef std::reverse_iterator reverse_iterator; - //! Const iterator used to iterate backwards through a vector. - typedef std::reverse_iterator + //! Const iterator used to iterate backwards through a vector. + typedef std::reverse_iterator const_reverse_iterator; //! The stored allocator type typedef allocator_type stored_allocator_type; /// @cond private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(vector) - typedef containers_detail::advanced_insert_aux_int advanced_insert_aux_int_t; - typedef containers_detail::vector_value_traits value_traits; + BOOST_COPYABLE_AND_MOVABLE(vector) + typedef container_detail::advanced_insert_aux_int advanced_insert_aux_int_t; + typedef container_detail::vector_value_traits value_traits; typedef typename base_t::allocator_v1 allocator_v1; typedef typename base_t::allocator_v2 allocator_v2; @@ -421,64 +455,130 @@ class vector : private containers_detail::vector_alloc_holder typedef constant_iterator cvalue_iterator; typedef repeat_iterator repeat_it; - typedef BOOST_CONTAINER_MOVE_NAMESPACE::move_iterator repeat_move_it; + typedef boost::move_iterator repeat_move_it; /// @endcond public: //! Effects: Constructs a vector taking the allocator as parameter. - //! - //! Throws: If allocator_type's copy constructor throws. - //! + //! + //! Throws: If allocator_type's default constructor throws. + //! //! Complexity: Constant. - explicit vector(const A& a = A()) + vector() + BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor::value) + : base_t() + {} + + //! Effects: Constructs a vector taking the allocator as parameter. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + explicit vector(const A& a) BOOST_CONTAINER_NOEXCEPT : base_t(a) {} //! Effects: Constructs a vector that will use a copy of allocator a //! and inserts n default contructed values. //! - //! Throws: If allocator_type's default constructor or copy constructor - //! throws or T's default or copy constructor throws. - //! + //! Throws: If allocator_type's default constructor or allocation + //! throws or T's default constructor throws. + //! //! Complexity: Linear to n. - explicit vector(size_type n) - : base_t(allocator_type()) - { this->resize(n); } + explicit vector(size_type n) + : base_t() + { + //Allocate + size_type real_cap; + std::pair ret = + this->allocation_command(allocate_new, n, n, real_cap, this->members_.m_start); + T *new_mem = container_detail::to_raw_pointer(ret.first); + //Anti-exception rollback + typename value_traits::ArrayDeallocator scoped_alloc(new_mem, this->alloc(), real_cap); + //Default constructor + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); + proxy.uninitialized_copy_remaining_to(new_mem); + //All ok, commit + this->members_.m_start = ret.first; + this->members_.m_size = n; + this->members_.m_capacity = real_cap; + scoped_alloc.release(); + } //! Effects: Constructs a vector that will use a copy of allocator a //! and inserts n copies of value. //! - //! Throws: If allocator_type's default constructor or copy constructor - //! throws or T's default or copy constructor throws. - //! + //! Throws: If allocator_type's default constructor or allocation + //! throws or T's copy constructor throws. + //! //! Complexity: Linear to n. - vector(size_type n, const T& value, const allocator_type& a = allocator_type()) + vector(size_type n, const T& value, const allocator_type& a = allocator_type()) : base_t(a) { this->insert(this->cend(), n, value); } //! Effects: Copy constructs a vector. //! //! Postcondition: x == *this. - //! + //! + //! Throws: If allocator_type's default constructor or allocation + //! throws or T's copy constructor throws. + //! //! Complexity: Linear to the elements x contains. - vector(const vector& x) - : base_t(static_cast(x).alloc()) - { *this = x; } + vector(const vector &x) + : base_t(allocator_traits_type::select_on_container_copy_construction(x.alloc())) + { + this->assign( container_detail::to_raw_pointer(x.members_.m_start) + , container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size)); + } //! Effects: Move constructor. Moves mx's resources to *this. //! - //! Throws: If allocator_type's copy constructor throws. - //! + //! Throws: Nothing + //! //! Complexity: Constant. - vector(BOOST_MOVE_MACRO_RV_REF(vector) mx) - : base_t(static_cast(mx).alloc()) - { this->swap(mx); } + vector(BOOST_RV_REF(vector) mx) BOOST_CONTAINER_NOEXCEPT + : base_t(boost::move(mx.alloc())) + { this->swap_members(mx); } + + //! Effects: Copy constructs a vector using the specified allocator. + //! + //! Postcondition: x == *this. + //! + //! Throws: If allocation + //! throws or T's copy constructor throws. + //! + //! Complexity: Linear to the elements x contains. + vector(const vector &x, const allocator_type &a) + : base_t(a) + { + this->assign( container_detail::to_raw_pointer(x.members_.m_start) + , container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size)); + } + + //! Effects: Move constructor using the specified allocator. + //! Moves mx's resources to *this if a == allocator_type(). + //! Otherwise copies values from x to *this. + //! + //! Throws: If allocation or T's copy constructor throws. + //! + //! Complexity: Constant if a == mx.get_allocator(), linear otherwise. + vector(BOOST_RV_REF(vector) mx, const allocator_type &a) + : base_t(a) + { + if(mx.alloc() == a){ + this->swap_members(mx); + } + else{ + this->assign( container_detail::to_raw_pointer(mx.members_.m_start) + , container_detail::to_raw_pointer(mx.members_.m_start + mx.members_.m_size)); + } + } //! Effects: Constructs a vector that will use a copy of allocator a //! and inserts a copy of the range [first, last) in the vector. //! - //! Throws: If allocator_type's default constructor or copy constructor + //! Throws: If allocator_type's default constructor or allocation //! throws or T's constructor taking an dereferenced InIt throws. //! //! Complexity: Linear to the range [first, last). @@ -493,268 +593,284 @@ class vector : private containers_detail::vector_alloc_holder //! Throws: Nothing. //! //! Complexity: Linear to the number of elements. - ~vector() + ~vector() BOOST_CONTAINER_NOEXCEPT {} //vector_alloc_holder clears the data //! Effects: Returns an iterator to the first element contained in the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator begin() + iterator begin() BOOST_CONTAINER_NOEXCEPT { return iterator(this->members_.m_start); } //! Effects: Returns a const_iterator to the first element contained in the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator begin() const + const_iterator begin() const BOOST_CONTAINER_NOEXCEPT { return const_iterator(this->members_.m_start); } //! Effects: Returns an iterator to the end of the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - iterator end() + iterator end() BOOST_CONTAINER_NOEXCEPT { return iterator(this->members_.m_start + this->members_.m_size); } //! Effects: Returns a const_iterator to the end of the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator end() const + const_iterator end() const BOOST_CONTAINER_NOEXCEPT { return this->cend(); } - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed vector. - //! + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed vector. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rbegin() + reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT { return reverse_iterator(this->end()); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed vector. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed vector. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rbegin()const + const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT { return this->crbegin(); } //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed vector. - //! + //! of the reversed vector. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reverse_iterator rend() + reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT { return reverse_iterator(this->begin()); } //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed vector. - //! + //! of the reversed vector. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator rend() const + const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT { return this->crend(); } //! Effects: Returns a const_iterator to the first element contained in the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cbegin() const + const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT { return const_iterator(this->members_.m_start); } //! Effects: Returns a const_iterator to the end of the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_iterator cend() const + const_iterator cend() const BOOST_CONTAINER_NOEXCEPT { return const_iterator(this->members_.m_start + this->members_.m_size); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed vector. - //! + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed vector. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crbegin()const + const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT { return const_reverse_iterator(this->end());} //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed vector. - //! + //! of the reversed vector. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reverse_iterator crend() const + const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT { return const_reverse_iterator(this->begin()); } //! Requires: !empty() //! - //! Effects: Returns a reference to the first element - //! from the beginning of the container. - //! + //! Effects: Returns a reference to the first + //! element of the container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reference front() + reference front() BOOST_CONTAINER_NOEXCEPT { return *this->members_.m_start; } //! Requires: !empty() //! - //! Effects: Returns a const reference to the first element - //! from the beginning of the container. - //! + //! Effects: Returns a const reference to the first + //! element of the container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reference front() const + const_reference front() const BOOST_CONTAINER_NOEXCEPT { return *this->members_.m_start; } //! Requires: !empty() //! - //! Effects: Returns a reference to the first element - //! from the beginning of the container. - //! + //! Effects: Returns a reference to the last + //! element of the container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reference back() + reference back() BOOST_CONTAINER_NOEXCEPT { return this->members_.m_start[this->members_.m_size - 1]; } - //! Effects: Returns a const reference to the first element - //! from the beginning of the container. - //! + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the last + //! element of the container. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reference back() const + const_reference back() const BOOST_CONTAINER_NOEXCEPT { return this->members_.m_start[this->members_.m_size - 1]; } //! Returns: A pointer such that [data(),data() + size()) is a valid range. //! For a non-empty vector, data() == &front(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - pointer data() + pointer data() BOOST_CONTAINER_NOEXCEPT { return this->members_.m_start; } //! Returns: A pointer such that [data(),data() + size()) is a valid range. //! For a non-empty vector, data() == &front(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_pointer data() const + const_pointer data() const BOOST_CONTAINER_NOEXCEPT { return this->members_.m_start; } //! Effects: Returns the number of the elements contained in the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type size() const + size_type size() const BOOST_CONTAINER_NOEXCEPT { return this->members_.m_size; } //! Effects: Returns the largest possible size of the vector. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type max_size() const - { return this->alloc().max_size(); } + size_type max_size() const BOOST_CONTAINER_NOEXCEPT + { return allocator_traits_type::max_size(this->alloc()); } //! Effects: Number of elements for which memory has been allocated. //! capacity() is always greater than or equal to size(). - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - size_type capacity() const + size_type capacity() const BOOST_CONTAINER_NOEXCEPT { return this->members_.m_capacity; } //! Effects: Returns true if the vector contains no elements. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - bool empty() const + bool empty() const BOOST_CONTAINER_NOEXCEPT { return !this->members_.m_size; } - //! Requires: size() < n. + //! Requires: size() > n. //! - //! Effects: Returns a reference to the nth element + //! Effects: Returns a reference to the nth element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - reference operator[](size_type n) + reference operator[](size_type n) { return this->members_.m_start[n]; } - //! Requires: size() < n. + //! Requires: size() > n. //! - //! Effects: Returns a const reference to the nth element + //! Effects: Returns a const reference to the nth element //! from the beginning of the container. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. - const_reference operator[](size_type n) const + const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT { return this->members_.m_start[n]; } - //! Requires: size() < n. + //! Requires: size() > n. //! - //! Effects: Returns a reference to the nth element + //! Effects: Returns a reference to the nth element //! from the beginning of the container. - //! + //! //! Throws: std::range_error if n >= size() - //! + //! //! Complexity: Constant. reference at(size_type n) { this->priv_check_range(n); return this->members_.m_start[n]; } - //! Requires: size() < n. + //! Requires: size() > n. //! - //! Effects: Returns a const reference to the nth element + //! Effects: Returns a const reference to the nth element //! from the beginning of the container. - //! + //! //! Throws: std::range_error if n >= size() - //! + //! //! Complexity: Constant. const_reference at(size_type n) const { this->priv_check_range(n); return this->members_.m_start[n]; } //! Effects: Returns a copy of the internal allocator. - //! + //! //! Throws: If allocator's copy constructor throws. - //! + //! //! Complexity: Constant. - allocator_type get_allocator() const + allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT { return this->alloc(); } - const stored_allocator_type &get_stored_allocator() const + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT { return this->alloc(); } - stored_allocator_type &get_stored_allocator() + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT { return this->alloc(); } //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. //! If the request is successful, then capacity() is greater than or equal to //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! - //! Throws: If memory allocation allocation throws or T's copy constructor throws. + //! + //! Throws: If memory allocation allocation throws or T's copy/move constructor throws. void reserve(size_type new_cap) { if (this->capacity() < new_cap){ @@ -770,7 +886,7 @@ class vector : private containers_detail::vector_alloc_holder //Check for forward expansion same_buffer_start = ret.second && this->members_.m_start == ret.first; if(same_buffer_start){ - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_expand_fwd; #endif this->members_.m_capacity = real_cap; @@ -779,30 +895,30 @@ class vector : private containers_detail::vector_alloc_holder //If there is no forward expansion, move objects else{ //We will reuse insert code, so create a dummy input iterator - T *dummy_it(containers_detail::get_pointer(this->members_.m_start)); - containers_detail::advanced_insert_aux_proxy, T*> - proxy(::BOOST_CONTAINER_MOVE_NAMESPACE::make_move_iterator(dummy_it), ::BOOST_CONTAINER_MOVE_NAMESPACE::make_move_iterator(dummy_it)); + T *dummy_it(container_detail::to_raw_pointer(this->members_.m_start)); + container_detail::advanced_insert_aux_proxy, T*> + proxy(this->alloc(), ::boost::make_move_iterator(dummy_it), ::boost::make_move_iterator(dummy_it)); //Backwards (and possibly forward) expansion if(ret.second){ - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_expand_bwd; #endif this->priv_range_insert_expand_backwards - ( containers_detail::get_pointer(ret.first) + ( container_detail::to_raw_pointer(ret.first) , real_cap - , containers_detail::get_pointer(this->members_.m_start) + , container_detail::to_raw_pointer(this->members_.m_start) , 0 , proxy); } //New buffer else{ - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_alloc; #endif this->priv_range_insert_new_allocation - ( containers_detail::get_pointer(ret.first) + ( container_detail::to_raw_pointer(ret.first) , real_cap - , containers_detail::get_pointer(this->members_.m_start) + , container_detail::to_raw_pointer(this->members_.m_start) , 0 , proxy); } @@ -812,16 +928,26 @@ class vector : private containers_detail::vector_alloc_holder //! Effects: Makes *this contain the same elements as x. //! - //! Postcondition: this->size() == x.size(). *this contains a copy - //! of each of x's elements. + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. //! - //! Throws: If memory allocation throws or T's copy constructor throws. + //! Throws: If memory allocation throws or T's copy/move constructor/assignment throws. //! //! Complexity: Linear to the number of elements in x. - vector& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(vector) x) + vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x) { if (&x != this){ - this->assign(x.members_.m_start, x.members_.m_start + x.members_.m_size); + allocator_type &this_alloc = this->alloc(); + const allocator_type &x_alloc = x.alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + this->shrink_to_fit(); + } + container_detail::assign_alloc(this_alloc, x_alloc, flag); + this->assign( container_detail::to_raw_pointer(x.members_.m_start) + , container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size)); } return *this; } @@ -831,21 +957,39 @@ class vector : private containers_detail::vector_alloc_holder //! Postcondition: x.empty(). *this contains a the elements x had //! before the function. //! - //! Throws: If allocator_type's copy constructor throws. + //! Throws: Nothing //! //! Complexity: Linear. - vector& operator=(BOOST_MOVE_MACRO_RV_REF(vector) x) + vector& operator=(BOOST_RV_REF(vector) x) + //iG BOOST_CONTAINER_NOEXCEPT_IF(!allocator_type::propagate_on_container_move_assignment::value || is_nothrow_move_assignable::value);) + BOOST_CONTAINER_NOEXCEPT { if (&x != this){ - this->swap(x); - x.clear(); + allocator_type &this_alloc = this->alloc(); + allocator_type &x_alloc = x.alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy objects but retain memory in case x reuses it in the future + this->clear(); + this->swap_members(x); + //Move allocator if needed + container_detail::bool_ flag; + container_detail::move_alloc(this_alloc, x_alloc, flag); + } + //If unequal allocators, then do a one by one move + else{ + this->assign( boost::make_move_iterator(container_detail::to_raw_pointer(x.members_.m_start)) + , boost::make_move_iterator(container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size))); + } } return *this; } //! Effects: Assigns the n copies of val to *this. //! - //! Throws: If memory allocation throws or T's copy constructor throws. + //! Throws: If memory allocation throws or + //! T's copy/move constructor/assignment throws. //! //! Complexity: Linear to n. void assign(size_type n, const value_type& val) @@ -853,77 +997,60 @@ class vector : private containers_detail::vector_alloc_holder //! Effects: Assigns the the range [first, last) to *this. //! - //! Throws: If memory allocation throws or - //! T's constructor from dereferencing InpIt throws. + //! Throws: If memory allocation throws or T's copy/move constructor/assignment or + //! T's constructor/assignment from dereferencing InpIt throws. //! //! Complexity: Linear to n. template - void assign(InIt first, InIt last) + void assign(InIt first, InIt last) { //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; this->priv_assign_dispatch(first, last, Result()); } + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts a copy of x at the end of the vector. //! //! Throws: If memory allocation throws or - //! T's copy constructor throws. + //! T's copy/move constructor throws. //! //! Complexity: Amortized constant time. - void push_back(insert_const_ref_type x) - { return priv_push_back(x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - void push_back(T &x) { push_back(const_cast(x)); } - - template - void push_back(const U &u, typename containers_detail::enable_if_c - ::value && - !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value - >::type* =0) - { return priv_push_back(u); } - #endif + void push_back(const T &x); //! Effects: Constructs a new element in the end of the vector //! and moves the resources of mx to this new element. //! - //! Throws: If memory allocation throws. + //! Throws: If memory allocation throws or + //! T's move constructor throws. //! //! Complexity: Amortized constant time. - void push_back(BOOST_MOVE_MACRO_RV_REF(T) x) - { - if (this->members_.m_size < this->members_.m_capacity){ - //There is more memory, just construct a new object at the end - new((void*)containers_detail::get_pointer(this->members_.m_start + this->members_.m_size))value_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); - ++this->members_.m_size; - } - else{ - this->insert(this->cend(), BOOST_CONTAINER_MOVE_NAMESPACE::move(x)); - } - } - - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + void push_back(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) + #endif + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the end of the vector. //! - //! Throws: If memory allocation throws or the in-place constructor throws. + //! Throws: If memory allocation throws or the in-place constructor throws or + //! T's move constructor throws. //! //! Complexity: Amortized constant time. template void emplace_back(Args &&...args) { - T* back_pos = containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size; + T* back_pos = container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size; if (this->members_.m_size < this->members_.m_capacity){ //There is more memory, just construct a new object at the end - new((void*)(back_pos))value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + allocator_traits_type::construct(this->alloc(), back_pos, ::boost::forward(args)...); ++this->members_.m_size; } else{ - typedef containers_detail::advanced_insert_aux_emplace type; - type &&proxy = type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + typedef container_detail::advanced_insert_aux_emplace type; + type &&proxy = type(this->alloc(), ::boost::forward(args)...); priv_range_insert(back_pos, 1, proxy); } } @@ -933,7 +1060,8 @@ class vector : private containers_detail::vector_alloc_holder //! Effects: Inserts an object of type T constructed with //! std::forward(args)... before position //! - //! Throws: If memory allocation throws or the in-place constructor throws. + //! Throws: If memory allocation throws or the in-place constructor throws or + //! T's move constructor/assignment throws. //! //! Complexity: If position is end(), amortized constant time //! Linear time otherwise. @@ -942,108 +1070,74 @@ class vector : private containers_detail::vector_alloc_holder { //Just call more general insert(pos, size, value) and return iterator size_type pos_n = position - cbegin(); - typedef containers_detail::advanced_insert_aux_emplace type; - type &&proxy = type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); + typedef container_detail::advanced_insert_aux_emplace type; + type &&proxy = type(this->alloc(), ::boost::forward(args)...); priv_range_insert(position.get_ptr(), 1, proxy); return iterator(this->members_.m_start + pos_n); } #else - void emplace_back() - { - T* back_pos = containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size; - if (this->members_.m_size < this->members_.m_capacity){ - //There is more memory, just construct a new object at the end - new((void*)(back_pos))value_type(); - ++this->members_.m_size; - } - else{ - containers_detail::advanced_insert_aux_emplace proxy; - priv_range_insert(back_pos, 1, proxy); - } - } - - iterator emplace(const_iterator position) - { - size_type pos_n = position - cbegin(); - containers_detail::advanced_insert_aux_emplace proxy; - priv_range_insert(containers_detail::get_pointer(position.get_ptr()), 1, proxy); - return iterator(this->members_.m_start + pos_n); - } - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ - T* back_pos = containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size; \ + T* back_pos = container_detail::to_raw_pointer \ + (this->members_.m_start) + this->members_.m_size; \ if (this->members_.m_size < this->members_.m_capacity){ \ - new((void*)(back_pos))value_type \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + allocator_traits_type::construct (this->alloc() \ + , back_pos BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ ++this->members_.m_size; \ } \ else{ \ - containers_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - \ - proxy(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ priv_range_insert(back_pos, 1, proxy); \ } \ } \ \ - template \ - iterator emplace(const_iterator pos, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(const_iterator pos \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ size_type pos_n = pos - cbegin(); \ - containers_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - \ - proxy(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - priv_range_insert(containers_detail::get_pointer(pos.get_ptr()), 1, proxy); \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_range_insert(container_detail::to_raw_pointer(pos.get_ptr()), 1, proxy); \ return iterator(this->members_.m_start + pos_n); \ } \ //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) #include BOOST_PP_LOCAL_ITERATE() - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + //! Effects: Swaps the contents of *this and x. - //! If this->allocator_type() != x.allocator_type() - //! allocators are also swapped. //! //! Throws: Nothing. //! //! Complexity: Constant. void swap(vector& x) { - allocator_type &this_al = this->alloc(), &other_al = x.alloc(); //Just swap internals - containers_detail::do_swap(this->members_.m_start, x.members_.m_start); - containers_detail::do_swap(this->members_.m_size, x.members_.m_size); - containers_detail::do_swap(this->members_.m_capacity, x.members_.m_capacity); - - if (this_al != other_al){ - containers_detail::do_swap(this_al, other_al); - } + this->swap_members(x); + //And now the allocator + container_detail::bool_ flag; + container_detail::swap_alloc(this->alloc(), x.alloc(), flag); } + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Requires: position must be a valid iterator of *this. //! //! Effects: Insert a copy of x before position. //! - //! Throws: If memory allocation throws or x's copy constructor throws. + //! Throws: If memory allocation throws or T's copy/move constructor/assignment throws. //! //! Complexity: If position is end(), amortized constant time //! Linear time otherwise. - iterator insert(const_iterator position, insert_const_ref_type x) - { return this->priv_insert(position, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } - - template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return this->priv_insert(position, u); } - #endif + iterator insert(const_iterator position, const T &x); //! Requires: position must be a valid iterator of *this. //! @@ -1053,30 +1147,25 @@ class vector : private containers_detail::vector_alloc_holder //! //! Complexity: If position is end(), amortized constant time //! Linear time otherwise. - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(T) x) - { - //Just call more general insert(pos, size, value) and return iterator - size_type pos_n = position - cbegin(); - this->insert(position - ,repeat_move_it(repeat_it(x, 1)) - ,repeat_move_it(repeat_it())); - return iterator(this->members_.m_start + pos_n); - } + iterator insert(const_iterator position, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif //! Requires: pos must be a valid iterator of *this. //! //! Effects: Insert a copy of the [first, last) range before pos. //! //! Throws: If memory allocation throws, T's constructor from a - //! dereferenced InpIt throws or T's copy constructor throws. + //! dereferenced InpIt throws or T's copy/move constructor/assignment throws. //! //! Complexity: Linear to std::distance [first, last). template void insert(const_iterator pos, InIt first, InIt last) { //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; + const bool aux_boolean = container_detail::is_convertible::value; + typedef container_detail::bool_ Result; this->priv_insert_dispatch(pos, first, last, Result()); } @@ -1095,27 +1184,27 @@ class vector : private containers_detail::vector_alloc_holder //! Throws: Nothing. //! //! Complexity: Constant time. - void pop_back() + void pop_back() { //Destroy last element --this->members_.m_size; - this->destroy(containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size); + this->destroy(container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size); } //! Effects: Erases the element at position pos. //! //! Throws: Nothing. //! - //! Complexity: Linear to the elements between pos and the - //! last element. Constant if pos is the first or the last element. - iterator erase(const_iterator position) + //! Complexity: Linear to the elements between pos and the + //! last element. Constant if pos is the last element. + iterator erase(const_iterator position) { - T *pos = containers_detail::get_pointer(position.get_ptr()); - T *beg = containers_detail::get_pointer(this->members_.m_start); - BOOST_CONTAINER_MOVE_NAMESPACE::move(pos + 1, beg + this->members_.m_size, pos); + T *pos = container_detail::to_raw_pointer(position.get_ptr()); + T *beg = container_detail::to_raw_pointer(this->members_.m_start); + ::boost::move(pos + 1, beg + this->members_.m_size, pos); --this->members_.m_size; //Destroy last element - base_t::destroy(containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size); + base_t::destroy(container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size); return iterator(position.get_ptr()); } @@ -1123,15 +1212,16 @@ class vector : private containers_detail::vector_alloc_holder //! //! Throws: Nothing. //! - //! Complexity: Linear to the distance between first and last. - iterator erase(const_iterator first, const_iterator last) + //! Complexity: Linear to the distance between first and last + //! plus linear to the elements between pos and the last element. + iterator erase(const_iterator first, const_iterator last) { if (first != last){ // worth doing, copy down over hole - T* end_pos = containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size; - T* ptr = containers_detail::get_pointer(BOOST_CONTAINER_MOVE_NAMESPACE::move - (containers_detail::get_pointer(last.get_ptr()) + T* end_pos = container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size; + T* ptr = container_detail::to_raw_pointer(boost::move + (container_detail::to_raw_pointer(last.get_ptr()) ,end_pos - ,containers_detail::get_pointer(first.get_ptr()) + ,container_detail::to_raw_pointer(first.get_ptr()) )); size_type destroyed = (end_pos - ptr); this->destroy_n(ptr, destroyed); @@ -1146,7 +1236,7 @@ class vector : private containers_detail::vector_alloc_holder //! Throws: If memory allocation throws, or T's copy constructor throws. //! //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size, const T& x) + void resize(size_type new_size, const T& x) { pointer finish = this->members_.m_start + this->members_.m_size; if (new_size < size()){ @@ -1165,7 +1255,7 @@ class vector : private containers_detail::vector_alloc_holder //! Throws: If memory allocation throws, or T's copy constructor throws. //! //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size) + void resize(size_type new_size) { if (new_size < this->size()){ //Destroy last elements @@ -1174,7 +1264,7 @@ class vector : private containers_detail::vector_alloc_holder else{ size_type n = new_size - this->size(); this->reserve(new_size); - containers_detail::default_construct_aux_proxy proxy(n); + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); priv_range_insert(this->cend().get_ptr(), n, proxy); } } @@ -1184,13 +1274,13 @@ class vector : private containers_detail::vector_alloc_holder //! Throws: Nothing. //! //! Complexity: Linear to the number of elements in the vector. - void clear() + void clear() BOOST_CONTAINER_NOEXCEPT { this->prot_destroy_all(); } //! Effects: Tries to deallocate the excess of memory created //! with previous allocations. The size of the vector is unchanged //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Throws: If memory allocation throws, or T's copy/move constructor throws. //! //! Complexity: Linear to size(). void shrink_to_fit() @@ -1198,8 +1288,23 @@ class vector : private containers_detail::vector_alloc_holder /// @cond + //Absolutely experimental. This function might change, disappear or simply crash! + template + void insert_ordered_at(size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it) + { + const size_type *dummy = 0; + this->priv_insert_ordered_at(element_count, last_position_it, false, &dummy[0], last_value_it); + } + + //Absolutely experimental. This function might change, disappear or simply crash! + template + void insert_ordered_at(size_type element_count, BiDirPosConstIt last_position_it, BiDirSkipConstIt last_skip_it, BiDirValueIt last_value_it) + { + this->priv_insert_ordered_at(element_count, last_position_it, true, last_skip_it, last_value_it); + } + private: - iterator priv_insert(const_iterator position, const T &x) + iterator priv_insert(const_iterator position, const T &x) { //Just call more general insert(pos, size, value) and return iterator size_type pos_n = position - cbegin(); @@ -1207,32 +1312,73 @@ class vector : private containers_detail::vector_alloc_holder return iterator(this->members_.m_start + pos_n); } - void priv_push_back(const T &x) + iterator priv_insert(const_iterator position, BOOST_RV_REF(T) x) + { + //Just call more general insert(pos, size, value) and return iterator + size_type pos_n = position - cbegin(); + this->insert(position + ,repeat_move_it(repeat_it(x, 1)) + ,repeat_move_it(repeat_it())); + return iterator(this->members_.m_start + pos_n); + } + + template + void priv_push_back(BOOST_MOVE_CATCH_FWD(U) x) { if (this->members_.m_size < this->members_.m_capacity){ //There is more memory, just construct a new object at the end - new((void*)(containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size))value_type(x); + allocator_traits_type::construct + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_start + this->members_.m_size) + , ::boost::forward(x) ); ++this->members_.m_size; } else{ - this->insert(this->cend(), x); + this->insert(this->cend(), ::boost::forward(x)); } } - void priv_shrink_to_fit(allocator_v1) + template + void priv_shrink_to_fit( AllocVersion + , typename container_detail::enable_if_c< + container_detail::is_same::value >::type * = 0) { if(this->members_.m_capacity){ if(!size()){ this->prot_deallocate(); } else{ - //This would not work with stateful allocators - vector(*this).swap(*this); + //Allocate a new buffer. + size_type real_cap = 0; + std::pair ret = + this->allocation_command + (allocate_new, this->size(), this->size(), real_cap, this->members_.m_start); + if(real_cap < this->capacity()){ + //We will reuse insert code, so create a dummy input iterator + T *dummy_it(container_detail::to_raw_pointer(this->members_.m_start)); + container_detail::advanced_insert_aux_proxy, T*> + proxy(this->alloc(), ::boost::make_move_iterator(dummy_it), ::boost::make_move_iterator(dummy_it)); + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS + ++this->num_alloc; + #endif + this->priv_range_insert_new_allocation + ( container_detail::to_raw_pointer(ret.first) + , real_cap + , container_detail::to_raw_pointer(this->members_.m_start) + , 0 + , proxy); + } + else{ + this->alloc().deallocate(ret.first, real_cap); + } } } } - void priv_shrink_to_fit(allocator_v2) + template + void priv_shrink_to_fit(AllocVersion + , typename container_detail::enable_if_c< + !container_detail::is_same::value >::type * = 0) { if(this->members_.m_capacity){ if(!size()){ @@ -1245,7 +1391,7 @@ class vector : private containers_detail::vector_alloc_holder , this->capacity(), this->size() , received_size, this->members_.m_start).first){ this->members_.m_capacity = received_size; - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_shrink; #endif } @@ -1254,12 +1400,20 @@ class vector : private containers_detail::vector_alloc_holder } template - void priv_range_insert(pointer pos, FwdIt first, FwdIt last, std::forward_iterator_tag) + void priv_range_insert(const_iterator pos, FwdIt first, FwdIt last, std::forward_iterator_tag) { - if(first != last){ + if(first != last){ const size_type n = std::distance(first, last); - containers_detail::advanced_insert_aux_proxy proxy(first, last); - priv_range_insert(pos, n, proxy); + container_detail::advanced_insert_aux_proxy proxy(this->alloc(), first, last); + priv_range_insert(pos.get_ptr(), n, proxy); + } + } + + template + void priv_range_insert(const_iterator pos, InIt first, InIt last, std::input_iterator_tag) + { + for(;first != last; ++first){ + this->emplace(pos, *first); } } @@ -1289,58 +1443,209 @@ class vector : private containers_detail::vector_alloc_holder this->members_.m_capacity = real_cap; } } - + //If we had room or we have expanded forward if (same_buffer_start){ - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_expand_fwd; #endif this->priv_range_insert_expand_forward - (containers_detail::get_pointer(pos), n, interf); + (container_detail::to_raw_pointer(pos), n, interf); } //Backwards (and possibly forward) expansion else if(ret.second){ - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_expand_bwd; #endif this->priv_range_insert_expand_backwards - ( containers_detail::get_pointer(ret.first) + ( container_detail::to_raw_pointer(ret.first) , real_cap - , containers_detail::get_pointer(pos) + , container_detail::to_raw_pointer(pos) , n , interf); } //New buffer else{ - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_alloc; #endif this->priv_range_insert_new_allocation - ( containers_detail::get_pointer(ret.first) + ( container_detail::to_raw_pointer(ret.first) , real_cap - , containers_detail::get_pointer(pos) + , container_detail::to_raw_pointer(pos) , n , interf); } } + //Absolutely experimental. This function might change, disappear or simply crash! + template + void priv_insert_ordered_at( size_type element_count, BiDirPosConstIt last_position_it + , bool do_skip, BiDirSkipConstIt last_skip_it, BiDirValueIt last_value_it) + { + const size_type old_size_pos = this->size(); + this->reserve(old_size_pos + element_count); + T* const begin_ptr = container_detail::to_raw_pointer(this->members_.m_start); + size_type insertions_left = element_count; + size_type next_pos = old_size_pos; + size_type hole_size = element_count; + + //Exception rollback. If any copy throws before the hole is filled, values + //already inserted/copied at the end of the buffer will be destroyed. + typename value_traits::ArrayDestructor past_hole_values_destroyer + (begin_ptr + old_size_pos + element_count, this->alloc(), size_type(0u)); + //Loop for each insertion backwards, first moving the elements after the insertion point, + //then inserting the element. + while(insertions_left){ + const size_type pos = static_cast(*(--last_position_it)); + BOOST_ASSERT(pos <= old_size_pos); + //If needed shift the range after the insertion point and the previous insertion point. + //Function will take care if the shift crosses the size() boundary, using copy/move + //or uninitialized copy/move if necessary. + size_type new_hole_size = (pos != next_pos) + ? priv_insert_ordered_at_shift_range(pos, next_pos, this->size(), insertions_left) + : hole_size + ; + if(new_hole_size > 0){ + //The hole was reduced by priv_insert_ordered_at_shift_range so expand exception rollback range backwards + past_hole_values_destroyer.increment_size_backwards(next_pos - pos); + //Insert the new value in the hole + allocator_traits_type::construct(this->alloc(), begin_ptr + pos + insertions_left - 1, *(--last_value_it)); + --new_hole_size; + if(new_hole_size == 0){ + //Hole was just filled, disable exception rollback and change vector size + past_hole_values_destroyer.release(); + this->members_.m_size += element_count; + } + else{ + //The hole was reduced by the new insertion by one + past_hole_values_destroyer.increment_size_backwards(size_type(1u)); + } + } + else{ + if(hole_size){ + //Hole was just filled by priv_insert_ordered_at_shift_range, disable exception rollback and change vector size + past_hole_values_destroyer.release(); + this->members_.m_size += element_count; + } + //Insert the new value in the already constructed range + begin_ptr[pos + insertions_left - 1] = *(--last_value_it); + } + if(do_skip){ + size_type n = *(--last_skip_it); + while(n--){ + --last_value_it; + } + } + --insertions_left; + hole_size = new_hole_size; + next_pos = pos; + } + } + + //Takes the range pointed by [first_pos, last_pos) and shifts it to the right + //by 'shift_count'. 'limit_pos' marks the end of constructed elements. + // + //Precondition: first_pos <= last_pos <= limit_pos + // + //The shift operation might cross limit_pos so elements to moved beyond limit_pos + //are uninitialized_moved with an allocator. Other elements are moved. + // + //The shift operation might left uninitialized elements after limit_pos + //and the number of uninitialized elements is returned by the function. + // + //Old situation: + // first_pos last_pos old_limit + // | | | + // ____________V_______V__________________V_____________ + //| prefix | range | suffix |raw_mem ~ + //|____________|_______|__________________|_____________~ + // + //New situation in Case A (hole_size == 0): + // range is moved through move assignments + // + // first_pos last_pos old_limit + // | | | + // ____________V_______V__________________V_____________ + //| prefix' | | | range |suffix'|raw_mem ~ + //|________________+______|___^___|_______|_____________~ + // | | + // |_>_>_>_>_>^ + // + // + //New situation in Case B (hole_size >= 0): + // range is moved through uninitialized moves + // + // first_pos last_pos old_limit + // | | | + // ____________V_______V__________________V________________ + //| prefix' | | | [hole] | range | + //|_______________________________________|________|___^___| + // | | + // |_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_^ + // + //New situation in Case C (hole_size == 0): + // range is moved through move assignments and uninitialized moves + // + // first_pos last_pos old_limit + // | | | + // ____________V_______V__________________V___ + //| prefix' | | | range | + //|___________________________________|___^___| + // | | + // |_>_>_>_>_>_>_>_>_>_>_>^ + size_type priv_insert_ordered_at_shift_range(size_type first_pos, size_type last_pos, size_type limit_pos, size_type shift_count) + { + BOOST_ASSERT(first_pos <= last_pos); + BOOST_ASSERT(last_pos <= limit_pos); + // + T* const begin_ptr = container_detail::to_raw_pointer(this->members_.m_start); + + size_type hole_size = 0; + //Case A: + if((last_pos + shift_count) <= limit_pos){ + //All move assigned + boost::move_backward(begin_ptr + first_pos, begin_ptr + last_pos, begin_ptr + last_pos + shift_count); + } + //Case B: + else if((first_pos + shift_count) >= limit_pos){ + //All uninitialized_moved + ::boost::container::uninitialized_move_alloc + (this->alloc(), begin_ptr + first_pos, begin_ptr + last_pos, begin_ptr + first_pos + shift_count); + hole_size = last_pos + shift_count - limit_pos; + } + //Case C: + else{ + //Some uninitialized_moved + T* const limit_ptr = begin_ptr + limit_pos; + T* const boundary_ptr = limit_ptr - shift_count; + ::boost::container::uninitialized_move_alloc + (this->alloc(), boundary_ptr, begin_ptr + last_pos, limit_ptr); + //The rest is move assigned + boost::move_backward(begin_ptr + first_pos, boundary_ptr, limit_ptr); + } + return hole_size; + } + + private: void priv_range_insert_expand_forward(T* pos, size_type n, advanced_insert_aux_int_t &interf) { //n can't be 0, because there is nothing to do in that case if(!n) return; //There is enough memory - T* old_finish = containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size; + T* old_finish = container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size; const size_type elems_after = old_finish - pos; - if (elems_after > n){ + if (elems_after >= n){ //New elements can be just copied. //Move to uninitialized memory last objects - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(old_finish - n, old_finish, old_finish); + ::boost::container::uninitialized_move_alloc + (this->alloc(), old_finish - n, old_finish, old_finish); this->members_.m_size += n; //Copy previous to last objects to the initialized end - BOOST_CONTAINER_MOVE_NAMESPACE::move_backward(pos, old_finish - n, old_finish); + boost::move_backward(pos, old_finish - n, old_finish); //Insert new objects in the pos - interf.copy_all_to(pos); + interf.copy_remaining_to(pos); } else { //The new elements don't fit in the [pos, end()) range. Copy @@ -1348,11 +1653,11 @@ class vector : private containers_detail::vector_alloc_holder interf.uninitialized_copy_some_and_update(old_finish, elems_after, false); this->members_.m_size += n - elems_after; //Copy old [pos, end()) elements to the uninitialized memory - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move - ( pos, old_finish, containers_detail::get_pointer(this->members_.m_start) + this->members_.m_size); + ::boost::container::uninitialized_move_alloc + (this->alloc(), pos, old_finish, container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size); this->members_.m_size += elems_after; //Copy first new elements in pos - interf.copy_all_to(pos); + interf.copy_remaining_to(pos); } } @@ -1363,30 +1668,30 @@ class vector : private containers_detail::vector_alloc_holder T *new_finish = new_start; T *old_finish; //Anti-exception rollbacks - typename value_traits::UCopiedArrayDeallocator scoped_alloc(new_start, this->alloc(), new_cap); - typename value_traits::UCopiedArrayDestructor constructed_values_destroyer(new_start, 0u); + typename value_traits::ArrayDeallocator scoped_alloc(new_start, this->alloc(), new_cap); + typename value_traits::ArrayDestructor constructed_values_destroyer(new_start, this->alloc(), 0u); - //Initialize with [begin(), pos) old buffer + //Initialize with [begin(), pos) old buffer //the start of the new buffer - T *old_buffer = containers_detail::get_pointer(this->members_.m_start); + T *old_buffer = container_detail::to_raw_pointer(this->members_.m_start); if(old_buffer){ - new_finish = ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move - (containers_detail::get_pointer(this->members_.m_start), pos, old_finish = new_finish); + new_finish = ::boost::container::uninitialized_move_alloc + (this->alloc(), container_detail::to_raw_pointer(this->members_.m_start), pos, old_finish = new_finish); constructed_values_destroyer.increment_size(new_finish - old_finish); } //Initialize new objects, starting from previous point - interf.uninitialized_copy_all_to(old_finish = new_finish); + interf.uninitialized_copy_remaining_to(old_finish = new_finish); new_finish += n; constructed_values_destroyer.increment_size(new_finish - old_finish); - //Initialize from the rest of the old buffer, + //Initialize from the rest of the old buffer, //starting from previous point if(old_buffer){ - new_finish = ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move - (pos, old_buffer + this->members_.m_size, new_finish); + new_finish = ::boost::container::uninitialized_move_alloc + (this->alloc(), pos, old_buffer + this->members_.m_size, new_finish); //Destroy and deallocate old elements //If there is allocated memory, destroy and deallocate if(!value_traits::trivial_dctr_after_move) - this->destroy_n(old_buffer, this->members_.m_size); + this->destroy_n(old_buffer, this->members_.m_size); this->alloc().deallocate(this->members_.m_start, this->members_.m_capacity); } this->members_.m_start = new_start; @@ -1403,7 +1708,7 @@ class vector : private containers_detail::vector_alloc_holder { //n can be zero to just expand capacity //Backup old data - T* old_start = containers_detail::get_pointer(this->members_.m_start); + T* old_start = container_detail::to_raw_pointer(this->members_.m_start); T* old_finish = old_start + this->members_.m_size; size_type old_size = this->members_.m_size; @@ -1418,13 +1723,13 @@ class vector : private containers_detail::vector_alloc_holder //If anything goes wrong, this object will destroy //all the old objects to fulfill previous vector state - typename value_traits::OldArrayDestructor old_values_destroyer(old_start, old_size); + typename value_traits::OldArrayDestructor old_values_destroyer(old_start, this->alloc(), old_size); //Check if s_before is big enough to hold the beginning of old data + new data if(difference_type(s_before) >= difference_type(elemsbefore + n)){ //Copy first old values before pos, after that the new objects - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(old_start, pos, new_start); + ::boost::container::uninitialized_move_alloc(this->alloc(), old_start, pos, new_start); this->members_.m_size = elemsbefore; - interf.uninitialized_copy_all_to(new_start + elemsbefore); + interf.uninitialized_copy_remaining_to(new_start + elemsbefore); this->members_.m_size += n; //Check if s_before is so big that even copying the old data + new data //there is a gap between the new data and the old data @@ -1440,8 +1745,8 @@ class vector : private containers_detail::vector_alloc_holder //|___________|__________|_________|________________________| // //Now initialize the rest of memory with the last old values - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move - (pos, old_finish, new_start + elemsbefore + n); + ::boost::container::uninitialized_move_alloc + (this->alloc(), pos, old_finish, new_start + elemsbefore + n); //All new elements correctly constructed, avoid new element destruction this->members_.m_size = old_size + n; //Old values destroyed automatically with "old_values_destroyer" @@ -1467,13 +1772,14 @@ class vector : private containers_detail::vector_alloc_holder size_type raw_gap = s_before - (elemsbefore + n); //Now initialize the rest of s_before memory with the //first of elements after new values - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(pos, pos + raw_gap, new_start + elemsbefore + n); + ::boost::container::uninitialized_move_alloc + (this->alloc(), pos, pos + raw_gap, new_start + elemsbefore + n); //Update size since we have a contiguous buffer this->members_.m_size = old_size + s_before; //All new elements correctly constructed, avoid old element destruction old_values_destroyer.release(); //Now copy remaining last objects in the old buffer begin - T *to_destroy = BOOST_CONTAINER_MOVE_NAMESPACE::move(pos + raw_gap, old_finish, old_start); + T *to_destroy = ::boost::move(pos + raw_gap, old_finish, old_start); //Now destroy redundant elements except if they were moved and //they have trivial destructor after move size_type n_destroy = old_finish - to_destroy; @@ -1531,24 +1837,25 @@ class vector : private containers_detail::vector_alloc_holder //|___________|_____|_________|_____________________| // //Copy the first part of old_begin to raw_mem - T *start_n = old_start + difference_type(s_before); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(old_start, start_n, new_start); + T *start_n = old_start + difference_type(s_before); + ::boost::container::uninitialized_move_alloc + (this->alloc(), old_start, start_n, new_start); //The buffer is all constructed until old_end, //release destroyer and update size old_values_destroyer.release(); this->members_.m_size = old_size + s_before; //Now copy the second part of old_begin overwriting himself - T* next = BOOST_CONTAINER_MOVE_NAMESPACE::move(start_n, pos, old_start); + T* next = ::boost::move(start_n, pos, old_start); if(do_after){ //Now copy the new_beg elements interf.copy_some_and_update(next, s_before, true); } else{ //Now copy the all the new elements - interf.copy_all_to(next); + interf.copy_remaining_to(next); T* move_start = next + n; //Now displace old_end elements - T* move_end = BOOST_CONTAINER_MOVE_NAMESPACE::move(pos, old_finish, move_start); + T* move_end = ::boost::move(pos, old_finish, move_start); //Destroy remaining moved elements from old_end except if //they have trivial destructor after being moved difference_type n_destroy = s_before - n; @@ -1584,7 +1891,8 @@ class vector : private containers_detail::vector_alloc_holder //|___________|_____|_________|__________________________| // //First copy whole old_begin and part of new to raw_mem - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(old_start, pos, new_start); + ::boost::container::uninitialized_move_alloc + (this->alloc(), old_start, pos, new_start); this->members_.m_size = elemsbefore; const size_type mid_n = difference_type(s_before) - elemsbefore; @@ -1600,10 +1908,10 @@ class vector : private containers_detail::vector_alloc_holder } else{ //Copy all new elements - interf.copy_all_to(old_start); + interf.copy_remaining_to(old_start); T* move_start = old_start + (n-mid_n); //Displace old_end - T* move_end = BOOST_CONTAINER_MOVE_NAMESPACE::move(pos, old_finish, move_start); + T* move_end = ::boost::move(pos, old_finish, move_start); //Destroy remaining moved elements from old_end except if they //have trivial destructor after being moved difference_type n_destroy = s_before - n; @@ -1654,13 +1962,14 @@ class vector : private containers_detail::vector_alloc_holder // //First copy the part of old_end raw_mem T* finish_n = old_finish - difference_type(n_after); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(finish_n, old_finish, old_finish); + ::boost::container::uninitialized_move_alloc + (this->alloc(), finish_n, old_finish, old_finish); this->members_.m_size += n_after; //Displace the rest of old_end to the new position - BOOST_CONTAINER_MOVE_NAMESPACE::move_backward(pos, finish_n, old_finish); + boost::move_backward(pos, finish_n, old_finish); //Now overwrite with new_end //The new_end part is [first + (n - n_after), last) - interf.copy_all_to(pos); + interf.copy_remaining_to(pos); } else { //The raw_mem from end will divide new_end part @@ -1680,23 +1989,16 @@ class vector : private containers_detail::vector_alloc_holder //The new_end part is [first + (n - n_after), last) interf.uninitialized_copy_some_and_update(old_finish, elemsafter, false); this->members_.m_size += mid_last_dist; - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(pos, old_finish, old_finish + mid_last_dist); + ::boost::container::uninitialized_move_alloc + (this->alloc(), pos, old_finish, old_finish + mid_last_dist); this->members_.m_size += n_after - mid_last_dist; //Now copy the part of new_end over constructed elements - interf.copy_all_to(pos); + interf.copy_remaining_to(pos); } } } } - template - void priv_range_insert(const_iterator pos, InIt first, InIt last, std::input_iterator_tag) - { - for(;first != last; ++first){ - this->insert(pos, BOOST_CONTAINER_MOVE_NAMESPACE::move(value_type(*first))); - } - } - template void priv_assign_aux(InIt first, InIt last, std::input_iterator_tag) { @@ -1744,9 +2046,9 @@ class vector : private containers_detail::vector_alloc_holder this->members_.m_capacity = real_cap; } } - + if(same_buffer_start){ - T *start = containers_detail::get_pointer(this->members_.m_start); + T *start = container_detail::to_raw_pointer(this->members_.m_start); if (this->size() >= n){ //There is memory, but there are more old elements than new ones //Overwrite old elements with new ones @@ -1763,19 +2065,17 @@ class vector : private containers_detail::vector_alloc_holder // iG T *end = std::copy(first, mid, start); T *end = std::copy(first, mid, start); //Initialize the remaining new elements in the uninitialized memory - // iG std::uninitialized_copy(mid, last, end); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(mid, last, end); + ::boost::container::uninitialized_copy_or_move_alloc(this->alloc(), mid, last, end); this->members_.m_size = n; } } else if(!ret.second){ - typename value_traits::UCopiedArrayDeallocator scoped_alloc(ret.first, this->alloc(), real_cap); - // iG std::uninitialized_copy(first, last, containers_detail::get_pointer(ret.first)); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(first, last, containers_detail::get_pointer(ret.first)); + typename value_traits::ArrayDeallocator scoped_alloc(ret.first, this->alloc(), real_cap); + ::boost::container::uninitialized_copy_or_move_alloc(this->alloc(), first, last, container_detail::to_raw_pointer(ret.first)); scoped_alloc.release(); //Destroy and deallocate old buffer if(this->members_.m_start != 0){ - this->destroy_n(containers_detail::get_pointer(this->members_.m_start), this->members_.m_size); + this->destroy_n(container_detail::to_raw_pointer(this->members_.m_start), this->members_.m_size); this->alloc().deallocate(this->members_.m_start, this->members_.m_capacity); } this->members_.m_start = ret.first; @@ -1785,26 +2085,26 @@ class vector : private containers_detail::vector_alloc_holder else{ //Backwards expansion //If anything goes wrong, this object will destroy old objects - T *old_start = containers_detail::get_pointer(this->members_.m_start); + T *old_start = container_detail::to_raw_pointer(this->members_.m_start); size_type old_size = this->members_.m_size; - typename value_traits::OldArrayDestructor old_values_destroyer(old_start, old_size); + typename value_traits::OldArrayDestructor old_values_destroyer(old_start, this->alloc(), old_size); //If something goes wrong size will be 0 //but holding the whole buffer this->members_.m_size = 0; this->members_.m_start = ret.first; this->members_.m_capacity = real_cap; - + //Backup old buffer data - size_type old_offset = old_start - containers_detail::get_pointer(ret.first); - size_type first_count = containers_detail::min_value(n, old_offset); + size_type old_offset = old_start - container_detail::to_raw_pointer(ret.first); + size_type first_count = container_detail::min_value(n, old_offset); FwdIt mid = first; std::advance(mid, first_count); - // iG std::uninitialized_copy(first, mid, containers_detail::get_pointer(ret.first)); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(first, mid, containers_detail::get_pointer(ret.first)); + ::boost::container::uninitialized_copy_or_move_alloc + (this->alloc(), first, mid, container_detail::to_raw_pointer(ret.first)); if(old_offset > n){ - //All old elements will be destroyed by "old_values_destroyer" + //All old elements will be destroyed by "old_values_destroyer" this->members_.m_size = n; } else{ @@ -1814,12 +2114,12 @@ class vector : private containers_detail::vector_alloc_holder this->members_.m_start = ret.first; this->members_.m_size = first_count + old_size; //Now overwrite the old values - size_type second_count = containers_detail::min_value(old_size, n - first_count); + size_type second_count = container_detail::min_value(old_size, n - first_count); FwdIt mid2 = mid; std::advance(mid2, second_count); // iG std::copy(mid, mid2, old_start); std::copy(mid, mid2, old_start); - + //Check if we still have to append elements in the //uninitialized end if(second_count == old_size){ @@ -1832,44 +2132,44 @@ class vector : private containers_detail::vector_alloc_holder (old_start + second_count, old_size - second_count); this->members_.m_size = n; } - this->members_.m_size = n; + this->members_.m_size = n; } } } template - void priv_assign_dispatch(Integer n, Integer val, containers_detail::true_) + void priv_assign_dispatch(Integer n, Integer val, container_detail::true_) { this->assign((size_type) n, (value_type)val); } template - void priv_assign_dispatch(InIt first, InIt last, containers_detail::false_) - { - //Dispatch depending on integer/iterator - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_assign_aux(first, last, ItCat()); - } - - template - void priv_insert_dispatch(const_iterator pos, Integer n, Integer val, containers_detail::true_) - { this->insert(pos, (size_type)n, (T)val); } - - template - void priv_insert_dispatch(const_iterator pos, InIt first, - InIt last, containers_detail::false_) + void priv_assign_dispatch(InIt first, InIt last, container_detail::false_) { //Dispatch depending on integer/iterator typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_range_insert(pos.get_ptr(), first, last, ItCat()); + this->priv_assign_aux(first, last, ItCat()); } - void priv_check_range(size_type n) const + template + void priv_insert_dispatch(const_iterator pos, Integer n, Integer val, container_detail::true_) + { this->insert(pos, (size_type)n, (T)val); } + + template + void priv_insert_dispatch(const_iterator pos, InIt first, + InIt last, container_detail::false_) + { + //Dispatch depending on integer/iterator + typedef typename std::iterator_traits::iterator_category ItCat; + this->priv_range_insert(pos, first, last, ItCat()); + } + + void priv_check_range(size_type n) const { //If n is out of range, throw an out_of_range exception if (n >= size()) throw std::out_of_range("vector::at"); } - #ifdef BOOST_CONTAINERS_VECTOR_ALLOC_STATS + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS public: unsigned int num_expand_fwd; unsigned int num_expand_bwd; @@ -1882,7 +2182,7 @@ class vector : private containers_detail::vector_alloc_holder }; template -inline bool +inline bool operator==(const vector& x, const vector& y) { //Check first size and each element if needed @@ -1890,7 +2190,7 @@ operator==(const vector& x, const vector& y) } template -inline bool +inline bool operator!=(const vector& x, const vector& y) { //Check first size and each element if needed @@ -1898,7 +2198,7 @@ operator!=(const vector& x, const vector& y) } template -inline bool +inline bool operator<(const vector& x, const vector& y) { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); @@ -1930,7 +2230,7 @@ struct has_trivial_destructor_after_move > /// @endcond -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP +#include -#endif // #ifndef BOOST_CONTAINERS_CONTAINERS_VECTOR_HPP +#endif // #ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP diff --git a/3party/boost/boost/context/all.hpp b/3party/boost/boost/context/all.hpp new file mode 100644 index 0000000000..f9a4c71dbf --- /dev/null +++ b/3party/boost/boost/context/all.hpp @@ -0,0 +1,14 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_ALL_H +#define BOOST_CTX_ALL_H + +#include +#include +#include + +#endif // BOOST_CTX_ALL_H diff --git a/3party/boost/boost/context/detail/config.hpp b/3party/boost/boost/context/detail/config.hpp new file mode 100644 index 0000000000..50ada3c507 --- /dev/null +++ b/3party/boost/boost/context/detail/config.hpp @@ -0,0 +1,42 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_CONFIG_H +#define BOOST_CTX_DETAIL_CONFIG_H + +#include +#include + +#ifdef BOOST_CONTEXT_DECL +# undef BOOST_CONTEXT_DECL +#endif + +#if defined(BOOST_HAS_DECLSPEC) +# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTEXT_DYN_LINK) +# if ! defined(BOOST_DYN_LINK) +# define BOOST_DYN_LINK +# endif +# if defined(BOOST_CONTEXT_SOURCE) +# define BOOST_CONTEXT_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_CONTEXT_DECL BOOST_SYMBOL_IMPORT +# endif +# endif +#endif + +#if ! defined(BOOST_CONTEXT_DECL) +# define BOOST_CONTEXT_DECL +#endif + +#if ! defined(BOOST_CONTEXT_SOURCE) && ! defined(BOOST_ALL_NO_LIB) && ! defined(BOOST_CONTEXT_NO_LIB) +# define BOOST_LIB_NAME boost_context +# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTEXT_DYN_LINK) +# define BOOST_DYN_LINK +# endif +# include +#endif + +#endif // BOOST_CTX_DETAIL_CONFIG_H diff --git a/3party/boost/boost/context/detail/fcontext_arm.hpp b/3party/boost/boost/context/detail/fcontext_arm.hpp new file mode 100644 index 0000000000..b4ed2fa264 --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_arm.hpp @@ -0,0 +1,66 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_ARM_H +#define BOOST_CTX_DETAIL_FCONTEXT_ARM_H + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint32_t fc_freg[16]; + + fp_t() : + fc_freg() + {} +}; + +struct fcontext_t +{ + boost::uint32_t fc_greg[11]; + stack_t fc_stack; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_ARM_H diff --git a/3party/boost/boost/context/detail/fcontext_i386.hpp b/3party/boost/boost/context/detail/fcontext_i386.hpp new file mode 100644 index 0000000000..573a22caf3 --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_i386.hpp @@ -0,0 +1,68 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_I386H +#define BOOST_CTX_DETAIL_FCONTEXT_I386H + +#include + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL __attribute__((cdecl)) + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint32_t fc_freg[2]; + + fp_t() : + fc_freg() + {} +}; + +struct fcontext_t +{ + boost::uint32_t fc_greg[6]; + stack_t fc_stack; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_I386_H diff --git a/3party/boost/boost/context/detail/fcontext_i386_win.hpp b/3party/boost/boost/context/detail/fcontext_i386_win.hpp new file mode 100644 index 0000000000..e250ec5e3b --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_i386_win.hpp @@ -0,0 +1,83 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_I386H +#define BOOST_CTX_DETAIL_FCONTEXT_I386H + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include + +#include + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4351) +#endif + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL __cdecl + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint32_t fc_freg[2]; + + fp_t() : + fc_freg() + {} +}; + +struct fcontext_t +{ + boost::uint32_t fc_greg[6]; + stack_t fc_stack; + void * fc_excpt_lst; + void * fc_local_storage; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_excpt_lst( 0), + fc_local_storage( 0), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_I386_H diff --git a/3party/boost/boost/context/detail/fcontext_mips.hpp b/3party/boost/boost/context/detail/fcontext_mips.hpp new file mode 100644 index 0000000000..1645adfb8b --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_mips.hpp @@ -0,0 +1,68 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_MIPS_H +#define BOOST_CTX_DETAIL_FCONTEXT_MIPS_H + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL + +// on MIPS we assume 64bit regsiters - even for 32bit ABIs + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint64_t fc_freg[6]; + + fp_t() : + fc_freg() + {} +}; + +struct fcontext_t +{ + boost::uint64_t fc_greg[13]; + stack_t fc_stack; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_MIPS_H diff --git a/3party/boost/boost/context/detail/fcontext_ppc.hpp b/3party/boost/boost/context/detail/fcontext_ppc.hpp new file mode 100644 index 0000000000..5e6c64c555 --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_ppc.hpp @@ -0,0 +1,70 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_PPC_H +#define BOOST_CTX_DETAIL_FCONTEXT_PPC_H + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint64_t fc_freg[19]; + + fp_t() : + fc_freg() + {} +}; + +struct fcontext_t +{ +# if defined(__powerpc64__) + boost::uint64_t fc_greg[23]; +# else + boost::uint32_t fc_greg[23]; +# endif + stack_t fc_stack; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_PPC_H diff --git a/3party/boost/boost/context/detail/fcontext_x86_64.hpp b/3party/boost/boost/context/detail/fcontext_x86_64.hpp new file mode 100644 index 0000000000..106ee74065 --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_x86_64.hpp @@ -0,0 +1,66 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_X86_64_H +#define BOOST_CTX_DETAIL_FCONTEXT_X86_64_H + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint32_t fc_freg[2]; + + fp_t() : + fc_freg() + {} +}; + +struct fcontext_t +{ + boost::uint64_t fc_greg[8]; + stack_t fc_stack; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_X86_64_H diff --git a/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp b/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp new file mode 100644 index 0000000000..96f153b8e2 --- /dev/null +++ b/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp @@ -0,0 +1,90 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_DETAIL_FCONTEXT_X86_64_H +#define BOOST_CTX_DETAIL_FCONTEXT_X86_64_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include +#include + +#include + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4351) +#endif + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +extern "C" { + +#define BOOST_CONTEXT_CALLDECL + +struct stack_t +{ + void * base; + void * limit; + + stack_t() : + base( 0), limit( 0) + {} +}; + +struct fp_t +{ + boost::uint32_t fc_freg[2]; + void * fc_xmm; + char fc_buffer[175]; + + fp_t() : + fc_freg(), + fc_xmm( 0), + fc_buffer() + { + fc_xmm = fc_buffer; + if ( 0 != ( ( ( uintptr_t) fc_xmm) & 15) ) + fc_xmm = ( char *) ( ( ( ( uintptr_t) fc_xmm) + 15) & ~0x0F); + } +}; + +struct fcontext_t +{ + boost::uint64_t fc_greg[10]; + stack_t fc_stack; + void * fc_local_storage; + fp_t fc_fp; + + fcontext_t() : + fc_greg(), + fc_stack(), + fc_local_storage( 0), + fc_fp() + {} +}; + +} + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif // BOOST_CTX_DETAIL_FCONTEXT_X86_64_H diff --git a/3party/boost/boost/context/fcontext.hpp b/3party/boost/boost/context/fcontext.hpp new file mode 100644 index 0000000000..d2cc030a1e --- /dev/null +++ b/3party/boost/boost/context/fcontext.hpp @@ -0,0 +1,82 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_FCONTEXT_H +#define BOOST_CTX_FCONTEXT_H + +#if defined(__PGI) +#include +#endif + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +// x86_64 +// test x86_64 before i386 because icc might +// define __i686__ for x86_64 too +#if defined(__x86_64__) || defined(__x86_64) \ + || defined(__amd64__) || defined(__amd64) \ + || defined(_M_X64) || defined(_M_AMD64) +# if defined(BOOST_WINDOWS) +# include +# else +# include +# endif +// i386 +#elif defined(i386) || defined(__i386__) || defined(__i386) \ + || defined(__i486__) || defined(__i586__) || defined(__i686__) \ + || defined(__X86__) || defined(_X86_) || defined(__THW_INTEL__) \ + || defined(__I86__) || defined(__INTEL__) || defined(__IA32__) \ + || defined(_M_IX86) || defined(_I86_) +# if defined(BOOST_WINDOWS) +# include +# else +# include +# endif +// arm +#elif defined(__arm__) || defined(__thumb__) || defined(__TARGET_ARCH_ARM) \ + || defined(__TARGET_ARCH_THUMB) || defined(_ARM) +# include +// mips +#elif (defined(__mips) && __mips == 1) || defined(_MIPS_ISA_MIPS1) \ + || defined(_R3000) +# include +// powerpc +#elif defined(__powerpc) || defined(__powerpc__) || defined(__ppc) \ + || defined(__ppc__) || defined(_ARCH_PPC) || defined(__POWERPC__) \ + || defined(__PPCGECKO__) || defined(__PPCBROADWAY) || defined(_XENON) +# include +#else +# error "platform not supported" +#endif + +namespace boost { +namespace ctx { +namespace detail { + +extern "C" BOOST_CONTEXT_DECL void * BOOST_CONTEXT_CALLDECL align_stack( void * vp); + +} + +extern "C" BOOST_CONTEXT_DECL +intptr_t BOOST_CONTEXT_CALLDECL jump_fcontext( fcontext_t * ofc, fcontext_t const* nfc, intptr_t vp, bool preserve_fpu = true); +extern "C" BOOST_CONTEXT_DECL +void BOOST_CONTEXT_CALLDECL make_fcontext( fcontext_t * fc, void (* fn)( intptr_t) ); + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_FCONTEXT_H + diff --git a/3party/boost/boost/context/stack_allocator.hpp b/3party/boost/boost/context/stack_allocator.hpp new file mode 100644 index 0000000000..0db50157d1 --- /dev/null +++ b/3party/boost/boost/context/stack_allocator.hpp @@ -0,0 +1,37 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_STACK_ALLOCATOR_H +#define BOOST_CTX_STACK_ALLOCATOR_H + +#include + +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +class BOOST_CONTEXT_DECL stack_allocator +{ +public: + void * allocate( std::size_t) const; + + void deallocate( void *, std::size_t) const; +}; + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_STACK_ALLOCATOR_H diff --git a/3party/boost/boost/context/stack_utils.hpp b/3party/boost/boost/context/stack_utils.hpp new file mode 100644 index 0000000000..ca3ed2135f --- /dev/null +++ b/3party/boost/boost/context/stack_utils.hpp @@ -0,0 +1,41 @@ + +// Copyright Oliver Kowalke 2009. +// 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 BOOST_CTX_STACK_UTILS_H +#define BOOST_CTX_STACK_UTILS_H + +#include + +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace ctx { + +BOOST_CONTEXT_DECL std::size_t default_stacksize(); + +BOOST_CONTEXT_DECL std::size_t minimum_stacksize(); + +BOOST_CONTEXT_DECL std::size_t maximum_stacksize(); + +BOOST_CONTEXT_DECL std::size_t pagesize(); + +BOOST_CONTEXT_DECL std::size_t page_count( std::size_t stacksize); + +BOOST_CONTEXT_DECL bool is_stack_unbound(); + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CTX_STACK_UTILS_H diff --git a/3party/boost/boost/current_function.hpp b/3party/boost/boost/current_function.hpp index aa5756e0a5..cb36e35c36 100644 --- a/3party/boost/boost/current_function.hpp +++ b/3party/boost/boost/current_function.hpp @@ -28,7 +28,7 @@ namespace detail inline void current_function_helper() { -#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) +#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__) # define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ @@ -65,3 +65,4 @@ inline void current_function_helper() } // namespace boost #endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED + diff --git a/3party/boost/boost/date_time.hpp b/3party/boost/boost/date_time.hpp index c9666222eb..07715262cd 100644 --- a/3party/boost/boost/date_time.hpp +++ b/3party/boost/boost/date_time.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ // See www.boost.org/libs/date_time for documentation. diff --git a/3party/boost/boost/date_time/adjust_functors.hpp b/3party/boost/boost/date_time/adjust_functors.hpp index 7854ae4b76..dde8ca8590 100644 --- a/3party/boost/boost/date_time/adjust_functors.hpp +++ b/3party/boost/boost/date_time/adjust_functors.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/date.hpp" diff --git a/3party/boost/boost/date_time/c_local_time_adjustor.hpp b/3party/boost/boost/date_time/c_local_time_adjustor.hpp index f8025828f7..45e96d3af8 100644 --- a/3party/boost/boost/date_time/c_local_time_adjustor.hpp +++ b/3party/boost/boost/date_time/c_local_time_adjustor.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ /*! @file c_local_time_adjustor.hpp diff --git a/3party/boost/boost/date_time/c_time.hpp b/3party/boost/boost/date_time/c_time.hpp index a742774256..b3509afec6 100644 --- a/3party/boost/boost/date_time/c_time.hpp +++ b/3party/boost/boost/date_time/c_time.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ diff --git a/3party/boost/boost/date_time/compiler_config.hpp b/3party/boost/boost/date_time/compiler_config.hpp index 0dc893f9fb..1aa1330f64 100644 --- a/3party/boost/boost/date_time/compiler_config.hpp +++ b/3party/boost/boost/date_time/compiler_config.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2011-07-26 10:40:21 -0700 (Tue, 26 Jul 2011) $ */ #include @@ -118,20 +118,18 @@ namespace std { * */ -#ifdef BOOST_HAS_DECLSPEC // defined in config system - // we need to import/export our code only if the user has specifically - // asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost - // libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK - // if they want just this one to be dynamically liked: -# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK) - // export if this is our own source, otherwise import: -# ifdef BOOST_DATE_TIME_SOURCE -# define BOOST_DATE_TIME_DECL __declspec(dllexport) -# else -# define BOOST_DATE_TIME_DECL __declspec(dllimport) -# endif // BOOST_DATE_TIME_SOURCE -# endif // DYN_LINK -#endif // BOOST_HAS_DECLSPEC +// we need to import/export our code only if the user has specifically +// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost +// libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK +// if they want just this one to be dynamically liked: +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK) + // export if this is our own source, otherwise import: +# ifdef BOOST_DATE_TIME_SOURCE +# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_IMPORT +# endif // BOOST_DATE_TIME_SOURCE +#endif // DYN_LINK // // if BOOST_WHATEVER_DECL isn't defined yet define it now: #ifndef BOOST_DATE_TIME_DECL diff --git a/3party/boost/boost/date_time/constrained_value.hpp b/3party/boost/boost/date_time/constrained_value.hpp index b273dd5aa8..7338105e2d 100644 --- a/3party/boost/boost/date_time/constrained_value.hpp +++ b/3party/boost/boost/date_time/constrained_value.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/date.hpp b/3party/boost/boost/date_time/date.hpp index 1056fb6a72..81730cab07 100644 --- a/3party/boost/boost/date_time/date.hpp +++ b/3party/boost/boost/date_time/date.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ #include diff --git a/3party/boost/boost/date_time/date_clock_device.hpp b/3party/boost/boost/date_time/date_clock_device.hpp index 6ccb26e254..6202f6c58f 100644 --- a/3party/boost/boost/date_time/date_clock_device.hpp +++ b/3party/boost/boost/date_time/date_clock_device.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/c_time.hpp" diff --git a/3party/boost/boost/date_time/date_defs.hpp b/3party/boost/boost/date_time/date_defs.hpp index bc25b56c0d..ae7e4c5a03 100644 --- a/3party/boost/boost/date_time/date_defs.hpp +++ b/3party/boost/boost/date_time/date_defs.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/date_duration.hpp b/3party/boost/boost/date_time/date_duration.hpp index 3871aac0ce..7bd48fd2b7 100644 --- a/3party/boost/boost/date_time/date_duration.hpp +++ b/3party/boost/boost/date_time/date_duration.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/date_duration_types.hpp b/3party/boost/boost/date_time/date_duration_types.hpp index 1512c0ef20..e44c59fff6 100644 --- a/3party/boost/boost/date_time/date_duration_types.hpp +++ b/3party/boost/boost/date_time/date_duration_types.hpp @@ -6,7 +6,7 @@ * (See accompanying file LICENSE_1_0.txt or * http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include diff --git a/3party/boost/boost/date_time/date_facet.hpp b/3party/boost/boost/date_time/date_facet.hpp index 3eda4c7d09..1584fe56a4 100644 --- a/3party/boost/boost/date_time/date_facet.hpp +++ b/3party/boost/boost/date_time/date_facet.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Martin Andrian, Jeff Garland, Bart Garst - * $Date: 2009-06-04 07:40:18 -0400 (Thu, 04 Jun 2009) $ + * $Date: 2009-06-04 04:40:18 -0700 (Thu, 04 Jun 2009) $ */ #include diff --git a/3party/boost/boost/date_time/date_format_simple.hpp b/3party/boost/boost/date_time/date_format_simple.hpp index be21ce4a57..05119c4413 100644 --- a/3party/boost/boost/date_time/date_format_simple.hpp +++ b/3party/boost/boost/date_time/date_format_simple.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/parse_format_base.hpp" diff --git a/3party/boost/boost/date_time/date_formatting.hpp b/3party/boost/boost/date_time/date_formatting.hpp index 9e4224d33d..0903c75bfb 100644 --- a/3party/boost/boost/date_time/date_formatting.hpp +++ b/3party/boost/boost/date_time/date_formatting.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #include "boost/date_time/iso_format.hpp" diff --git a/3party/boost/boost/date_time/date_formatting_limited.hpp b/3party/boost/boost/date_time/date_formatting_limited.hpp index 38fee07b91..5721473ba1 100644 --- a/3party/boost/boost/date_time/date_formatting_limited.hpp +++ b/3party/boost/boost/date_time/date_formatting_limited.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/iso_format.hpp" diff --git a/3party/boost/boost/date_time/date_formatting_locales.hpp b/3party/boost/boost/date_time/date_formatting_locales.hpp index 4ac9c4e401..e3aec4967c 100644 --- a/3party/boost/boost/date_time/date_formatting_locales.hpp +++ b/3party/boost/boost/date_time/date_formatting_locales.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/date_generator_formatter.hpp b/3party/boost/boost/date_time/date_generator_formatter.hpp index 88cd7e1aba..159cf36eb8 100644 --- a/3party/boost/boost/date_time/date_generator_formatter.hpp +++ b/3party/boost/boost/date_time/date_generator_formatter.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-13 14:05:31 -0500 (Thu, 13 Nov 2008) $ + * $Date: 2008-11-13 11:05:31 -0800 (Thu, 13 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/date_generator_parser.hpp b/3party/boost/boost/date_time/date_generator_parser.hpp index f11eb42d52..7cff9ca363 100644 --- a/3party/boost/boost/date_time/date_generator_parser.hpp +++ b/3party/boost/boost/date_time/date_generator_parser.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/date_generators.hpp b/3party/boost/boost/date_time/date_generators.hpp index 1f1a34a667..1944c3412c 100644 --- a/3party/boost/boost/date_time/date_generators.hpp +++ b/3party/boost/boost/date_time/date_generators.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ /*! @file date_generators.hpp diff --git a/3party/boost/boost/date_time/date_iterator.hpp b/3party/boost/boost/date_time/date_iterator.hpp index 284dc749d0..20bfb05c9f 100644 --- a/3party/boost/boost/date_time/date_iterator.hpp +++ b/3party/boost/boost/date_time/date_iterator.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include diff --git a/3party/boost/boost/date_time/date_names_put.hpp b/3party/boost/boost/date_time/date_names_put.hpp index c6f0ce2a6f..6606f43153 100644 --- a/3party/boost/boost/date_time/date_names_put.hpp +++ b/3party/boost/boost/date_time/date_names_put.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/date_parsing.hpp b/3party/boost/boost/date_time/date_parsing.hpp index f361bc8096..aa8e8e0836 100644 --- a/3party/boost/boost/date_time/date_parsing.hpp +++ b/3party/boost/boost/date_time/date_parsing.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $ + * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ */ #include diff --git a/3party/boost/boost/date_time/dst_rules.hpp b/3party/boost/boost/date_time/dst_rules.hpp index 20cb40b676..503a255f1d 100644 --- a/3party/boost/boost/date_time/dst_rules.hpp +++ b/3party/boost/boost/date_time/dst_rules.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*! @file dst_rules.hpp diff --git a/3party/boost/boost/date_time/filetime_functions.hpp b/3party/boost/boost/date_time/filetime_functions.hpp index fa8c54340a..2460fd9791 100644 --- a/3party/boost/boost/date_time/filetime_functions.hpp +++ b/3party/boost/boost/date_time/filetime_functions.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ /*! @file filetime_functions.hpp diff --git a/3party/boost/boost/date_time/format_date_parser.hpp b/3party/boost/boost/date_time/format_date_parser.hpp index a4a4d0dfbe..4a76529f6c 100644 --- a/3party/boost/boost/date_time/format_date_parser.hpp +++ b/3party/boost/boost/date_time/format_date_parser.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $ + * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ */ diff --git a/3party/boost/boost/date_time/gregorian/conversion.hpp b/3party/boost/boost/date_time/gregorian/conversion.hpp index c505bddf51..33f6856bf0 100644 --- a/3party/boost/boost/date_time/gregorian/conversion.hpp +++ b/3party/boost/boost/date_time/gregorian/conversion.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $ + * $Date: 2010-06-09 11:10:13 -0700 (Wed, 09 Jun 2010) $ */ #include diff --git a/3party/boost/boost/date_time/gregorian/formatters.hpp b/3party/boost/boost/date_time/gregorian/formatters.hpp index 786e79f2c1..eda7dc34be 100644 --- a/3party/boost/boost/date_time/gregorian/formatters.hpp +++ b/3party/boost/boost/date_time/gregorian/formatters.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/compiler_config.hpp" diff --git a/3party/boost/boost/date_time/gregorian/formatters_limited.hpp b/3party/boost/boost/date_time/gregorian/formatters_limited.hpp index 4531ebec13..8dfd2d0c60 100644 --- a/3party/boost/boost/date_time/gregorian/formatters_limited.hpp +++ b/3party/boost/boost/date_time/gregorian/formatters_limited.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/gregorian/gregorian_types.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_calendar.hpp b/3party/boost/boost/date_time/gregorian/greg_calendar.hpp index 483ead5016..e9c1852e0b 100644 --- a/3party/boost/boost/date_time/gregorian/greg_calendar.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_calendar.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ #include diff --git a/3party/boost/boost/date_time/gregorian/greg_date.hpp b/3party/boost/boost/date_time/gregorian/greg_date.hpp index ad67c0ce2f..860a407c95 100644 --- a/3party/boost/boost/date_time/gregorian/greg_date.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_date.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ #include diff --git a/3party/boost/boost/date_time/gregorian/greg_day.hpp b/3party/boost/boost/date_time/gregorian/greg_day.hpp index 92ea6ab07e..4ea829fbec 100644 --- a/3party/boost/boost/date_time/gregorian/greg_day.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_day.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/constrained_value.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp b/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp index 36b22c2b75..2f8874d2b7 100644 --- a/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_day_of_year.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/constrained_value.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_duration.hpp b/3party/boost/boost/date_time/gregorian/greg_duration.hpp index fd7554201e..a9c0c171b8 100644 --- a/3party/boost/boost/date_time/gregorian/greg_duration.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_duration.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp b/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp index 3d1ce62183..8328ca303f 100644 --- a/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_duration_types.hpp @@ -5,7 +5,7 @@ * Subject to Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/gregorian/greg_facet.hpp b/3party/boost/boost/date_time/gregorian/greg_facet.hpp index 9c3877ed03..9efc61951a 100644 --- a/3party/boost/boost/date_time/gregorian/greg_facet.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_facet.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-23 06:13:35 -0500 (Sun, 23 Nov 2008) $ + * $Date: 2008-11-23 03:13:35 -0800 (Sun, 23 Nov 2008) $ */ #include "boost/date_time/gregorian/gregorian_types.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_month.hpp b/3party/boost/boost/date_time/gregorian/greg_month.hpp index fc9c86148d..b48a8a8911 100644 --- a/3party/boost/boost/date_time/gregorian/greg_month.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_month.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/constrained_value.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_serialize.hpp b/3party/boost/boost/date_time/gregorian/greg_serialize.hpp index e427a48a20..a94bd73620 100644 --- a/3party/boost/boost/date_time/gregorian/greg_serialize.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_serialize.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-11-11 15:19:38 -0500 (Thu, 11 Nov 2010) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #include "boost/date_time/gregorian/gregorian_types.hpp" @@ -22,6 +22,7 @@ BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::date_duration) BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::date_duration::duration_rep) BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::date_period) +BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_year) BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_month) BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_day) BOOST_SERIALIZATION_SPLIT_FREE(::boost::gregorian::greg_weekday) @@ -186,6 +187,32 @@ inline void load_construct_data(Archive & ar, gregorian::date_period* dp, ::new(dp) gregorian::date_period(d,dd); } +/**** greg_year ****/ + +//! Function to save gregorian::greg_year objects using serialization lib +template +void save(Archive & ar, const gregorian::greg_year& gy, + unsigned int /*version*/) +{ + unsigned short us = gy; + ar & make_nvp("greg_year", us); +} +//! Function to load gregorian::greg_year objects using serialization lib +template +void load(Archive & ar, gregorian::greg_year& gy, unsigned int /*version*/) +{ + unsigned short us; + ar & make_nvp("greg_year", us); + gy = gregorian::greg_year(us); +} +//!override needed b/c no default constructor +template +inline void load_construct_data(Archive & ar, gregorian::greg_year* gy, + const unsigned int /*file_version*/) +{ + ::new(gy) gregorian::greg_year(1900); +} + /**** greg_month ****/ //! Function to save gregorian::greg_month objects using serialization lib diff --git a/3party/boost/boost/date_time/gregorian/greg_weekday.hpp b/3party/boost/boost/date_time/gregorian/greg_weekday.hpp index 9b566c440d..ab68fcd19b 100644 --- a/3party/boost/boost/date_time/gregorian/greg_weekday.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_weekday.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ #include "boost/date_time/constrained_value.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_year.hpp b/3party/boost/boost/date_time/gregorian/greg_year.hpp index ef1735f427..322f40d0d0 100644 --- a/3party/boost/boost/date_time/gregorian/greg_year.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_year.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/constrained_value.hpp" diff --git a/3party/boost/boost/date_time/gregorian/greg_ymd.hpp b/3party/boost/boost/date_time/gregorian/greg_ymd.hpp index 086e73df4a..e7d441efea 100644 --- a/3party/boost/boost/date_time/gregorian/greg_ymd.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_ymd.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/year_month_day.hpp" diff --git a/3party/boost/boost/date_time/gregorian/gregorian.hpp b/3party/boost/boost/date_time/gregorian/gregorian.hpp index bfafa1b037..becbc06817 100644 --- a/3party/boost/boost/date_time/gregorian/gregorian.hpp +++ b/3party/boost/boost/date_time/gregorian/gregorian.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*! @file gregorian.hpp diff --git a/3party/boost/boost/date_time/gregorian/gregorian_io.hpp b/3party/boost/boost/date_time/gregorian/gregorian_io.hpp index 62a759f55c..e6ba01fe50 100644 --- a/3party/boost/boost/date_time/gregorian/gregorian_io.hpp +++ b/3party/boost/boost/date_time/gregorian/gregorian_io.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/gregorian/gregorian_types.hpp b/3party/boost/boost/date_time/gregorian/gregorian_types.hpp index 0c74857a25..3f4b92fd87 100644 --- a/3party/boost/boost/date_time/gregorian/gregorian_types.hpp +++ b/3party/boost/boost/date_time/gregorian/gregorian_types.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*! @file gregorian_types.hpp diff --git a/3party/boost/boost/date_time/gregorian/parsers.hpp b/3party/boost/boost/date_time/gregorian/parsers.hpp index 95d4f23dec..a2fa4e1dae 100644 --- a/3party/boost/boost/date_time/gregorian/parsers.hpp +++ b/3party/boost/boost/date_time/gregorian/parsers.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/gregorian/gregorian_types.hpp" diff --git a/3party/boost/boost/date_time/gregorian_calendar.hpp b/3party/boost/boost/date_time/gregorian_calendar.hpp index c27c09e760..b645aa49b0 100644 --- a/3party/boost/boost/date_time/gregorian_calendar.hpp +++ b/3party/boost/boost/date_time/gregorian_calendar.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ diff --git a/3party/boost/boost/date_time/gregorian_calendar.ipp b/3party/boost/boost/date_time/gregorian_calendar.ipp index 4b2a4c1c36..77fa03e4af 100644 --- a/3party/boost/boost/date_time/gregorian_calendar.ipp +++ b/3party/boost/boost/date_time/gregorian_calendar.ipp @@ -3,7 +3,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #ifndef NO_BOOST_DATE_TIME_INLINE diff --git a/3party/boost/boost/date_time/int_adapter.hpp b/3party/boost/boost/date_time/int_adapter.hpp index fc98fc1278..d1246e7b50 100644 --- a/3party/boost/boost/date_time/int_adapter.hpp +++ b/3party/boost/boost/date_time/int_adapter.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/iso_format.hpp b/3party/boost/boost/date_time/iso_format.hpp index 8262fa2117..1f9e73d678 100644 --- a/3party/boost/boost/date_time/iso_format.hpp +++ b/3party/boost/boost/date_time/iso_format.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/parse_format_base.hpp" diff --git a/3party/boost/boost/date_time/local_time/conversion.hpp b/3party/boost/boost/date_time/local_time/conversion.hpp index 13e4d3eb5c..a530de4224 100644 --- a/3party/boost/boost/date_time/local_time/conversion.hpp +++ b/3party/boost/boost/date_time/local_time/conversion.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $ + * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ */ diff --git a/3party/boost/boost/date_time/local_time/custom_time_zone.hpp b/3party/boost/boost/date_time/local_time/custom_time_zone.hpp index a6c1d42055..390c3f484a 100644 --- a/3party/boost/boost/date_time/local_time/custom_time_zone.hpp +++ b/3party/boost/boost/date_time/local_time/custom_time_zone.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/time_zone_base.hpp" diff --git a/3party/boost/boost/date_time/local_time/date_duration_operators.hpp b/3party/boost/boost/date_time/local_time/date_duration_operators.hpp index ee870227a9..b4c325df0a 100644 --- a/3party/boost/boost/date_time/local_time/date_duration_operators.hpp +++ b/3party/boost/boost/date_time/local_time/date_duration_operators.hpp @@ -6,7 +6,7 @@ * (See accompanying file LICENSE_1_0.txt or * http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/gregorian/greg_duration_types.hpp" diff --git a/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp b/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp index 3d6cfbacf4..d82731c084 100644 --- a/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp +++ b/3party/boost/boost/date_time/local_time/dst_transition_day_rules.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/local_time/local_date_time.hpp b/3party/boost/boost/date_time/local_time/local_date_time.hpp index 9c9f62340f..6955439cd7 100644 --- a/3party/boost/boost/date_time/local_time/local_date_time.hpp +++ b/3party/boost/boost/date_time/local_time/local_date_time.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ #include diff --git a/3party/boost/boost/date_time/local_time/local_time.hpp b/3party/boost/boost/date_time/local_time/local_time.hpp index f7d4cc68e3..162cac5b36 100644 --- a/3party/boost/boost/date_time/local_time/local_time.hpp +++ b/3party/boost/boost/date_time/local_time/local_time.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/posix_time/posix_time.hpp" diff --git a/3party/boost/boost/date_time/local_time/local_time_io.hpp b/3party/boost/boost/date_time/local_time/local_time_io.hpp index c161ff7e23..b5e3c3f1ba 100644 --- a/3party/boost/boost/date_time/local_time/local_time_io.hpp +++ b/3party/boost/boost/date_time/local_time/local_time_io.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-13 14:05:31 -0500 (Thu, 13 Nov 2008) $ + * $Date: 2008-11-13 11:05:31 -0800 (Thu, 13 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/local_time/local_time_types.hpp b/3party/boost/boost/date_time/local_time/local_time_types.hpp index ed58b8018a..5e04422e8f 100644 --- a/3party/boost/boost/date_time/local_time/local_time_types.hpp +++ b/3party/boost/boost/date_time/local_time/local_time_types.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/local_time/local_date_time.hpp" diff --git a/3party/boost/boost/date_time/local_time/posix_time_zone.hpp b/3party/boost/boost/date_time/local_time/posix_time_zone.hpp index 2a0199fcae..f640675bbd 100644 --- a/3party/boost/boost/date_time/local_time/posix_time_zone.hpp +++ b/3party/boost/boost/date_time/local_time/posix_time_zone.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-06-10 13:24:38 -0400 (Thu, 10 Jun 2010) $ + * $Date: 2010-06-10 10:24:38 -0700 (Thu, 10 Jun 2010) $ */ #include diff --git a/3party/boost/boost/date_time/local_time/tz_database.hpp b/3party/boost/boost/date_time/local_time/tz_database.hpp index 4cfca45c18..aceda93915 100644 --- a/3party/boost/boost/date_time/local_time/tz_database.hpp +++ b/3party/boost/boost/date_time/local_time/tz_database.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include diff --git a/3party/boost/boost/date_time/local_time_adjustor.hpp b/3party/boost/boost/date_time/local_time_adjustor.hpp index eea4d37ae3..13251a2cfb 100644 --- a/3party/boost/boost/date_time/local_time_adjustor.hpp +++ b/3party/boost/boost/date_time/local_time_adjustor.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ /*! @file local_time_adjustor.hpp diff --git a/3party/boost/boost/date_time/local_timezone_defs.hpp b/3party/boost/boost/date_time/local_timezone_defs.hpp index fd6d3c2fab..b56278ed28 100644 --- a/3party/boost/boost/date_time/local_timezone_defs.hpp +++ b/3party/boost/boost/date_time/local_timezone_defs.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-11-13 15:10:23 -0500 (Thu, 13 Nov 2008) $ + * $Date: 2008-11-13 12:10:23 -0800 (Thu, 13 Nov 2008) $ */ #include "boost/date_time/dst_rules.hpp" diff --git a/3party/boost/boost/date_time/locale_config.hpp b/3party/boost/boost/date_time/locale_config.hpp index d01e008fea..194d5dd37b 100644 --- a/3party/boost/boost/date_time/locale_config.hpp +++ b/3party/boost/boost/date_time/locale_config.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ // This file configures whether the library will support locales and hence diff --git a/3party/boost/boost/date_time/microsec_time_clock.hpp b/3party/boost/boost/date_time/microsec_time_clock.hpp index 9396579d30..177811ee6f 100644 --- a/3party/boost/boost/date_time/microsec_time_clock.hpp +++ b/3party/boost/boost/date_time/microsec_time_clock.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-05-10 05:15:48 -0400 (Mon, 10 May 2010) $ + * $Date: 2010-05-10 02:15:48 -0700 (Mon, 10 May 2010) $ */ diff --git a/3party/boost/boost/date_time/parse_format_base.hpp b/3party/boost/boost/date_time/parse_format_base.hpp index b17a5c8e77..087baf9532 100644 --- a/3party/boost/boost/date_time/parse_format_base.hpp +++ b/3party/boost/boost/date_time/parse_format_base.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ namespace boost { diff --git a/3party/boost/boost/date_time/period.hpp b/3party/boost/boost/date_time/period.hpp index c67bc36c65..3e34def323 100644 --- a/3party/boost/boost/date_time/period.hpp +++ b/3party/boost/boost/date_time/period.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*! \file period.hpp diff --git a/3party/boost/boost/date_time/period_formatter.hpp b/3party/boost/boost/date_time/period_formatter.hpp index 08082e10f6..925b20c03c 100644 --- a/3party/boost/boost/date_time/period_formatter.hpp +++ b/3party/boost/boost/date_time/period_formatter.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/period_parser.hpp b/3party/boost/boost/date_time/period_parser.hpp index 9cd57e18c7..84b9d1378c 100644 --- a/3party/boost/boost/date_time/period_parser.hpp +++ b/3party/boost/boost/date_time/period_parser.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-13 15:10:23 -0500 (Thu, 13 Nov 2008) $ + * $Date: 2008-11-13 12:10:23 -0800 (Thu, 13 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/posix_time/conversion.hpp b/3party/boost/boost/date_time/posix_time/conversion.hpp index 3fb21d79eb..83ccf60068 100644 --- a/3party/boost/boost/date_time/posix_time/conversion.hpp +++ b/3party/boost/boost/date_time/posix_time/conversion.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $ + * $Date: 2010-06-09 11:10:13 -0700 (Wed, 09 Jun 2010) $ */ #include diff --git a/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp b/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp index e6899ba0aa..6846a77815 100644 --- a/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp +++ b/3party/boost/boost/date_time/posix_time/date_duration_operators.hpp @@ -6,7 +6,7 @@ * (See accompanying file LICENSE_1_0.txt or * http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/gregorian/greg_duration_types.hpp" diff --git a/3party/boost/boost/date_time/posix_time/posix_time.hpp b/3party/boost/boost/date_time/posix_time/posix_time.hpp index 4e9294c426..3b85ff46ff 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*!@file posix_time.hpp Global header file to get all of posix time types */ diff --git a/3party/boost/boost/date_time/posix_time/posix_time_config.hpp b/3party/boost/boost/date_time/posix_time/posix_time_config.hpp index 60c3f7ee37..716f5e650f 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time_config.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time_config.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 07:52:28 -0400 (Thu, 04 Jun 2009) $ + * $Date: 2009-06-04 04:52:28 -0700 (Thu, 04 Jun 2009) $ */ #include //for MCW 7.2 std::abs(long long) diff --git a/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp b/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp index db3b85fec3..9778fd7f3e 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time_duration.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/posix_time/posix_time_config.hpp" diff --git a/3party/boost/boost/date_time/posix_time/posix_time_io.hpp b/3party/boost/boost/date_time/posix_time/posix_time_io.hpp index 9a80737a47..fb63a9165c 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time_io.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time_io.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-13 14:05:31 -0500 (Thu, 13 Nov 2008) $ + * $Date: 2008-11-13 11:05:31 -0800 (Thu, 13 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp b/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp index f5b20a8f8b..fcc3fac1d9 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*! @file posix_time_pre133_operators.hpp diff --git a/3party/boost/boost/date_time/posix_time/posix_time_system.hpp b/3party/boost/boost/date_time/posix_time/posix_time_system.hpp index 3d44e0ff00..13626e9bad 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time_system.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time_system.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/posix_time/ptime.hpp b/3party/boost/boost/date_time/posix_time/ptime.hpp index 2abc02d318..3f1cb0473f 100644 --- a/3party/boost/boost/date_time/posix_time/ptime.hpp +++ b/3party/boost/boost/date_time/posix_time/ptime.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/posix_time/posix_time_system.hpp" diff --git a/3party/boost/boost/date_time/posix_time/time_formatters.hpp b/3party/boost/boost/date_time/posix_time/time_formatters.hpp index 466331b0a1..534b9525b8 100644 --- a/3party/boost/boost/date_time/posix_time/time_formatters.hpp +++ b/3party/boost/boost/date_time/posix_time/time_formatters.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ #include diff --git a/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp b/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp index d0e959e915..8d2ebdce58 100644 --- a/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp +++ b/3party/boost/boost/date_time/posix_time/time_formatters_limited.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $ + * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ */ #include diff --git a/3party/boost/boost/date_time/posix_time/time_parsers.hpp b/3party/boost/boost/date_time/posix_time/time_parsers.hpp index 8a352f6e2b..3dc02b18a3 100644 --- a/3party/boost/boost/date_time/posix_time/time_parsers.hpp +++ b/3party/boost/boost/date_time/posix_time/time_parsers.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/gregorian/gregorian.hpp" diff --git a/3party/boost/boost/date_time/posix_time/time_period.hpp b/3party/boost/boost/date_time/posix_time/time_period.hpp index cb7bf07f47..11f8120732 100644 --- a/3party/boost/boost/date_time/posix_time/time_period.hpp +++ b/3party/boost/boost/date_time/posix_time/time_period.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/period.hpp" diff --git a/3party/boost/boost/date_time/posix_time/time_serialize.hpp b/3party/boost/boost/date_time/posix_time/time_serialize.hpp index cba6c5b869..3279d8d55d 100644 --- a/3party/boost/boost/date_time/posix_time/time_serialize.hpp +++ b/3party/boost/boost/date_time/posix_time/time_serialize.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #include "boost/date_time/posix_time/posix_time.hpp" diff --git a/3party/boost/boost/date_time/special_defs.hpp b/3party/boost/boost/date_time/special_defs.hpp index 56eb6fea1d..661814ec19 100644 --- a/3party/boost/boost/date_time/special_defs.hpp +++ b/3party/boost/boost/date_time/special_defs.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ namespace boost { diff --git a/3party/boost/boost/date_time/special_values_formatter.hpp b/3party/boost/boost/date_time/special_values_formatter.hpp index 33542b6e42..53fe98452d 100644 --- a/3party/boost/boost/date_time/special_values_formatter.hpp +++ b/3party/boost/boost/date_time/special_values_formatter.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include diff --git a/3party/boost/boost/date_time/string_convert.hpp b/3party/boost/boost/date_time/string_convert.hpp index 54a979c70f..a3cc86c2db 100644 --- a/3party/boost/boost/date_time/string_convert.hpp +++ b/3party/boost/boost/date_time/string_convert.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/date_time/compiler_config.hpp" diff --git a/3party/boost/boost/date_time/string_parse_tree.hpp b/3party/boost/boost/date_time/string_parse_tree.hpp index 0d515ff824..d67bf6b7d0 100644 --- a/3party/boost/boost/date_time/string_parse_tree.hpp +++ b/3party/boost/boost/date_time/string_parse_tree.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/strings_from_facet.hpp b/3party/boost/boost/date_time/strings_from_facet.hpp index 10250b1b0e..845aeb84b9 100644 --- a/3party/boost/boost/date_time/strings_from_facet.hpp +++ b/3party/boost/boost/date_time/strings_from_facet.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #include diff --git a/3party/boost/boost/date_time/time.hpp b/3party/boost/boost/date_time/time.hpp index 6a6cbe1f89..8b21144b6e 100644 --- a/3party/boost/boost/date_time/time.hpp +++ b/3party/boost/boost/date_time/time.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/time_clock.hpp b/3party/boost/boost/date_time/time_clock.hpp index 1ea5d2e8bd..9aa2ff0e39 100644 --- a/3party/boost/boost/date_time/time_clock.hpp +++ b/3party/boost/boost/date_time/time_clock.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ /*! @file time_clock.hpp diff --git a/3party/boost/boost/date_time/time_defs.hpp b/3party/boost/boost/date_time/time_defs.hpp index 55fe42a594..d74631d5eb 100644 --- a/3party/boost/boost/date_time/time_defs.hpp +++ b/3party/boost/boost/date_time/time_defs.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/time_duration.hpp b/3party/boost/boost/date_time/time_duration.hpp index 2fd259012e..b6df827f19 100644 --- a/3party/boost/boost/date_time/time_duration.hpp +++ b/3party/boost/boost/date_time/time_duration.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $ + * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ */ #include diff --git a/3party/boost/boost/date_time/time_facet.hpp b/3party/boost/boost/date_time/time_facet.hpp index b0fc4228e0..b3cda2c023 100644 --- a/3party/boost/boost/date_time/time_facet.hpp +++ b/3party/boost/boost/date_time/time_facet.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Martin Andrian, Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #include diff --git a/3party/boost/boost/date_time/time_formatting_streams.hpp b/3party/boost/boost/date_time/time_formatting_streams.hpp index 3537c103cc..2d07d344ee 100644 --- a/3party/boost/boost/date_time/time_formatting_streams.hpp +++ b/3party/boost/boost/date_time/time_formatting_streams.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ #include diff --git a/3party/boost/boost/date_time/time_iterator.hpp b/3party/boost/boost/date_time/time_iterator.hpp index 2258a3308e..98397de8f3 100644 --- a/3party/boost/boost/date_time/time_iterator.hpp +++ b/3party/boost/boost/date_time/time_iterator.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/time_parsing.hpp b/3party/boost/boost/date_time/time_parsing.hpp index dfccf6a1df..9258f94fc3 100644 --- a/3party/boost/boost/date_time/time_parsing.hpp +++ b/3party/boost/boost/date_time/time_parsing.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include "boost/tokenizer.hpp" diff --git a/3party/boost/boost/date_time/time_resolution_traits.hpp b/3party/boost/boost/date_time/time_resolution_traits.hpp index 658f3d207c..903830c76e 100644 --- a/3party/boost/boost/date_time/time_resolution_traits.hpp +++ b/3party/boost/boost/date_time/time_resolution_traits.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-06 07:25:55 -0400 (Sat, 06 Jun 2009) $ + * $Date: 2009-06-06 04:25:55 -0700 (Sat, 06 Jun 2009) $ */ diff --git a/3party/boost/boost/date_time/time_system_counted.hpp b/3party/boost/boost/date_time/time_system_counted.hpp index fa883907eb..5425f62af4 100644 --- a/3party/boost/boost/date_time/time_system_counted.hpp +++ b/3party/boost/boost/date_time/time_system_counted.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/time_system_split.hpp b/3party/boost/boost/date_time/time_system_split.hpp index 08ea1ec2d1..6fc4a336b5 100644 --- a/3party/boost/boost/date_time/time_system_split.hpp +++ b/3party/boost/boost/date_time/time_system_split.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-13 15:10:23 -0500 (Thu, 13 Nov 2008) $ + * $Date: 2008-11-13 12:10:23 -0800 (Thu, 13 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/time_zone_base.hpp b/3party/boost/boost/date_time/time_zone_base.hpp index 0d3cb903e6..6ad7f70af5 100644 --- a/3party/boost/boost/date_time/time_zone_base.hpp +++ b/3party/boost/boost/date_time/time_zone_base.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ diff --git a/3party/boost/boost/date_time/time_zone_names.hpp b/3party/boost/boost/date_time/time_zone_names.hpp index 05260c7162..a56502704e 100644 --- a/3party/boost/boost/date_time/time_zone_names.hpp +++ b/3party/boost/boost/date_time/time_zone_names.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ #include diff --git a/3party/boost/boost/date_time/tz_db_base.hpp b/3party/boost/boost/date_time/tz_db_base.hpp index a24fa8b178..17822cc65c 100644 --- a/3party/boost/boost/date_time/tz_db_base.hpp +++ b/3party/boost/boost/date_time/tz_db_base.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2011-07-07 00:57:37 -0400 (Thu, 07 Jul 2011) $ + * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ */ #include diff --git a/3party/boost/boost/date_time/wrapping_int.hpp b/3party/boost/boost/date_time/wrapping_int.hpp index 969b078ac1..abfc58c561 100644 --- a/3party/boost/boost/date_time/wrapping_int.hpp +++ b/3party/boost/boost/date_time/wrapping_int.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $ + * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ */ diff --git a/3party/boost/boost/date_time/year_month_day.hpp b/3party/boost/boost/date_time/year_month_day.hpp index 802ce42eb9..9340e53f55 100644 --- a/3party/boost/boost/date_time/year_month_day.hpp +++ b/3party/boost/boost/date_time/year_month_day.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ + * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ */ namespace boost { diff --git a/3party/boost/boost/detail/container_fwd.hpp b/3party/boost/boost/detail/container_fwd.hpp index 1a58935a7e..ef17498063 100644 --- a/3party/boost/boost/detail/container_fwd.hpp +++ b/3party/boost/boost/detail/container_fwd.hpp @@ -1,25 +1,92 @@ -// Copyright 2005-2008 Daniel James. +// Copyright 2005-2011 Daniel James. // 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) +// Note: if you change this include guard, you also need to change +// container_fwd_compile_fail.cpp #if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP) #define BOOST_DETAIL_CONTAINER_FWD_HPP -#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#if defined(_MSC_VER) && (_MSC_VER >= 1020) && \ + !defined(BOOST_DETAIL_TEST_CONFIG_ONLY) # pragma once #endif #include #include -#if defined(BOOST_DETAIL_NO_CONTAINER_FWD) \ - || ((defined(__GLIBCPP__) || defined(__GLIBCXX__)) \ - && (defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL))) \ - || BOOST_WORKAROUND(__BORLANDC__, > 0x551) \ - || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \ - || (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) \ - || (defined(_LIBCPP_VERSION)) +//////////////////////////////////////////////////////////////////////////////// +// // +// Define BOOST_DETAIL_NO_CONTAINER_FWD if you don't want this header to // +// forward declare standard containers. // +// // +// BOOST_DETAIL_CONTAINER_FWD to make it foward declare containers even if it // +// normally doesn't. // +// // +// BOOST_DETAIL_NO_CONTAINER_FWD overrides BOOST_DETAIL_CONTAINER_FWD. // +// // +//////////////////////////////////////////////////////////////////////////////// + +#if !defined(BOOST_DETAIL_NO_CONTAINER_FWD) +# if defined(BOOST_DETAIL_CONTAINER_FWD) + // Force forward declarations. +# elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) + // STLport +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__LIBCOMO__) + // Comeau STL: +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER) + // Rogue Wave library: +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(_LIBCPP_VERSION) + // libc++ +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__GLIBCPP__) || defined(__GLIBCXX__) + // GNU libstdc++ 3 + // + // Disable forwarding for all recent versions, as the library has a + // versioned namespace mode, and I don't know how to detect it. +# if __GLIBCXX__ >= 20070513 \ + || defined(_GLIBCXX_DEBUG) \ + || defined(_GLIBCXX_PARALLEL) \ + || defined(_GLIBCXX_PROFILE) +# define BOOST_DETAIL_NO_CONTAINER_FWD +# else +# if defined(__GLIBCXX__) && __GLIBCXX__ >= 20040530 +# define BOOST_CONTAINER_FWD_COMPLEX_STRUCT +# endif +# endif +# elif defined(__STL_CONFIG_H) + // generic SGI STL + // + // Forward declaration seems to be okay, but it has a couple of odd + // implementations. +# define BOOST_CONTAINER_FWD_BAD_BITSET +# if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) +# define BOOST_CONTAINER_FWD_BAD_DEQUE +# endif +# elif defined(__MSL_CPP__) + // MSL standard lib: +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif defined(__IBMCPP__) + // The default VACPP std lib, forward declaration seems to be fine. +# elif defined(MSIPL_COMPILE_H) + // Modena C++ standard library +# define BOOST_DETAIL_NO_CONTAINER_FWD +# elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER) + // Dinkumware Library (this has to appear after any possible replacement + // libraries) +# else +# define BOOST_DETAIL_NO_CONTAINER_FWD +# endif +#endif + +#if !defined(BOOST_DETAIL_TEST_CONFIG_ONLY) + +#if defined(BOOST_DETAIL_NO_CONTAINER_FWD) && \ + !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD) #include #include @@ -34,17 +101,6 @@ #include -#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \ - defined(__STL_CONFIG_H) - -#define BOOST_CONTAINER_FWD_BAD_BITSET - -#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) -#define BOOST_CONTAINER_FWD_BAD_DEQUE -#endif - -#endif - #if defined(BOOST_CONTAINER_FWD_BAD_DEQUE) #include #endif @@ -64,21 +120,18 @@ namespace std template class basic_string; #if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) + template struct string_char_traits; #else template struct char_traits; #endif - #if BOOST_CLANG - template struct complex; - #else - template class complex; - #endif -} +#if defined(BOOST_CONTAINER_FWD_COMPLEX_STRUCT) + template struct complex; +#else + template class complex; +#endif -// gcc 3.4 and greater -namespace std -{ #if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE) template class deque; #endif @@ -101,6 +154,9 @@ namespace std #pragma warning(pop) #endif -#endif +#endif // BOOST_DETAIL_NO_CONTAINER_FWD && + // !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD) + +#endif // BOOST_DETAIL_TEST_CONFIG_ONLY #endif diff --git a/3party/boost/boost/detail/fenv.hpp b/3party/boost/boost/detail/fenv.hpp index 1ba883370f..f048706416 100644 --- a/3party/boost/boost/detail/fenv.hpp +++ b/3party/boost/boost/detail/fenv.hpp @@ -16,9 +16,10 @@ /* If we're using clang + glibc, we have to get hacky. * See http://llvm.org/bugs/show_bug.cgi?id=6907 */ -#if defined(__clang__) && \ +#if defined(__clang__) && (__clang_major__ < 3) && \ defined(__GNU_LIBRARY__) && /* up to version 5 */ \ - defined(__GLIBC__) /* version 6 + */ + defined(__GLIBC__) && /* version 6 + */ \ + !defined(_FENV_H) #define _FENV_H #include diff --git a/3party/boost/boost/detail/interlocked.hpp b/3party/boost/boost/detail/interlocked.hpp index 5889ccb928..1802e3411d 100644 --- a/3party/boost/boost/detail/interlocked.hpp +++ b/3party/boost/boost/detail/interlocked.hpp @@ -54,7 +54,11 @@ extern "C" long __cdecl InterlockedExchangeAdd( long*, long ); #elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN ) -#if defined( __CLRCALL_PURE_OR_CDECL ) +#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600 + +#include + +#elif defined( __CLRCALL_PURE_OR_CDECL ) extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * ); extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * ); @@ -119,15 +123,15 @@ namespace boost namespace detail { -extern "C"BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedIncrement( long volatile * ); -extern "C"BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedDecrement( long volatile * ); -extern "C"BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedCompareExchange( long volatile *, long, long ); -extern "C"BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchange( long volatile *, long ); -extern "C"BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchangeAdd( long volatile *, long ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedIncrement( long volatile * ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedDecrement( long volatile * ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedCompareExchange( long volatile *, long, long ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchange( long volatile *, long ); +extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchangeAdd( long volatile *, long ); # if defined(_M_IA64) || defined(_M_AMD64) -extern "C"BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* ); -extern "C"BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedExchangePointer( void* volatile *, void* ); +extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* ); +extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedExchangePointer( void* volatile *, void* ); # endif } // namespace detail diff --git a/3party/boost/boost/detail/scoped_enum_emulation.hpp b/3party/boost/boost/detail/scoped_enum_emulation.hpp index e695a20857..80394cf433 100644 --- a/3party/boost/boost/detail/scoped_enum_emulation.hpp +++ b/3party/boost/boost/detail/scoped_enum_emulation.hpp @@ -1,56 +1,337 @@ // scoped_enum_emulation.hpp ---------------------------------------------------------// // Copyright Beman Dawes, 2009 +// Copyright (C) 2011-2012 Vicente J. Botet Escriba +// Copyright (C) 2012 Anthony Williams // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt -// Generates C++0x scoped enums if the feature is present, otherwise emulates C++0x -// scoped enums with C++03 namespaces and enums. The Boost.Config BOOST_NO_SCOPED_ENUMS -// macro is used to detect feature support. -// -// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf for a -// description of the scoped enum feature. Note that the committee changed the name -// from strongly typed enum to scoped enum. -// -// Caution: only the syntax is emulated; the semantics are not emulated and -// the syntax emulation doesn't include being able to specify the underlying -// representation type. -// -// The emulation is via struct rather than namespace to allow use within classes. -// Thanks to Andrey Semashev for pointing that out. -// -// Helpful comments and suggestions were also made by Kjell Elster, Phil Endecott, -// Joel Falcou, Mathias Gaunard, Felipe Magno de Almeida, Matt Calabrese, Vincente -// Botet, and Daniel James. -// -// Sample usage: -// -// BOOST_SCOPED_ENUM_START(algae) { green, red, cyan }; BOOST_SCOPED_ENUM_END -// ... -// BOOST_SCOPED_ENUM(algae) sample( algae::red ); -// void foo( BOOST_SCOPED_ENUM(algae) color ); -// ... -// sample = algae::green; -// foo( algae::cyan ); +/* +[section:scoped_enums Scoped Enums] + +Generates C++0x scoped enums if the feature is present, otherwise emulates C++0x +scoped enums with C++03 namespaces and enums. The Boost.Config BOOST_NO_SCOPED_ENUMS +macro is used to detect feature support. + +See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf for a +description of the scoped enum feature. Note that the committee changed the name +from strongly typed enum to scoped enum. + +Some of the enumerations defined in the standard library are scoped enums. + + enum class future_errc + { + broken_promise, + future_already_retrieved, + promise_already_satisfied, + no_state + }; + +On compilers that don't support them, the library provides two emulations: + +[heading Strict] + +* Able to specify the underlying type. +* explicit conversion to/from underlying type. +* The wrapper is not a C++03 enum type. + +The user can declare declare these types as + + BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_errc) + { + broken_promise, + future_already_retrieved, + promise_already_satisfied, + no_state + } + BOOST_SCOPED_ENUM_DECLARE_END(future_errc) + +These macros allows to use 'future_errc' in almost all the cases as an scoped enum. + + future_errc err = future_errc::no_state; + +There are however some limitations: + +* The type is not a C++ enum, so 'is_enum' will be false_type. +* The emulated scoped enum can not be used in switch nor in template arguments. For these cases the user needs to use some macros. + +Instead of + + switch (ev) + { + case future_errc::broken_promise: + // ... + +use + + switch (boost::native_value(ev)) + { + case future_errc::broken_promise: + +And instead of + + #ifdef BOOST_NO_SCOPED_ENUMS + template <> + struct BOOST_SYMBOL_VISIBLE is_error_code_enum : public true_type { }; + #endif + +use + + #ifdef BOOST_NO_SCOPED_ENUMS + template <> + struct BOOST_SYMBOL_VISIBLE is_error_code_enum : public true_type { }; + #endif + + +Sample usage: + + BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(algae, char) { green, red, cyan }; BOOST_SCOPED_ENUM_DECLARE_END(algae) + ... + algae sample( algae::red ); + void foo( algae color ); + ... + sample = algae::green; + foo( algae::cyan ); + + Light + Caution: only the syntax is emulated; the semantics are not emulated and + the syntax emulation doesn't include being able to specify the underlying + representation type. + + The literal scoped emulation is via struct rather than namespace to allow use within classes. + Thanks to Andrey Semashev for pointing that out. + However the type is an real C++03 enum and so convertible implicitly to an int. + + Sample usage: + + BOOST_SCOPED_ENUM_START(algae) { green, red, cyan }; BOOST_SCOPED_ENUM_END + ... + BOOST_SCOPED_ENUM(algae) sample( algae::red ); + void foo( BOOST_SCOPED_ENUM(algae) color ); + ... + sample = algae::green; + foo( algae::cyan ); + + Helpful comments and suggestions were also made by Kjell Elster, Phil Endecott, + Joel Falcou, Mathias Gaunard, Felipe Magno de Almeida, Matt Calabrese, Vicente + Botet, and Daniel James. + +[endsect] +*/ + #ifndef BOOST_SCOPED_ENUM_EMULATION_HPP #define BOOST_SCOPED_ENUM_EMULATION_HPP #include +#include + +namespace boost +{ + +#ifdef BOOST_NO_SCOPED_ENUMS + /** + * Meta-function to get the underlying type of a scoped enum. + * + * Requires EnumType must be an enum type or the emulation of a scoped enum + */ + template + struct underlying_type + { + /** + * The member typedef type names the underlying type of EnumType. It is EnumType::underlying_type when the EnumType is an emulated scoped enum, + * std::underlying_type::type when the standard library std::underlying_type is provided. + * + * The user will need to specialize it when the compiler supports scoped enums but don't provides std::underlying_type. + */ + typedef typename EnumType::underlying_type type; + }; + + /** + * Meta-function to get the native enum type associated to an enum class or its emulation. + */ + template + struct native_type + { + /** + * The member typedef type names the native enum type associated to the scoped enum, + * which is it self if the compiler supports scoped enums or EnumType::enum_type if it is an emulated scoped enum. + */ + typedef typename EnumType::enum_type type; + }; + + /** + * Casts a scoped enum to its underlying type. + * + * This function is useful when working with scoped enum classes, which doens't implicitly convert to the underlying type. + * @param v A scoped enum. + * @returns The underlying type. + * @throws No-throws. + */ + template + UnderlyingType underlying_cast(EnumType v) + { + return v.get_underlying_value_(); + } + + /** + * Casts a scoped enum to its native enum type. + * + * This function is useful to make programs portable when the scoped enum emulation can not be use where native enums can. + * + * EnumType the scoped enum type + * + * @param v A scoped enum. + * @returns The native enum value. + * @throws No-throws. + */ + template + inline + typename EnumType::enum_type native_value(EnumType e) + { + return e.native_value_(); + } + +#else // BOOST_NO_SCOPED_ENUMS + + template + struct underlying_type + { + //typedef typename std::underlying_type::type type; + }; + + template + struct native_type + { + typedef EnumType type; + }; + + template + UnderlyingType underlying_cast(EnumType v) + { + return static_cast(v); + } + + template + inline + EnumType native_value(EnumType e) + { + return e; + } + +#endif +} + #ifdef BOOST_NO_SCOPED_ENUMS -# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type -# define BOOST_SCOPED_ENUM_END }; -# define BOOST_SCOPED_ENUM(name) name::enum_type +#ifndef BOOST_NO_EXPLICIT_CONVERSION_OPERATORS + +#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \ + explicit operator underlying_type() const { return get_underlying_value_(); } #else -# define BOOST_SCOPED_ENUM_START(name) enum class name -# define BOOST_SCOPED_ENUM_END -# define BOOST_SCOPED_ENUM(name) name +#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR #endif +/** + * Start a declaration of a scoped enum. + * + * @param EnumType The new scoped enum. + * @param UnderlyingType The underlying type. + */ +#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType, UnderlyingType) \ + struct EnumType { \ + typedef UnderlyingType underlying_type; \ + EnumType() BOOST_NOEXCEPT {} \ + explicit EnumType(underlying_type v) : v_(v) {} \ + underlying_type get_underlying_value_() const { return v_; } \ + BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \ + private: \ + underlying_type v_; \ + typedef EnumType self_type; \ + public: \ + enum enum_type + +#define BOOST_SCOPED_ENUM_DECLARE_END2() \ + enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \ + operator enum_type() const BOOST_NOEXCEPT { return get_native_value_(); } \ + friend bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \ + friend bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \ + friend bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \ + friend bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \ + friend bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \ + friend bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \ + friend bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \ + friend bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \ + friend bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \ + friend bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \ + friend bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \ + friend bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \ + }; + +#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \ + ; \ + EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {} \ + BOOST_SCOPED_ENUM_DECLARE_END2() + +/** + * Starts a declaration of a scoped enum with the default int underlying type. + * + * @param EnumType The new scoped enum. + */ +#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) \ + BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,int) + +/** + * Name of the native enum type. + * + * @param NT The new scoped enum. + */ +#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType::enum_type +/** + * Forward declares an scoped enum. + * + * @param NT The scoped enum. + */ +#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) struct EnumType + +#else // BOOST_NO_SCOPED_ENUMS + +#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,UnderlyingType) enum class EnumType:UnderlyingType +#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) enum class EnumType +#define BOOST_SCOPED_ENUM_DECLARE_END2() +#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) ; + +#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType +#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) enum class EnumType + +#endif // BOOST_NO_SCOPED_ENUMS + +#define BOOST_SCOPED_ENUM_START(name) BOOST_SCOPED_ENUM_DECLARE_BEGIN(name) +#define BOOST_SCOPED_ENUM_END BOOST_SCOPED_ENUM_DECLARE_END2() +#define BOOST_SCOPED_ENUM(name) BOOST_SCOPED_ENUM_NATIVE(name) + +//#ifdef BOOST_NO_SCOPED_ENUMS +// +//# define BOOST_SCOPED_ENUM_START(name) struct name { enum enum_type +//# define BOOST_SCOPED_ENUM_END }; +//# define BOOST_SCOPED_ENUM(name) name::enum_type +// +//#else +// +//# define BOOST_SCOPED_ENUM_START(name) enum class name +//# define BOOST_SCOPED_ENUM_END +//# define BOOST_SCOPED_ENUM(name) name +// +//#endif #endif // BOOST_SCOPED_ENUM_EMULATION_HPP diff --git a/3party/boost/boost/detail/utf8_codecvt_facet.ipp b/3party/boost/boost/detail/utf8_codecvt_facet.ipp new file mode 100644 index 0000000000..064fdaf58e --- /dev/null +++ b/3party/boost/boost/detail/utf8_codecvt_facet.ipp @@ -0,0 +1,285 @@ +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// utf8_codecvt_facet.ipp + +// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu) +// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). +// Use, modification and distribution is subject to 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) + +// Please see the comments in to +// learn how this file should be used. + +#include + +#include // for multi-byte converson routines +#include + +#include +#include + +// If we don't have wstring, then Unicode support +// is not available anyway, so we don't need to even +// compiler this file. This also fixes the problem +// with mingw, which can compile this file, but will +// generate link error when building DLL. +#ifndef BOOST_NO_STD_WSTRING + +BOOST_UTF8_BEGIN_NAMESPACE + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// implementation for wchar_t + +// Translate incoming UTF-8 into UCS-4 +std::codecvt_base::result utf8_codecvt_facet::do_in( + std::mbstate_t& /*state*/, + const char * from, + const char * from_end, + const char * & from_next, + wchar_t * to, + wchar_t * to_end, + wchar_t * & to_next +) const { + // Basic algorithm: The first octet determines how many + // octets total make up the UCS-4 character. The remaining + // "continuing octets" all begin with "10". To convert, subtract + // the amount that specifies the number of octets from the first + // octet. Subtract 0x80 (1000 0000) from each continuing octet, + // then mash the whole lot together. Note that each continuing + // octet only uses 6 bits as unique values, so only shift by + // multiples of 6 to combine. + while (from != from_end && to != to_end) { + + // Error checking on the first octet + if (invalid_leading_octet(*from)){ + from_next = from; + to_next = to; + return std::codecvt_base::error; + } + + // The first octet is adjusted by a value dependent upon + // the number of "continuing octets" encoding the character + const int cont_octet_count = get_cont_octet_count(*from); + const wchar_t octet1_modifier_table[] = { + 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc + }; + + // The unsigned char conversion is necessary in case char is + // signed (I learned this the hard way) + wchar_t ucs_result = + (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count]; + + // Invariants : + // 1) At the start of the loop, 'i' continuing characters have been + // processed + // 2) *from points to the next continuing character to be processed. + int i = 0; + while(i != cont_octet_count && from != from_end) { + + // Error checking on continuing characters + if (invalid_continuing_octet(*from)) { + from_next = from; + to_next = to; + return std::codecvt_base::error; + } + + ucs_result *= (1 << 6); + + // each continuing character has an extra (10xxxxxx)b attached to + // it that must be removed. + ucs_result += (unsigned char)(*from++) - 0x80; + ++i; + } + + // If the buffer ends with an incomplete unicode character... + if (from == from_end && i != cont_octet_count) { + // rewind "from" to before the current character translation + from_next = from - (i+1); + to_next = to; + return std::codecvt_base::partial; + } + *to++ = ucs_result; + } + from_next = from; + to_next = to; + + // Were we done converting or did we run out of destination space? + if(from == from_end) return std::codecvt_base::ok; + else return std::codecvt_base::partial; +} + +std::codecvt_base::result utf8_codecvt_facet::do_out( + std::mbstate_t& /*state*/, + const wchar_t * from, + const wchar_t * from_end, + const wchar_t * & from_next, + char * to, + char * to_end, + char * & to_next +) const +{ + // RG - consider merging this table with the other one + const wchar_t octet1_modifier_table[] = { + 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc + }; + + wchar_t max_wchar = (std::numeric_limits::max)(); + while (from != from_end && to != to_end) { + + // Check for invalid UCS-4 character + if (*from > max_wchar) { + from_next = from; + to_next = to; + return std::codecvt_base::error; + } + + int cont_octet_count = get_cont_octet_out_count(*from); + + // RG - comment this formula better + int shift_exponent = (cont_octet_count) * 6; + + // Process the first character + *to++ = static_cast(octet1_modifier_table[cont_octet_count] + + (unsigned char)(*from / (1 << shift_exponent))); + + // Process the continuation characters + // Invariants: At the start of the loop: + // 1) 'i' continuing octets have been generated + // 2) '*to' points to the next location to place an octet + // 3) shift_exponent is 6 more than needed for the next octet + int i = 0; + while (i != cont_octet_count && to != to_end) { + shift_exponent -= 6; + *to++ = static_cast(0x80 + ((*from / (1 << shift_exponent)) % (1 << 6))); + ++i; + } + // If we filled up the out buffer before encoding the character + if(to == to_end && i != cont_octet_count) { + from_next = from; + to_next = to - (i+1); + return std::codecvt_base::partial; + } + ++from; + } + from_next = from; + to_next = to; + // Were we done or did we run out of destination space + if(from == from_end) return std::codecvt_base::ok; + else return std::codecvt_base::partial; +} + +// How many char objects can I process to get <= max_limit +// wchar_t objects? +int utf8_codecvt_facet::do_length( + BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &, + const char * from, + const char * from_end, + std::size_t max_limit +#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) +) const throw() +#else +) const +#endif +{ + // RG - this code is confusing! I need a better way to express it. + // and test cases. + + // Invariants: + // 1) last_octet_count has the size of the last measured character + // 2) char_count holds the number of characters shown to fit + // within the bounds so far (no greater than max_limit) + // 3) from_next points to the octet 'last_octet_count' before the + // last measured character. + int last_octet_count=0; + std::size_t char_count = 0; + const char* from_next = from; + // Use "<" because the buffer may represent incomplete characters + while (from_next+last_octet_count <= from_end && char_count <= max_limit) { + from_next += last_octet_count; + last_octet_count = (get_octet_count(*from_next)); + ++char_count; + } + return static_cast(from_next-from_end); +} + +unsigned int utf8_codecvt_facet::get_octet_count( + unsigned char lead_octet +){ + // if the 0-bit (MSB) is 0, then 1 character + if (lead_octet <= 0x7f) return 1; + + // Otherwise the count number of consecutive 1 bits starting at MSB +// assert(0xc0 <= lead_octet && lead_octet <= 0xfd); + + if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2; + else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3; + else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4; + else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5; + else return 6; +} +BOOST_UTF8_END_NAMESPACE + +namespace { +template +int get_cont_octet_out_count_impl(wchar_t word){ + if (word < 0x80) { + return 0; + } + if (word < 0x800) { + return 1; + } + return 2; +} + +template<> +int get_cont_octet_out_count_impl<4>(wchar_t word){ + if (word < 0x80) { + return 0; + } + if (word < 0x800) { + return 1; + } + + // Note that the following code will generate warnings on some platforms + // where wchar_t is defined as UCS2. The warnings are superfluous as the + // specialization is never instantitiated with such compilers, but this + // can cause problems if warnings are being treated as errors, so we guard + // against that. Including as we do + // should be enough to get WCHAR_MAX defined. +#if !defined(WCHAR_MAX) +# error WCHAR_MAX not defined! +#endif + // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX +#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier + return 2; +#elif WCHAR_MAX > 0x10000 + + if (word < 0x10000) { + return 2; + } + if (word < 0x200000) { + return 3; + } + if (word < 0x4000000) { + return 4; + } + return 5; + +#else + return 2; +#endif +} + +} // namespace anonymous + +BOOST_UTF8_BEGIN_NAMESPACE +// How many "continuing octets" will be needed for this word +// == total octets - 1. +int utf8_codecvt_facet::get_cont_octet_out_count( + wchar_t word +) const { + return get_cont_octet_out_count_impl(word); +} +BOOST_UTF8_END_NAMESPACE + +#endif diff --git a/3party/boost/boost/exception/detail/attribute_noreturn.hpp b/3party/boost/boost/exception/detail/attribute_noreturn.hpp index f6a0b5903e..ae9f031efe 100644 --- a/3party/boost/boost/exception/detail/attribute_noreturn.hpp +++ b/3party/boost/boost/exception/detail/attribute_noreturn.hpp @@ -9,7 +9,7 @@ #if defined(_MSC_VER) #define BOOST_ATTRIBUTE_NORETURN __declspec(noreturn) #elif defined(__GNUC__) -#define BOOST_ATTRIBUTE_NORETURN __attribute__((noreturn)) +#define BOOST_ATTRIBUTE_NORETURN __attribute__((__noreturn__)) #else #define BOOST_ATTRIBUTE_NORETURN #endif diff --git a/3party/boost/boost/exception/detail/error_info_impl.hpp b/3party/boost/boost/exception/detail/error_info_impl.hpp index 883d313a98..a8d1aa79dd 100644 --- a/3party/boost/boost/exception/detail/error_info_impl.hpp +++ b/3party/boost/boost/exception/detail/error_info_impl.hpp @@ -30,6 +30,7 @@ boost protected: + virtual ~error_info_base() throw() { } diff --git a/3party/boost/boost/exception/detail/exception_ptr.hpp b/3party/boost/boost/exception/detail/exception_ptr.hpp index b6ccf7e18c..5e5a2679b8 100644 --- a/3party/boost/boost/exception/detail/exception_ptr.hpp +++ b/3party/boost/boost/exception/detail/exception_ptr.hpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include namespace boost @@ -457,7 +457,12 @@ boost BOOST_ASSERT(p); p.ptr_->rethrow(); BOOST_ASSERT(0); - std::abort(); + #if defined(UNDER_CE) + // some CE platforms don't define ::abort() + exit(-1); + #else + abort(); + #endif } inline diff --git a/3party/boost/boost/exception/error_info.hpp b/3party/boost/boost/exception/error_info.hpp index 2e6832a338..03b3da8e31 100644 --- a/3party/boost/boost/exception/error_info.hpp +++ b/3party/boost/boost/exception/error_info.hpp @@ -3,4 +3,7 @@ //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 UUID_EE7ECCA0433B11E1923E37064924019B +#define UUID_EE7ECCA0433B11E1923E37064924019B namespace boost { template class error_info; } +#endif diff --git a/3party/boost/boost/exception/exception.hpp b/3party/boost/boost/exception/exception.hpp index 9cdfd5c6e8..42d2787128 100644 --- a/3party/boost/boost/exception/exception.hpp +++ b/3party/boost/boost/exception/exception.hpp @@ -310,6 +310,11 @@ boost namespace exception_detail { +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility push (default) +# endif +#endif template struct error_info_injector: @@ -326,6 +331,11 @@ boost { } }; +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility pop +# endif +#endif struct large_size { char c[256]; }; large_size dispatch_boost_exception( exception const * ); @@ -373,6 +383,11 @@ boost namespace exception_detail { +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility push (default) +# endif +#endif class clone_base { @@ -386,6 +401,11 @@ boost { } }; +#if defined(__GNUC__) +# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) +# pragma GCC visibility pop +# endif +#endif inline void @@ -410,8 +430,15 @@ boost class clone_impl: public T, - public clone_base + public virtual clone_base { + struct clone_tag { }; + clone_impl( clone_impl const & x, clone_tag ): + T(x) + { + copy_boost_exception(this,&x); + } + public: explicit @@ -430,7 +457,7 @@ boost clone_base const * clone() const { - return new clone_impl(*this); + return new clone_impl(*this,clone_tag()); } void diff --git a/3party/boost/boost/exception/info.hpp b/3party/boost/boost/exception/info.hpp index 5530746223..7b56076d7b 100644 --- a/3party/boost/boost/exception/info.hpp +++ b/3party/boost/boost/exception/info.hpp @@ -97,7 +97,7 @@ boost { shared_ptr const & p = i->second; #ifndef BOOST_NO_RTTI - BOOST_ASSERT( BOOST_EXCEPTION_DYNAMIC_TYPEID(*p).type_==ti.type_ ); + BOOST_ASSERT( *BOOST_EXCEPTION_DYNAMIC_TYPEID(*p).type_==*ti.type_ ); #endif return p; } diff --git a/3party/boost/boost/exception/info_tuple.hpp b/3party/boost/boost/exception/info_tuple.hpp index 34afe421b1..bf1be15da2 100644 --- a/3party/boost/boost/exception/info_tuple.hpp +++ b/3party/boost/boost/exception/info_tuple.hpp @@ -18,6 +18,30 @@ namespace boost { + template < + class E > + inline + E const & + operator<<( + E const & x, + tuple< > const & v ) + { + return x; + } + + template < + class E, + class Tag1,class T1 > + inline + E const & + operator<<( + E const & x, + tuple< + error_info > const & v ) + { + return x << v.template get<0>(); + } + template < class E, class Tag1,class T1, diff --git a/3party/boost/boost/filesystem.hpp b/3party/boost/boost/filesystem.hpp index d64d760c04..1a753026c8 100644 --- a/3party/boost/boost/filesystem.hpp +++ b/3party/boost/boost/filesystem.hpp @@ -12,30 +12,9 @@ #ifndef BOOST_FILESYSTEM_FILESYSTEM_HPP #define BOOST_FILESYSTEM_FILESYSTEM_HPP -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there - -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 -# endif - -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 -# endif - -#if BOOST_FILESYSTEM_VERSION == 2 -# include -# include -# include -# include - -# else -# include -# include -# include -# include - -# endif +# include +# include +# include +# include #endif // BOOST_FILESYSTEM_FILESYSTEM_HPP diff --git a/3party/boost/boost/filesystem/config.hpp b/3party/boost/boost/filesystem/config.hpp index c813bf5c02..ca695f4114 100644 --- a/3party/boost/boost/filesystem/config.hpp +++ b/3party/boost/boost/filesystem/config.hpp @@ -1,6 +1,6 @@ -// boost/filesystem/config.hpp -------------------------------------------------------// +// boost/filesystem/v3/config.hpp ----------------------------------------------------// -// Copyright Beman Dawes 2010 +// Copyright Beman Dawes 2003 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -9,27 +9,101 @@ //--------------------------------------------------------------------------------------// -#ifndef BOOST_FILESYSTEM_CONFIGX_HPP -#define BOOST_FILESYSTEM_CONFIGX_HPP +#ifndef BOOST_FILESYSTEM3_CONFIG_HPP +#define BOOST_FILESYSTEM3_CONFIG_HPP -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there - -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 3 +# error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3 # endif # if !defined(BOOST_FILESYSTEM_VERSION) # define BOOST_FILESYSTEM_VERSION 3 # endif -#if BOOST_FILESYSTEM_VERSION == 2 -# include +#define BOOST_FILESYSTEM_I18N // aid users wishing to compile several versions -# else -# include +// This header implements separate compilation features as described in +// http://www.boost.org/more/separate_compilation.html +#include +#include // for BOOST_POSIX_API or BOOST_WINDOWS_API +#include + +// BOOST_FILESYSTEM_DEPRECATED needed for source compiles -----------------------------// + +# ifdef BOOST_FILESYSTEM_SOURCE +# define BOOST_FILESYSTEM_DEPRECATED # endif -#endif // BOOST_FILESYSTEM_CONFIGX_HPP +// throw an exception ----------------------------------------------------------------// +// +// Exceptions were originally thrown via boost::throw_exception(). +// As throw_exception() became more complex, it caused user error reporting +// to be harder to interpret, since the exception reported became much more complex. +// The immediate fix was to throw directly, wrapped in a macro to make any later change +// easier. + +#define BOOST_FILESYSTEM_THROW(EX) throw EX + +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support +# endif + +// This header implements separate compilation features as described in +// http://www.boost.org/more/separate_compilation.html + +// normalize macros ------------------------------------------------------------------// + +#if !defined(BOOST_FILESYSTEM_DYN_LINK) && !defined(BOOST_FILESYSTEM_STATIC_LINK) \ + && !defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_ALL_STATIC_LINK) +# define BOOST_FILESYSTEM_STATIC_LINK +#endif + +#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_FILESYSTEM_DYN_LINK) +# define BOOST_FILESYSTEM_DYN_LINK +#elif defined(BOOST_ALL_STATIC_LINK) && !defined(BOOST_FILESYSTEM_STATIC_LINK) +# define BOOST_FILESYSTEM_STATIC_LINK +#endif + +#if defined(BOOST_FILESYSTEM_DYN_LINK) && defined(BOOST_FILESYSTEM_STATIC_LINK) +# error Must not define both BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK +#endif + +#if defined(BOOST_ALL_NO_LIB) && !defined(BOOST_FILESYSTEM_NO_LIB) +# define BOOST_FILESYSTEM_NO_LIB +#endif + +// enable dynamic linking ------------------------------------------------------------// + +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) +# if defined(BOOST_FILESYSTEM_SOURCE) +# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT +# endif +#else +# define BOOST_FILESYSTEM_DECL +#endif + +// enable automatic library variant selection ----------------------------------------// + +#if !defined(BOOST_FILESYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) \ + && !defined(BOOST_FILESYSTEM_NO_LIB) +// +// Set the name of our library, this will get undef'ed by auto_link.hpp +// once it's done with it: +// +#define BOOST_LIB_NAME boost_filesystem +// +// If we're importing code from a dll, then tell auto_link.hpp about it: +// +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) +# define BOOST_DYN_LINK +#endif +// +// And include the header that does the work: +// +#include +#endif // auto-linking disabled + +#endif // BOOST_FILESYSTEM3_CONFIG_HPP diff --git a/3party/boost/boost/filesystem/convenience.hpp b/3party/boost/boost/filesystem/convenience.hpp index a132e17f0f..f0bd986909 100644 --- a/3party/boost/boost/filesystem/convenience.hpp +++ b/3party/boost/boost/filesystem/convenience.hpp @@ -1,35 +1,58 @@ -// boost/filesystem/convenience.hpp --------------------------------------------------// +// boost/filesystem/convenience.hpp ----------------------------------------// -// Copyright Beman Dawes 2010 +// Copyright Beman Dawes, 2002-2005 +// Copyright Vladimir Prus, 2002 +// Use, modification, and distribution is subject to 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) -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt +// See library home page at http://www.boost.org/libs/filesystem -// Library home page: http://www.boost.org/libs/filesystem +//----------------------------------------------------------------------------// -//--------------------------------------------------------------------------------------// +#ifndef BOOST_FILESYSTEM3_CONVENIENCE_HPP +#define BOOST_FILESYSTEM3_CONVENIENCE_HPP -#ifndef BOOST_FILESYSTEM_CONVENIENCEX_HPP -#define BOOST_FILESYSTEM_CONVENIENCEX_HPP +#include -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there - -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support # endif -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 -# endif +#include +#include -#if BOOST_FILESYSTEM_VERSION == 2 -# include +#include // must be the last #include -# else -# include +namespace boost +{ + namespace filesystem + { + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + + inline std::string extension(const path & p) + { + return p.extension().string(); + } + + inline std::string basename(const path & p) + { + return p.stem().string(); + } + + inline path change_extension( const path & p, const path & new_extension ) + { + path new_p( p ); + new_p.replace_extension( new_extension ); + return new_p; + } # endif -#endif // BOOST_FILESYSTEM_CONVENIENCEX_HPP + + } // namespace filesystem +} // namespace boost + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM3_CONVENIENCE_HPP diff --git a/3party/boost/boost/filesystem/exception.hpp b/3party/boost/boost/filesystem/exception.hpp index 6ba8466d17..985cd8f715 100644 --- a/3party/boost/boost/filesystem/exception.hpp +++ b/3party/boost/boost/filesystem/exception.hpp @@ -1,35 +1,9 @@ -// boost/filesystem/exception.hpp ----------------------------------------------------// +// boost/filesystem/exception.hpp -----------------------------------------------------// -// Copyright Beman Dawes 2010 +// Copyright Beman Dawes 2003 +// Use, modification, and distribution is subject to 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) -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// Library home page: http://www.boost.org/libs/filesystem - -//--------------------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM_EXCEPTIONX_HPP -#define BOOST_FILESYSTEM_EXCEPTIONX_HPP - -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there - -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 -# endif - -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 -# endif - -#if BOOST_FILESYSTEM_VERSION == 2 -# include - -# else -# include - -# endif - -#endif // BOOST_FILESYSTEM_EXCEPTIONX_HPP +// This header is no longer used. The contents have been moved to path.hpp. +// It is provided so that user code #includes do not have to be changed. diff --git a/3party/boost/boost/filesystem/fstream.hpp b/3party/boost/boost/filesystem/fstream.hpp index e159e58ed3..0727238876 100644 --- a/3party/boost/boost/filesystem/fstream.hpp +++ b/3party/boost/boost/filesystem/fstream.hpp @@ -1,6 +1,6 @@ // boost/filesystem/fstream.hpp ------------------------------------------------------// -// Copyright Beman Dawes 2010 +// Copyright Beman Dawes 2002 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt @@ -9,27 +9,174 @@ //--------------------------------------------------------------------------------------// -#ifndef BOOST_FILESYSTEM_FSTREAMX_HPP -#define BOOST_FILESYSTEM_FSTREAMX_HPP +#ifndef BOOST_FILESYSTEM3_FSTREAM_HPP +#define BOOST_FILESYSTEM3_FSTREAM_HPP -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there +#include -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support # endif -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 -# endif +#include +#include +#include -#if BOOST_FILESYSTEM_VERSION == 2 -# include +#include // must be the last #include -# else -# include +// on Windows, except for standard libaries known to have wchar_t overloads for +// file stream I/O, use path::string() to get a narrow character c_str() +#if defined(BOOST_WINDOWS_API) \ + && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION)) + // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware +# define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available +#else // use the native c_str, which will be narrow on POSIX, wide on Windows +# define BOOST_FILESYSTEM_C_STR c_str() +#endif -# endif +namespace boost +{ +namespace filesystem +{ -#endif // BOOST_FILESYSTEM_FSTREAMX_HPP +//--------------------------------------------------------------------------------------// +// basic_filebuf // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_filebuf : public std::basic_filebuf + { + private: // disallow copying + basic_filebuf(const basic_filebuf&); + const basic_filebuf& operator=(const basic_filebuf&); + + public: + basic_filebuf() {} + virtual ~basic_filebuf() {} + + basic_filebuf* + open(const path& p, std::ios_base::openmode mode) + { + return std::basic_filebuf::open(p.BOOST_FILESYSTEM_C_STR, mode) + ? this : 0; + } + }; + +//--------------------------------------------------------------------------------------// +// basic_ifstream // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_ifstream : public std::basic_ifstream + { + private: // disallow copying + basic_ifstream(const basic_ifstream&); + const basic_ifstream& operator=(const basic_ifstream&); + + public: + basic_ifstream() {} + + // use two signatures, rather than one signature with default second + // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) + + explicit basic_ifstream(const path& p) + : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {} + + basic_ifstream(const path& p, std::ios_base::openmode mode) + : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, mode) {} + + void open(const path& p) + { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); } + + void open(const path& p, std::ios_base::openmode mode) + { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } + + virtual ~basic_ifstream() {} + }; + +//--------------------------------------------------------------------------------------// +// basic_ofstream // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_ofstream : public std::basic_ofstream + { + private: // disallow copying + basic_ofstream(const basic_ofstream&); + const basic_ofstream& operator=(const basic_ofstream&); + + public: + basic_ofstream() {} + + // use two signatures, rather than one signature with default second + // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) + + explicit basic_ofstream(const path& p) + : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {} + + basic_ofstream(const path& p, std::ios_base::openmode mode) + : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, mode) {} + + void open(const path& p) + { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); } + + void open(const path& p, std::ios_base::openmode mode) + { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } + + virtual ~basic_ofstream() {} + }; + +//--------------------------------------------------------------------------------------// +// basic_fstream // +//--------------------------------------------------------------------------------------// + + template < class charT, class traits = std::char_traits > + class basic_fstream : public std::basic_fstream + { + private: // disallow copying + basic_fstream(const basic_fstream&); + const basic_fstream & operator=(const basic_fstream&); + + public: + basic_fstream() {} + + // use two signatures, rather than one signature with default second + // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) + + explicit basic_fstream(const path& p) + : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, + std::ios_base::in | std::ios_base::out) {} + + basic_fstream(const path& p, std::ios_base::openmode mode) + : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, mode) {} + + void open(const path& p) + { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, + std::ios_base::in | std::ios_base::out); } + + void open(const path& p, std::ios_base::openmode mode) + { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } + + virtual ~basic_fstream() {} + + }; + +//--------------------------------------------------------------------------------------// +// typedefs // +//--------------------------------------------------------------------------------------// + + typedef basic_filebuf filebuf; + typedef basic_ifstream ifstream; + typedef basic_ofstream ofstream; + typedef basic_fstream fstream; + + typedef basic_filebuf wfilebuf; + typedef basic_ifstream wifstream; + typedef basic_ofstream wofstream; + typedef basic_fstream wfstream; + +} // namespace filesystem +} // namespace boost + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM3_FSTREAM_HPP diff --git a/3party/boost/boost/filesystem/operations.hpp b/3party/boost/boost/filesystem/operations.hpp index db7b1235e0..dc01b7d8ba 100644 --- a/3party/boost/boost/filesystem/operations.hpp +++ b/3party/boost/boost/filesystem/operations.hpp @@ -1,35 +1,1096 @@ // boost/filesystem/operations.hpp ---------------------------------------------------// -// Copyright Beman Dawes 2010 - +// Copyright Beman Dawes 2002-2009 +// Copyright Jan Langer 2002 +// Copyright Dietmar Kuehl 2001 +// Copyright Vladimir Prus 2002 + // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // Library home page: http://www.boost.org/libs/filesystem -//--------------------------------------------------------------------------------------// +//--------------------------------------------------------------------------------------// -#ifndef BOOST_FILESYSTEM_OPERATIONSX_HPP -#define BOOST_FILESYSTEM_OPERATIONSX_HPP +#ifndef BOOST_FILESYSTEM3_OPERATIONS_HPP +#define BOOST_FILESYSTEM3_OPERATIONS_HPP -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there +#include -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support # endif -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include // for pair +#include +#include +#include + +#ifdef BOOST_WINDOWS_API +# include +#endif + +#include // must be the last #include + +//--------------------------------------------------------------------------------------// + +namespace boost +{ + namespace filesystem + { + +//--------------------------------------------------------------------------------------// +// file_type // +//--------------------------------------------------------------------------------------// + + enum file_type + { + status_error, +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + status_unknown = status_error, +# endif + file_not_found, + regular_file, + directory_file, + // the following may not apply to some operating systems or file systems + symlink_file, + block_file, + character_file, + fifo_file, + socket_file, + reparse_file, // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink + type_unknown, // file does exist, but isn't one of the above types or + // we don't have strong enough permission to find its type + + _detail_directory_symlink // internal use only; never exposed to users + }; + +//--------------------------------------------------------------------------------------// +// perms // +//--------------------------------------------------------------------------------------// + + enum perms + { + no_perms = 0, // file_not_found is no_perms rather than perms_not_known + + // POSIX equivalent macros given in comments. + // Values are from POSIX and are given in octal per the POSIX standard. + + // permission bits + + owner_read = 0400, // S_IRUSR, Read permission, owner + owner_write = 0200, // S_IWUSR, Write permission, owner + owner_exe = 0100, // S_IXUSR, Execute/search permission, owner + owner_all = 0700, // S_IRWXU, Read, write, execute/search by owner + + group_read = 040, // S_IRGRP, Read permission, group + group_write = 020, // S_IWGRP, Write permission, group + group_exe = 010, // S_IXGRP, Execute/search permission, group + group_all = 070, // S_IRWXG, Read, write, execute/search by group + + others_read = 04, // S_IROTH, Read permission, others + others_write = 02, // S_IWOTH, Write permission, others + others_exe = 01, // S_IXOTH, Execute/search permission, others + others_all = 07, // S_IRWXO, Read, write, execute/search by others + + all_all = owner_all|group_all|others_all, // 0777 + + // other POSIX bits + + set_uid_on_exe = 04000, // S_ISUID, Set-user-ID on execution + set_gid_on_exe = 02000, // S_ISGID, Set-group-ID on execution + sticky_bit = 01000, // S_ISVTX, + // (POSIX XSI) On directories, restricted deletion flag + // (V7) 'sticky bit': save swapped text even after use + // (SunOS) On non-directories: don't cache this file + // (SVID-v4.2) On directories: restricted deletion flag + // Also see http://en.wikipedia.org/wiki/Sticky_bit + + perms_mask = all_all|set_uid_on_exe|set_gid_on_exe|sticky_bit, // 07777 + + perms_not_known = 0xFFFF, // present when directory_entry cache not loaded + + // options for permissions() function + + add_perms = 0x1000, // adds the given permission bits to the current bits + remove_perms = 0x2000, // removes the given permission bits from the current bits; + // choose add_perms or remove_perms, not both; if neither add_perms + // nor remove_perms is given, replace the current bits with + // the given bits. + + symlink_perms = 0x4000 // on POSIX, don't resolve symlinks; implied on Windows + }; + + BOOST_BITMASK(perms) + +//--------------------------------------------------------------------------------------// +// file_status // +//--------------------------------------------------------------------------------------// + + class BOOST_FILESYSTEM_DECL file_status + { + public: + file_status() : m_value(status_error), m_perms(perms_not_known) {} + explicit file_status(file_type v, perms prms = perms_not_known) + : m_value(v), m_perms(prms) {} + + // observers + file_type type() const { return m_value; } + perms permissions() const { return m_perms; } + + // modifiers + void type(file_type v) { m_value = v; } + void permissions(perms prms) { m_perms = prms; } + + bool operator==(const file_status& rhs) const { return type() == rhs.type() && + permissions() == rhs.permissions(); } + bool operator!=(const file_status& rhs) const { return !(*this == rhs); } + + private: + file_type m_value; + enum perms m_perms; + }; + + inline bool type_present(file_status f) { return f.type() != status_error; } + inline bool permissions_present(file_status f) + {return f.permissions() != perms_not_known;} + inline bool status_known(file_status f) { return type_present(f) && permissions_present(f); } + inline bool exists(file_status f) { return f.type() != status_error + && f.type() != file_not_found; } + inline bool is_regular_file(file_status f){ return f.type() == regular_file; } + inline bool is_directory(file_status f) { return f.type() == directory_file; } + inline bool is_symlink(file_status f) { return f.type() == symlink_file; } + inline bool is_other(file_status f) { return exists(f) && !is_regular_file(f) + && !is_directory(f) && !is_symlink(f); } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline bool is_regular(file_status f) { return f.type() == regular_file; } # endif -#if BOOST_FILESYSTEM_VERSION == 2 -# include + struct space_info + { + // all values are byte counts + boost::uintmax_t capacity; + boost::uintmax_t free; // <= capacity + boost::uintmax_t available; // <= free + }; -# else -# include + BOOST_SCOPED_ENUM_START(copy_option) + {none, fail_if_exists = none, overwrite_if_exists}; + BOOST_SCOPED_ENUM_END +//--------------------------------------------------------------------------------------// +// implementation details // +//--------------------------------------------------------------------------------------// + + namespace detail + { + BOOST_FILESYSTEM_DECL + file_status status(const path&p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + file_status symlink_status(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool is_empty(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path initial_path(system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path canonical(const path& p, const path& base, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy(const path& from, const path& to, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy_directory(const path& from, const path& to, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy_file(const path& from, const path& to, + BOOST_SCOPED_ENUM(copy_option) option, // See ticket #2925 + system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool create_directories(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool create_directory(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void create_directory_symlink(const path& to, const path& from, + system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void create_hard_link(const path& to, const path& from, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void create_symlink(const path& to, const path& from, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path current_path(system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void current_path(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + bool equivalent(const path& p1, const path& p2, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + boost::uintmax_t file_size(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + boost::uintmax_t hard_link_count(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + std::time_t last_write_time(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void last_write_time(const path& p, const std::time_t new_time, + system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void permissions(const path& p, perms prms, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path read_symlink(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + // For standardization, if the committee doesn't like "remove", consider "eliminate" + bool remove(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + boost::uintmax_t remove_all(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void rename(const path& old_p, const path& new_p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + void resize_file(const path& p, uintmax_t size, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + space_info space(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path system_complete(const path& p, system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path temp_directory_path(system::error_code* ec=0); + BOOST_FILESYSTEM_DECL + path unique_path(const path& p, system::error_code* ec=0); + } // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// status query functions // +// // +//--------------------------------------------------------------------------------------// + + inline + file_status status(const path& p) {return detail::status(p);} + inline + file_status status(const path& p, system::error_code& ec) + {return detail::status(p, &ec);} + inline + file_status symlink_status(const path& p) {return detail::symlink_status(p);} + inline + file_status symlink_status(const path& p, system::error_code& ec) + {return detail::symlink_status(p, &ec);} + inline + bool exists(const path& p) {return exists(detail::status(p));} + inline + bool exists(const path& p, system::error_code& ec) + {return exists(detail::status(p, &ec));} + inline + bool is_directory(const path& p) {return is_directory(detail::status(p));} + inline + bool is_directory(const path& p, system::error_code& ec) + {return is_directory(detail::status(p, &ec));} + inline + bool is_regular_file(const path& p) {return is_regular_file(detail::status(p));} + inline + bool is_regular_file(const path& p, system::error_code& ec) + {return is_regular_file(detail::status(p, &ec));} + inline + bool is_other(const path& p) {return is_other(detail::status(p));} + inline + bool is_other(const path& p, system::error_code& ec) + {return is_other(detail::status(p, &ec));} + inline + bool is_symlink(const path& p) {return is_symlink(detail::symlink_status(p));} + inline + bool is_symlink(const path& p, system::error_code& ec) + {return is_symlink(detail::symlink_status(p, &ec));} +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline + bool is_regular(const path& p) {return is_regular(detail::status(p));} + inline + bool is_regular(const path& p, system::error_code& ec) + {return is_regular(detail::status(p, &ec));} # endif -#endif // BOOST_FILESYSTEM_OPERATIONSX_HPP + inline + bool is_empty(const path& p) {return detail::is_empty(p);} + inline + bool is_empty(const path& p, system::error_code& ec) + {return detail::is_empty(p, &ec);} + +//--------------------------------------------------------------------------------------// +// // +// operational functions // +// in alphabetical order, unless otherwise noted // +// // +//--------------------------------------------------------------------------------------// + + // forward declarations + path current_path(); // fwd declaration + path initial_path(); + + BOOST_FILESYSTEM_DECL + path absolute(const path& p, const path& base=current_path()); + // If base.is_absolute(), throws nothing. Thus no need for ec argument + + inline + path canonical(const path& p, const path& base=current_path()) + {return detail::canonical(p, base);} + inline + path canonical(const path& p, system::error_code& ec) + {return detail::canonical(p, current_path(), &ec);} + inline + path canonical(const path& p, const path& base, system::error_code& ec) + {return detail::canonical(p, base, &ec);} + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline + path complete(const path& p) + { + return absolute(p, initial_path()); + } + + inline + path complete(const path& p, const path& base) + { + return absolute(p, base); + } +# endif + + inline + void copy(const path& from, const path& to) {detail::copy(from, to);} + + inline + void copy(const path& from, const path& to, system::error_code& ec) + {detail::copy(from, to, &ec);} + inline + void copy_directory(const path& from, const path& to) + {detail::copy_directory(from, to);} + inline + void copy_directory(const path& from, const path& to, system::error_code& ec) + {detail::copy_directory(from, to, &ec);} + inline + void copy_file(const path& from, const path& to, // See ticket #2925 + BOOST_SCOPED_ENUM(copy_option) option) + {detail::copy_file(from, to, option);} + inline + void copy_file(const path& from, const path& to) + {detail::copy_file(from, to, copy_option::fail_if_exists);} + inline + void copy_file(const path& from, const path& to, // See ticket #2925 + BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec) + {detail::copy_file(from, to, option, &ec);} + inline + void copy_file(const path& from, const path& to, system::error_code& ec) + {detail::copy_file(from, to, copy_option::fail_if_exists, &ec);} + inline + void copy_symlink(const path& existing_symlink, const path& new_symlink) {detail::copy_symlink(existing_symlink, new_symlink);} + + inline + void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec) + {detail::copy_symlink(existing_symlink, new_symlink, &ec);} + inline + bool create_directories(const path& p) {return detail::create_directories(p);} + + inline + bool create_directories(const path& p, system::error_code& ec) + {return detail::create_directories(p, &ec);} + inline + bool create_directory(const path& p) {return detail::create_directory(p);} + + inline + bool create_directory(const path& p, system::error_code& ec) + {return detail::create_directory(p, &ec);} + inline + void create_directory_symlink(const path& to, const path& from) + {detail::create_directory_symlink(to, from);} + inline + void create_directory_symlink(const path& to, const path& from, system::error_code& ec) + {detail::create_directory_symlink(to, from, &ec);} + inline + void create_hard_link(const path& to, const path& new_hard_link) {detail::create_hard_link(to, new_hard_link);} + + inline + void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec) + {detail::create_hard_link(to, new_hard_link, &ec);} + inline + void create_symlink(const path& to, const path& new_symlink) {detail::create_symlink(to, new_symlink);} + + inline + void create_symlink(const path& to, const path& new_symlink, system::error_code& ec) + {detail::create_symlink(to, new_symlink, &ec);} + inline + path current_path() {return detail::current_path();} + + inline + path current_path(system::error_code& ec) {return detail::current_path(&ec);} + + inline + void current_path(const path& p) {detail::current_path(p);} + + inline + void current_path(const path& p, system::error_code& ec) {detail::current_path(p, &ec);} + + inline + bool equivalent(const path& p1, const path& p2) {return detail::equivalent(p1, p2);} + + inline + bool equivalent(const path& p1, const path& p2, system::error_code& ec) + {return detail::equivalent(p1, p2, &ec);} + inline + boost::uintmax_t file_size(const path& p) {return detail::file_size(p);} + + inline + boost::uintmax_t file_size(const path& p, system::error_code& ec) + {return detail::file_size(p, &ec);} + inline + boost::uintmax_t hard_link_count(const path& p) {return detail::hard_link_count(p);} + + inline + boost::uintmax_t hard_link_count(const path& p, system::error_code& ec) + {return detail::hard_link_count(p, &ec);} + inline + path initial_path() {return detail::initial_path();} + + inline + path initial_path(system::error_code& ec) {return detail::initial_path(&ec);} + + template + path initial_path() {return initial_path();} + template + path initial_path(system::error_code& ec) {return detail::initial_path(&ec);} + + inline + std::time_t last_write_time(const path& p) {return detail::last_write_time(p);} + + inline + std::time_t last_write_time(const path& p, system::error_code& ec) + {return detail::last_write_time(p, &ec);} + inline + void last_write_time(const path& p, const std::time_t new_time) + {detail::last_write_time(p, new_time);} + inline + void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec) + {detail::last_write_time(p, new_time, &ec);} + inline + void permissions(const path& p, perms prms) + {detail::permissions(p, prms);} + inline + void permissions(const path& p, perms prms, system::error_code& ec) + {detail::permissions(p, prms, &ec);} + + inline + path read_symlink(const path& p) {return detail::read_symlink(p);} + + inline + path read_symlink(const path& p, system::error_code& ec) + {return detail::read_symlink(p, &ec);} + inline + // For standardization, if the committee doesn't like "remove", consider "eliminate" + bool remove(const path& p) {return detail::remove(p);} + + inline + bool remove(const path& p, system::error_code& ec) {return detail::remove(p, &ec);} + + inline + boost::uintmax_t remove_all(const path& p) {return detail::remove_all(p);} + + inline + boost::uintmax_t remove_all(const path& p, system::error_code& ec) + {return detail::remove_all(p, &ec);} + inline + void rename(const path& old_p, const path& new_p) {detail::rename(old_p, new_p);} + + inline + void rename(const path& old_p, const path& new_p, system::error_code& ec) + {detail::rename(old_p, new_p, &ec);} + inline // name suggested by Scott McMurray + void resize_file(const path& p, uintmax_t size) {detail::resize_file(p, size);} + + inline + void resize_file(const path& p, uintmax_t size, system::error_code& ec) + {detail::resize_file(p, size, &ec);} + inline + space_info space(const path& p) {return detail::space(p);} + + inline + space_info space(const path& p, system::error_code& ec) {return detail::space(p, &ec);} + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + inline bool symbolic_link_exists(const path& p) + { return is_symlink(symlink_status(p)); } +# endif + + inline + path system_complete(const path& p) {return detail::system_complete(p);} + + inline + path system_complete(const path& p, system::error_code& ec) + {return detail::system_complete(p, &ec);} + inline + path temp_directory_path() {return detail::temp_directory_path();} + + inline + path temp_directory_path(system::error_code& ec) + {return detail::temp_directory_path(&ec);} + inline + path unique_path(const path& p="%%%%-%%%%-%%%%-%%%%") + { return detail::unique_path(p); } + inline + path unique_path(const path& p, system::error_code& ec) + { return detail::unique_path(p, &ec); } + +//--------------------------------------------------------------------------------------// +// // +// directory_entry // +// // +//--------------------------------------------------------------------------------------// + +// GCC has a problem with a member function named path within a namespace or +// sub-namespace that also has a class named path. The workaround is to always +// fully qualify the name path when it refers to the class name. + +class BOOST_FILESYSTEM_DECL directory_entry +{ +public: + + // compiler generated copy constructor, copy assignment, and destructor apply + + directory_entry() {} + explicit directory_entry(const boost::filesystem::path& p, + file_status st = file_status(), file_status symlink_st=file_status()) + : m_path(p), m_status(st), m_symlink_status(symlink_st) + {} + + void assign(const boost::filesystem::path& p, + file_status st = file_status(), file_status symlink_st = file_status()) + { m_path = p; m_status = st; m_symlink_status = symlink_st; } + + void replace_filename(const boost::filesystem::path& p, + file_status st = file_status(), file_status symlink_st = file_status()) + { + m_path.remove_filename(); + m_path /= p; + m_status = st; + m_symlink_status = symlink_st; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + void replace_leaf(const boost::filesystem::path& p, + file_status st, file_status symlink_st) + { replace_filename(p, st, symlink_st); } +# endif + + const boost::filesystem::path& path() const {return m_path;} + file_status status() const {return m_get_status();} + file_status status(system::error_code& ec) const {return m_get_status(&ec);} + file_status symlink_status() const {return m_get_symlink_status();} + file_status symlink_status(system::error_code& ec) const {return m_get_symlink_status(&ec);} + + bool operator==(const directory_entry& rhs) {return m_path == rhs.m_path;} + bool operator!=(const directory_entry& rhs) {return m_path != rhs.m_path;} + bool operator< (const directory_entry& rhs) {return m_path < rhs.m_path;} + bool operator<=(const directory_entry& rhs) {return m_path <= rhs.m_path;} + bool operator> (const directory_entry& rhs) {return m_path > rhs.m_path;} + bool operator>=(const directory_entry& rhs) {return m_path >= rhs.m_path;} + +private: + boost::filesystem::path m_path; + mutable file_status m_status; // stat()-like + mutable file_status m_symlink_status; // lstat()-like + + file_status m_get_status(system::error_code* ec=0) const; + file_status m_get_symlink_status(system::error_code* ec=0) const; +}; // directory_entry + +//--------------------------------------------------------------------------------------// +// // +// directory_iterator helpers // +// // +//--------------------------------------------------------------------------------------// + +class directory_iterator; + +namespace detail +{ + BOOST_FILESYSTEM_DECL + system::error_code dir_itr_close(// never throws() + void *& handle +# if defined(BOOST_POSIX_API) + , void *& buffer +# endif + ); + + struct dir_itr_imp + { + directory_entry dir_entry; + void* handle; + +# ifdef BOOST_POSIX_API + void* buffer; // see dir_itr_increment implementation +# endif + + dir_itr_imp() : handle(0) +# ifdef BOOST_POSIX_API + , buffer(0) +# endif + {} + + ~dir_itr_imp() // never throws + { + dir_itr_close(handle +# if defined(BOOST_POSIX_API) + , buffer +# endif + ); + } + }; + + // see path::iterator: comment below + BOOST_FILESYSTEM_DECL void directory_iterator_construct(directory_iterator& it, + const path& p, system::error_code* ec); + BOOST_FILESYSTEM_DECL void directory_iterator_increment(directory_iterator& it, + system::error_code* ec); + +} // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// directory_iterator // +// // +//--------------------------------------------------------------------------------------// + + class directory_iterator + : public boost::iterator_facade< directory_iterator, + directory_entry, + boost::single_pass_traversal_tag > + { + public: + + directory_iterator(){} // creates the "end" iterator + + // iterator_facade derived classes don't seem to like implementations in + // separate translation unit dll's, so forward to detail functions + explicit directory_iterator(const path& p) + : m_imp(new detail::dir_itr_imp) + { detail::directory_iterator_construct(*this, p, 0); } + + directory_iterator(const path& p, system::error_code& ec) + : m_imp(new detail::dir_itr_imp) + { detail::directory_iterator_construct(*this, p, &ec); } + + ~directory_iterator() {} // never throws + + directory_iterator& increment(system::error_code& ec) + { + detail::directory_iterator_increment(*this, &ec); + return *this; + } + + private: + friend struct detail::dir_itr_imp; + friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_construct(directory_iterator& it, + const path& p, system::error_code* ec); + friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_increment(directory_iterator& it, + system::error_code* ec); + + // shared_ptr provides shallow-copy semantics required for InputIterators. + // m_imp.get()==0 indicates the end iterator. + boost::shared_ptr< detail::dir_itr_imp > m_imp; + + friend class boost::iterator_core_access; + + boost::iterator_facade< + directory_iterator, + directory_entry, + boost::single_pass_traversal_tag >::reference dereference() const + { + BOOST_ASSERT_MSG(m_imp.get(), "attempt to dereference end iterator"); + return m_imp->dir_entry; + } + + void increment() { detail::directory_iterator_increment(*this, 0); } + + bool equal(const directory_iterator& rhs) const + { return m_imp == rhs.m_imp; } + }; + +//--------------------------------------------------------------------------------------// +// // +// recursive_directory_iterator helpers // +// // +//--------------------------------------------------------------------------------------// + + BOOST_SCOPED_ENUM_START(symlink_option) + { + none, + no_recurse = none, // don't follow directory symlinks (default behavior) + recurse, // follow directory symlinks + _detail_no_push = recurse << 1 // internal use only + }; + BOOST_SCOPED_ENUM_END + + BOOST_BITMASK(BOOST_SCOPED_ENUM(symlink_option)) + + namespace detail + { + struct recur_dir_itr_imp + { + typedef directory_iterator element_type; + std::stack< element_type, std::vector< element_type > > m_stack; + int m_level; + BOOST_SCOPED_ENUM(symlink_option) m_options; + + recur_dir_itr_imp() : m_level(0), m_options(symlink_option::none) {} + + void increment(system::error_code* ec); // ec == 0 means throw on error + + void pop(); + + }; + + // Implementation is inline to avoid dynamic linking difficulties with m_stack: + // Microsoft warning C4251, m_stack needs to have dll-interface to be used by + // clients of struct 'boost::filesystem::detail::recur_dir_itr_imp' + + inline + void recur_dir_itr_imp::increment(system::error_code* ec) + // ec == 0 means throw on error + { + if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push) + m_options &= ~symlink_option::_detail_no_push; + + else + { + // Logic for following predicate was contributed by Daniel Aarno to handle cyclic + // symlinks correctly and efficiently, fixing ticket #5652. + // if (((m_options & symlink_option::recurse) == symlink_option::recurse + // || !is_symlink(m_stack.top()->symlink_status())) + // && is_directory(m_stack.top()->status())) ... + // The predicate code has since been rewritten to pass error_code arguments, + // per ticket #5653. + bool or_pred = (m_options & symlink_option::recurse) == symlink_option::recurse + || (ec == 0 ? !is_symlink(m_stack.top()->symlink_status()) + : !is_symlink(m_stack.top()->symlink_status(*ec))); + if (ec != 0 && *ec) + return; + bool and_pred = or_pred && (ec == 0 ? is_directory(m_stack.top()->status()) + : is_directory(m_stack.top()->status(*ec))); + if (ec != 0 && *ec) + return; + + if (and_pred) + { + if (ec == 0) + m_stack.push(directory_iterator(m_stack.top()->path())); + else + { + m_stack.push(directory_iterator(m_stack.top()->path(), *ec)); + if (*ec) + return; + } + if (m_stack.top() != directory_iterator()) + { + ++m_level; + return; + } + m_stack.pop(); + } + } + + while (!m_stack.empty() && ++m_stack.top() == directory_iterator()) + { + m_stack.pop(); + --m_level; + } + } + + inline + void recur_dir_itr_imp::pop() + { + BOOST_ASSERT_MSG(m_level > 0, + "pop() on recursive_directory_iterator with level < 1"); + + do + { + m_stack.pop(); + --m_level; + } + while (!m_stack.empty() && ++m_stack.top() == directory_iterator()); + } + } // namespace detail + +//--------------------------------------------------------------------------------------// +// // +// recursive_directory_iterator // +// // +//--------------------------------------------------------------------------------------// + + class recursive_directory_iterator + : public boost::iterator_facade< + recursive_directory_iterator, + directory_entry, + boost::single_pass_traversal_tag > + { + public: + + recursive_directory_iterator(){} // creates the "end" iterator + + explicit recursive_directory_iterator(const path& dir_path, + BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none) + : m_imp(new detail::recur_dir_itr_imp) + { + m_imp->m_options = opt; + m_imp->m_stack.push(directory_iterator(dir_path)); + if (m_imp->m_stack.top() == directory_iterator()) + { m_imp.reset (); } + } + + recursive_directory_iterator(const path& dir_path, + BOOST_SCOPED_ENUM(symlink_option) opt, + system::error_code & ec) + : m_imp(new detail::recur_dir_itr_imp) + { + m_imp->m_options = opt; + m_imp->m_stack.push(directory_iterator(dir_path, ec)); + if (m_imp->m_stack.top() == directory_iterator()) + { m_imp.reset (); } + } + + recursive_directory_iterator(const path& dir_path, + system::error_code & ec) + : m_imp(new detail::recur_dir_itr_imp) + { + m_imp->m_options = symlink_option::none; + m_imp->m_stack.push(directory_iterator(dir_path, ec)); + if (m_imp->m_stack.top() == directory_iterator()) + { m_imp.reset (); } + } + + recursive_directory_iterator& increment(system::error_code& ec) + { + BOOST_ASSERT_MSG(m_imp.get(), + "increment() on end recursive_directory_iterator"); + m_imp->increment(&ec); + if (m_imp->m_stack.empty()) + m_imp.reset(); // done, so make end iterator + return *this; + } + + int level() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "level() on end recursive_directory_iterator"); + return m_imp->m_level; + } + + bool no_push_pending() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "is_no_push_requested() on end recursive_directory_iterator"); + return (m_imp->m_options & symlink_option::_detail_no_push) + == symlink_option::_detail_no_push; + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + bool no_push_request() const { return no_push_pending(); } +# endif + + void pop() + { + BOOST_ASSERT_MSG(m_imp.get(), + "pop() on end recursive_directory_iterator"); + m_imp->pop(); + if (m_imp->m_stack.empty()) m_imp.reset(); // done, so make end iterator + } + + void no_push(bool value=true) + { + BOOST_ASSERT_MSG(m_imp.get(), + "no_push() on end recursive_directory_iterator"); + if (value) + m_imp->m_options |= symlink_option::_detail_no_push; + else + m_imp->m_options &= ~symlink_option::_detail_no_push; + } + + file_status status() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "status() on end recursive_directory_iterator"); + return m_imp->m_stack.top()->status(); + } + + file_status symlink_status() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "symlink_status() on end recursive_directory_iterator"); + return m_imp->m_stack.top()->symlink_status(); + } + + private: + + // shared_ptr provides shallow-copy semantics required for InputIterators. + // m_imp.get()==0 indicates the end iterator. + boost::shared_ptr< detail::recur_dir_itr_imp > m_imp; + + friend class boost::iterator_core_access; + + boost::iterator_facade< + recursive_directory_iterator, + directory_entry, + boost::single_pass_traversal_tag >::reference + dereference() const + { + BOOST_ASSERT_MSG(m_imp.get(), + "dereference of end recursive_directory_iterator"); + return *m_imp->m_stack.top(); + } + + void increment() + { + BOOST_ASSERT_MSG(m_imp.get(), + "increment of end recursive_directory_iterator"); + m_imp->increment(0); + if (m_imp->m_stack.empty()) + m_imp.reset(); // done, so make end iterator + } + + bool equal(const recursive_directory_iterator& rhs) const + { return m_imp == rhs.m_imp; } + + }; + +# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) + typedef recursive_directory_iterator wrecursive_directory_iterator; +# endif + +//--------------------------------------------------------------------------------------// +// // +// class filesystem_error // +// // +//--------------------------------------------------------------------------------------// + + class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error + { + // see http://www.boost.org/more/error_handling.html for design rationale + + // all functions are inline to avoid issues with crossing dll boundaries + + public: + // compiler generates copy constructor and copy assignment + + filesystem_error( + const std::string & what_arg, system::error_code ec) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset(new m_imp); + } + catch (...) { m_imp_ptr.reset(); } + } + + filesystem_error( + const std::string & what_arg, const path& path1_arg, + system::error_code ec) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset(new m_imp); + m_imp_ptr->m_path1 = path1_arg; + } + catch (...) { m_imp_ptr.reset(); } + } + + filesystem_error( + const std::string & what_arg, const path& path1_arg, + const path& path2_arg, system::error_code ec) + : system::system_error(ec, what_arg) + { + try + { + m_imp_ptr.reset(new m_imp); + m_imp_ptr->m_path1 = path1_arg; + m_imp_ptr->m_path2 = path2_arg; + } + catch (...) { m_imp_ptr.reset(); } + } + + ~filesystem_error() throw() {} + + const path& path1() const + { + static const path empty_path; + return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ; + } + const path& path2() const + { + static const path empty_path; + return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ; + } + + const char* what() const throw() + { + if (!m_imp_ptr.get()) + return system::system_error::what(); + + try + { + if (m_imp_ptr->m_what.empty()) + { + m_imp_ptr->m_what = system::system_error::what(); + if (!m_imp_ptr->m_path1.empty()) + { + m_imp_ptr->m_what += ": \""; + m_imp_ptr->m_what += m_imp_ptr->m_path1.string(); + m_imp_ptr->m_what += "\""; + } + if (!m_imp_ptr->m_path2.empty()) + { + m_imp_ptr->m_what += ", \""; + m_imp_ptr->m_what += m_imp_ptr->m_path2.string(); + m_imp_ptr->m_what += "\""; + } + } + return m_imp_ptr->m_what.c_str(); + } + catch (...) + { + return system::system_error::what(); + } + } + + private: + struct m_imp + { + path m_path1; // may be empty() + path m_path2; // may be empty() + std::string m_what; // not built until needed + }; + boost::shared_ptr m_imp_ptr; + }; + +// test helper -----------------------------------------------------------------------// + +// Not part of the documented interface since false positives are possible; +// there is no law that says that an OS that has large stat.st_size +// actually supports large file sizes. + + namespace detail + { + BOOST_FILESYSTEM_DECL bool possible_large_file_size_support(); + } + + } // namespace filesystem +} // namespace boost + +#include // pops abi_prefix.hpp pragmas +#endif // BOOST_FILESYSTEM3_OPERATIONS_HPP diff --git a/3party/boost/boost/filesystem/path.hpp b/3party/boost/boost/filesystem/path.hpp index 3bed7d2c84..2dd1b00ea5 100644 --- a/3party/boost/boost/filesystem/path.hpp +++ b/3party/boost/boost/filesystem/path.hpp @@ -1,35 +1,758 @@ -// boost/filesystem/path.hpp ---------------------------------------------------------// +// filesystem path.hpp ---------------------------------------------------------------// -// Copyright Beman Dawes 2010 +// Copyright Beman Dawes 2002-2005, 2009 +// Copyright Vladimir Prus 2002 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // Library home page: http://www.boost.org/libs/filesystem -//--------------------------------------------------------------------------------------// +// path::stem(), extension(), and replace_extension() are based on +// basename(), extension(), and change_extension() from the original +// filesystem/convenience.hpp header by Vladimir Prus. -#ifndef BOOST_FILESYSTEM_PATHX_HPP -#define BOOST_FILESYSTEM_PATHX_HPP +#ifndef BOOST_FILESYSTEM_PATH_HPP +#define BOOST_FILESYSTEM_PATH_HPP -#include // for , in case - // BOOST_FILESYSTEM_VERSION defined there +#include -# if defined(BOOST_FILESYSTEM_VERSION) \ - && BOOST_FILESYSTEM_VERSION != 2 && BOOST_FILESYSTEM_VERSION != 3 -# error BOOST_FILESYSTEM_VERSION defined, but not as 2 or 3 +# if defined( BOOST_NO_STD_WSTRING ) +# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support # endif -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 +#include +#include // includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // must be the last #include + +namespace boost +{ +namespace filesystem +{ + //------------------------------------------------------------------------------------// + // // + // class path // + // // + //------------------------------------------------------------------------------------// + + class BOOST_FILESYSTEM_DECL path + { + public: + + // value_type is the character type used by the operating system API to + // represent paths. + +# ifdef BOOST_WINDOWS_API + typedef wchar_t value_type; + BOOST_STATIC_CONSTEXPR value_type preferred_separator = L'\\'; +# else + typedef char value_type; + BOOST_STATIC_CONSTEXPR value_type preferred_separator = '/'; +# endif + typedef std::basic_string string_type; + typedef std::codecvt codecvt_type; + + + // ----- character encoding conversions ----- + + // Following the principle of least astonishment, path input arguments + // passed to or obtained from the operating system via objects of + // class path behave as if they were directly passed to or + // obtained from the O/S API, unless conversion is explicitly requested. + // + // POSIX specfies that path strings are passed unchanged to and from the + // API. Note that this is different from the POSIX command line utilities, + // which convert according to a locale. + // + // Thus for POSIX, char strings do not undergo conversion. wchar_t strings + // are converted to/from char using the path locale or, if a conversion + // argument is given, using a conversion object modeled on + // std::wstring_convert. + // + // The path locale, which is global to the thread, can be changed by the + // imbue() function. It is initialized to an implementation defined locale. + // + // For Windows, wchar_t strings do not undergo conversion. char strings + // are converted using the "ANSI" or "OEM" code pages, as determined by + // the AreFileApisANSI() function, or, if a conversion argument is given, + // using a conversion object modeled on std::wstring_convert. + // + // See m_pathname comments for further important rationale. + + // TODO: rules needed for operating systems that use / or . + // differently, or format directory paths differently from file paths. + // + // ********************************************************************************** + // + // More work needed: How to handle an operating system that may have + // slash characters or dot characters in valid filenames, either because + // it doesn't follow the POSIX standard, or because it allows MBCS + // filename encodings that may contain slash or dot characters. For + // example, ISO/IEC 2022 (JIS) encoding which allows switching to + // JIS x0208-1983 encoding. A valid filename in this set of encodings is + // 0x1B 0x24 0x42 [switch to X0208-1983] 0x24 0x2F [U+304F Kiragana letter KU] + // ^^^^ + // Note that 0x2F is the ASCII slash character + // + // ********************************************************************************** + + // Supported source arguments: half-open iterator range, container, c-array, + // and single pointer to null terminated string. + + // All source arguments except pointers to null terminated byte strings support + // multi-byte character strings which may have embedded nulls. Embedded null + // support is required for some Asian languages on Windows. + + // [defaults] "const codecvt_type& cvt=codecvt()" default arguments are not used + // because some compilers, such as Microsoft prior to VC++ 10, do not handle defaults + // correctly in templates. + + // ----- constructors ----- + + path(){} + + path(const path& p) : m_pathname(p.m_pathname) {} + + template + path(Source const& source, + typename boost::enable_if::type> >::type* =0) + { + path_traits::dispatch(source, m_pathname, codecvt()); + } + + // Overloads for the operating system API's native character type. Rationale: + // - Avoids use of codecvt() for native value_type strings. This limits the + // impact of locale("") initialization failures on POSIX systems to programs + // that actually depend on locale(""). It further ensures that exceptions thrown + // as a result of such failues occur after main() has started, so can be caught. + // This is a partial resolution of tickets 4688, 5100, and 5289. + // - A slight optimization for a common use case, particularly on POSIX since + // value_type is char and that is the most common useage. + path(const value_type* s) : m_pathname(s) {} + path(const std::basic_string& s) : m_pathname(s) {} + + template + path(Source const& source, const codecvt_type& cvt) + // see [defaults] note above explaining why codecvt() default arguments are not used + { + path_traits::dispatch(source, m_pathname, cvt); + } + + template + path(InputIterator begin, InputIterator end) + { + if (begin != end) + { + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, codecvt()); + } + } + + template + path(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + if (begin != end) + { + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + } + } + + // ----- assignments ----- + + path& operator=(const path& p) + { + m_pathname = p.m_pathname; + return *this; + } + + path& operator=(const value_type* ptr) // required in case ptr overlaps *this + { + m_pathname = ptr; + return *this; + } + + template + typename boost::enable_if::type>, path&>::type + operator=(Source const& source) + { + m_pathname.clear(); + path_traits::dispatch(source, m_pathname, codecvt()); + return *this; + } + + path& assign(const value_type* ptr, const codecvt_type&) // required in case ptr overlaps *this + { + m_pathname = ptr; + return *this; + } + + template + path& assign(Source const& source, const codecvt_type& cvt) + { + m_pathname.clear(); + path_traits::dispatch(source, m_pathname, cvt); + return *this; + } + + template + path& assign(InputIterator begin, InputIterator end) + { + return assign(begin, end, codecvt()); + } + + template + path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + m_pathname.clear(); + if (begin != end) + { + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + } + return *this; + } + + // ----- concatenation ----- + + path& operator+=(const path& p) {m_pathname += p.m_pathname; return *this;} + path& operator+=(const string_type& s) {m_pathname += s; return *this;} + path& operator+=(const value_type* ptr) {m_pathname += ptr; return *this;} + path& operator+=(value_type c) {m_pathname += c; return *this;} + + template + typename boost::enable_if::type>, path&>::type + operator+=(Source const& source) + { + return concat(source, codecvt()); + } + + template + typename boost::enable_if, path&>::type + operator+=(CharT c) + { + CharT tmp[2]; + tmp[0] = c; + tmp[1] = 0; + return concat(tmp, codecvt()); + } + + template + path& concat(Source const& source, const codecvt_type& cvt) + { + path_traits::dispatch(source, m_pathname, cvt); + return *this; + } + + template + path& concat(InputIterator begin, InputIterator end) + { + return concat(begin, end, codecvt()); + } + + template + path& concat(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + if (begin == end) + return *this; + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + return *this; + } + + // ----- appends ----- + + // if a separator is added, it is the preferred separator for the platform; + // slash for POSIX, backslash for Windows + + path& operator/=(const path& p); + + path& operator/=(const value_type* ptr); + + template + typename boost::enable_if::type>, path&>::type + operator/=(Source const& source) + { + return append(source, codecvt()); + } + + path& append(const value_type* ptr, const codecvt_type&) // required in case ptr overlaps *this + { + this->operator/=(ptr); + return *this; + } + + template + path& append(Source const& source, const codecvt_type& cvt); + + template + path& append(InputIterator begin, InputIterator end) + { + return append(begin, end, codecvt()); + } + + template + path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt); + + // ----- modifiers ----- + + void clear() { m_pathname.clear(); } + path& make_preferred() +# ifdef BOOST_POSIX_API + { return *this; } // POSIX no effect +# else // BOOST_WINDOWS_API + ; // change slashes to backslashes +# endif + path& remove_filename(); + path& replace_extension(const path& new_extension = path()); + void swap(path& rhs) { m_pathname.swap(rhs.m_pathname); } + + // ----- observers ----- + + // For operating systems that format file paths differently than directory + // paths, return values from observers are formatted as file names unless there + // is a trailing separator, in which case returns are formatted as directory + // paths. POSIX and Windows make no such distinction. + + // Implementations are permitted to return const values or const references. + + // The string or path returned by an observer are specified as being formatted + // as "native" or "generic". + // + // For POSIX, these are all the same format; slashes and backslashes are as input and + // are not modified. + // + // For Windows, native: as input; slashes and backslashes are not modified; + // this is the format of the internally stored string. + // generic: backslashes are converted to slashes + + // ----- native format observers ----- + + const string_type& native() const { return m_pathname; } // Throws: nothing + const value_type* c_str() const { return m_pathname.c_str(); } // Throws: nothing + + template + String string() const; + + template + String string(const codecvt_type& cvt) const; + +# ifdef BOOST_WINDOWS_API + const std::string string() const { return string(codecvt()); } + const std::string string(const codecvt_type& cvt) const + { + std::string tmp; + if (!m_pathname.empty()) + path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(), + tmp, cvt); + return tmp; + } + + // string_type is std::wstring, so there is no conversion + const std::wstring& wstring() const { return m_pathname; } + const std::wstring& wstring(const codecvt_type&) const { return m_pathname; } + +# else // BOOST_POSIX_API + // string_type is std::string, so there is no conversion + const std::string& string() const { return m_pathname; } + const std::string& string(const codecvt_type&) const { return m_pathname; } + + const std::wstring wstring() const { return wstring(codecvt()); } + const std::wstring wstring(const codecvt_type& cvt) const + { + std::wstring tmp; + if (!m_pathname.empty()) + path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(), + tmp, cvt); + return tmp; + } + +# endif + + // ----- generic format observers ----- + + template + String generic_string() const; + + template + String generic_string(const codecvt_type& cvt) const; + +# ifdef BOOST_WINDOWS_API + const std::string generic_string() const { return generic_string(codecvt()); } + const std::string generic_string(const codecvt_type& cvt) const; + const std::wstring generic_wstring() const; + const std::wstring generic_wstring(const codecvt_type&) const { return generic_wstring(); }; + +# else // BOOST_POSIX_API + // On POSIX-like systems, the generic format is the same as the native format + const std::string& generic_string() const { return m_pathname; } + const std::string& generic_string(const codecvt_type&) const { return m_pathname; } + const std::wstring generic_wstring() const { return wstring(codecvt()); } + const std::wstring generic_wstring(const codecvt_type& cvt) const { return wstring(cvt); } + +# endif + + // ----- compare ----- + + int compare(const path& p) const BOOST_NOEXCEPT; // generic, lexicographical + int compare(const std::string& s) const { return compare(path(s)); } + int compare(const value_type* s) const { return compare(path(s)); } + + // ----- decomposition ----- + + path root_path() const; + path root_name() const; // returns 0 or 1 element path + // even on POSIX, root_name() is non-empty() for network paths + path root_directory() const; // returns 0 or 1 element path + path relative_path() const; + path parent_path() const; + path filename() const; // returns 0 or 1 element path + path stem() const; // returns 0 or 1 element path + path extension() const; // returns 0 or 1 element path + + // ----- query ----- + + bool empty() const { return m_pathname.empty(); } // name consistent with std containers + bool has_root_path() const { return has_root_directory() || has_root_name(); } + bool has_root_name() const { return !root_name().empty(); } + bool has_root_directory() const { return !root_directory().empty(); } + bool has_relative_path() const { return !relative_path().empty(); } + bool has_parent_path() const { return !parent_path().empty(); } + bool has_filename() const { return !m_pathname.empty(); } + bool has_stem() const { return !stem().empty(); } + bool has_extension() const { return !extension().empty(); } + bool is_absolute() const + { +# ifdef BOOST_WINDOWS_API + return has_root_name() && has_root_directory(); +# else + return has_root_directory(); +# endif + } + bool is_relative() const { return !is_absolute(); } + + // ----- iterators ----- + + class iterator; + typedef iterator const_iterator; + + iterator begin() const; + iterator end() const; + + // ----- static member functions ----- + + static std::locale imbue(const std::locale& loc); + static const codecvt_type& codecvt(); + + // ----- deprecated functions ----- + +# if defined(BOOST_FILESYSTEM_DEPRECATED) && defined(BOOST_FILESYSTEM_NO_DEPRECATED) +# error both BOOST_FILESYSTEM_DEPRECATED and BOOST_FILESYSTEM_NO_DEPRECATED are defined # endif -#if BOOST_FILESYSTEM_VERSION == 2 -# include - -# else -# include - +# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) + // recently deprecated functions supplied by default + path& normalize() { return m_normalize(); } + path& remove_leaf() { return remove_filename(); } + path leaf() const { return filename(); } + path branch_path() const { return parent_path(); } + bool has_leaf() const { return !m_pathname.empty(); } + bool has_branch_path() const { return !parent_path().empty(); } + bool is_complete() const { return is_absolute(); } # endif -#endif // BOOST_FILESYSTEM_PATHX_HPP +# if defined(BOOST_FILESYSTEM_DEPRECATED) + // deprecated functions with enough signature or semantic changes that they are + // not supplied by default + const std::string file_string() const { return string(); } + const std::string directory_string() const { return string(); } + const std::string native_file_string() const { return string(); } + const std::string native_directory_string() const { return string(); } + const string_type external_file_string() const { return native(); } + const string_type external_directory_string() const { return native(); } + + // older functions no longer supported + //typedef bool (*name_check)(const std::string & name); + //basic_path(const string_type& str, name_check) { operator/=(str); } + //basic_path(const typename string_type::value_type* s, name_check) + // { operator/=(s);} + //static bool default_name_check_writable() { return false; } + //static void default_name_check(name_check) {} + //static name_check default_name_check() { return 0; } + //basic_path& canonize(); +# endif + +//--------------------------------------------------------------------------------------// +// class path private members // +//--------------------------------------------------------------------------------------// + + private: +# if defined(_MSC_VER) +# pragma warning(push) // Save warning settings +# pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>' +# endif // needs to have dll-interface... +/* + m_pathname has the type, encoding, and format required by the native + operating system. Thus for POSIX and Windows there is no conversion for + passing m_pathname.c_str() to the O/S API or when obtaining a path from the + O/S API. POSIX encoding is unspecified other than for dot and slash + characters; POSIX just treats paths as a sequence of bytes. Windows + encoding is UCS-2 or UTF-16 depending on the version. +*/ + string_type m_pathname; // Windows: as input; backslashes NOT converted to slashes, + // slashes NOT converted to backslashes +# if defined(_MSC_VER) +# pragma warning(pop) // restore warning settings. +# endif + + string_type::size_type m_append_separator_if_needed(); + // Returns: If separator is to be appended, m_pathname.size() before append. Otherwise 0. + // Note: An append is never performed if size()==0, so a returned 0 is unambiguous. + + void m_erase_redundant_separator(string_type::size_type sep_pos); + string_type::size_type m_parent_path_end() const; + + path& m_normalize(); + + // Was qualified; como433beta8 reports: + // warning #427-D: qualified name is not allowed in member declaration + friend class iterator; + friend bool operator<(const path& lhs, const path& rhs); + + // see path::iterator::increment/decrement comment below + static void m_path_iterator_increment(path::iterator & it); + static void m_path_iterator_decrement(path::iterator & it); + + }; // class path + + namespace detail + { + BOOST_FILESYSTEM_DECL + int lex_compare(path::iterator first1, path::iterator last1, + path::iterator first2, path::iterator last2); + } + +# ifndef BOOST_FILESYSTEM_NO_DEPRECATED + typedef path wpath; +# endif + + //------------------------------------------------------------------------------------// + // class path::iterator // + //------------------------------------------------------------------------------------// + + class path::iterator + : public boost::iterator_facade< + path::iterator, + path const, + boost::bidirectional_traversal_tag > + { + private: + friend class boost::iterator_core_access; + friend class boost::filesystem::path; + friend void m_path_iterator_increment(path::iterator & it); + friend void m_path_iterator_decrement(path::iterator & it); + + const path& dereference() const { return m_element; } + + bool equal(const iterator & rhs) const + { + return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos; + } + + // iterator_facade derived classes don't seem to like implementations in + // separate translation unit dll's, so forward to class path static members + void increment() { m_path_iterator_increment(*this); } + void decrement() { m_path_iterator_decrement(*this); } + + path m_element; // current element + const path* m_path_ptr; // path being iterated over + string_type::size_type m_pos; // position of m_element in + // m_path_ptr->m_pathname. + // if m_element is implicit dot, m_pos is the + // position of the last separator in the path. + // end() iterator is indicated by + // m_pos == m_path_ptr->m_pathname.size() + }; // path::iterator + + //------------------------------------------------------------------------------------// + // // + // non-member functions // + // // + //------------------------------------------------------------------------------------// + + // std::lexicographical_compare would infinately recurse because path iterators + // yield paths, so provide a path aware version + inline bool lexicographical_compare(path::iterator first1, path::iterator last1, + path::iterator first2, path::iterator last2) + { return detail::lex_compare(first1, last1, first2, last2) < 0; } + + inline bool operator==(const path& lhs, const path& rhs) {return lhs.compare(rhs) == 0;} + inline bool operator==(const path& lhs, const path::string_type& rhs) {return lhs.compare(rhs) == 0;} + inline bool operator==(const path::string_type& lhs, const path& rhs) {return rhs.compare(lhs) == 0;} + inline bool operator==(const path& lhs, const path::value_type* rhs) {return lhs.compare(rhs) == 0;} + inline bool operator==(const path::value_type* lhs, const path& rhs) {return rhs.compare(lhs) == 0;} + + inline bool operator!=(const path& lhs, const path& rhs) {return lhs.compare(rhs) != 0;} + inline bool operator!=(const path& lhs, const path::string_type& rhs) {return lhs.compare(rhs) != 0;} + inline bool operator!=(const path::string_type& lhs, const path& rhs) {return rhs.compare(lhs) != 0;} + inline bool operator!=(const path& lhs, const path::value_type* rhs) {return lhs.compare(rhs) != 0;} + inline bool operator!=(const path::value_type* lhs, const path& rhs) {return rhs.compare(lhs) != 0;} + + // TODO: why do == and != have additional overloads, but the others don't? + + inline bool operator<(const path& lhs, const path& rhs) {return lhs.compare(rhs) < 0;} + inline bool operator<=(const path& lhs, const path& rhs) {return !(rhs < lhs);} + inline bool operator> (const path& lhs, const path& rhs) {return rhs < lhs;} + inline bool operator>=(const path& lhs, const path& rhs) {return !(lhs < rhs);} + + inline std::size_t hash_value(const path& x) + { +# ifdef BOOST_WINDOWS_API + std::size_t seed = 0; + for(const path::value_type* it = x.c_str(); *it; ++it) + hash_combine(seed, *it == '/' ? L'\\' : *it); + return seed; +# else // BOOST_POSIX_API + return hash_range(x.native().begin(), x.native().end()); +# endif + } + + inline void swap(path& lhs, path& rhs) { lhs.swap(rhs); } + + inline path operator/(const path& lhs, const path& rhs) { return path(lhs) /= rhs; } + + // inserters and extractors + // use boost::io::quoted() to handle spaces in paths + // use '&' as escape character to ease use for Windows paths + + template + inline std::basic_ostream& + operator<<(std::basic_ostream& os, const path& p) + { + return os + << boost::io::quoted(p.template string >(), static_cast('&')); + } + + template + inline std::basic_istream& + operator>>(std::basic_istream& is, path& p) + { + std::basic_string str; + is >> boost::io::quoted(str, static_cast('&')); + p = str; + return is; + } + + // name_checks + + // These functions are holdovers from version 1. It isn't clear they have much + // usefulness, or how to generalize them for later versions. + + BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name); + BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name); + BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name); + BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name); + BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name); + BOOST_FILESYSTEM_DECL bool native(const std::string & name); + +//--------------------------------------------------------------------------------------// +// class path member template implementation // +//--------------------------------------------------------------------------------------// + + template + path& path::append(InputIterator begin, InputIterator end, const codecvt_type& cvt) + { + if (begin == end) + return *this; + string_type::size_type sep_pos(m_append_separator_if_needed()); + std::basic_string::value_type> + s(begin, end); + path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); + if (sep_pos) + m_erase_redundant_separator(sep_pos); + return *this; + } + + template + path& path::append(Source const& source, const codecvt_type& cvt) + { + if (path_traits::empty(source)) + return *this; + string_type::size_type sep_pos(m_append_separator_if_needed()); + path_traits::dispatch(source, m_pathname, cvt); + if (sep_pos) + m_erase_redundant_separator(sep_pos); + return *this; + } + +//--------------------------------------------------------------------------------------// +// class path member template specializations // +//--------------------------------------------------------------------------------------// + + template <> inline + std::string path::string() const + { return string(); } + + template <> inline + std::wstring path::string() const + { return wstring(); } + + template <> inline + std::string path::string(const codecvt_type& cvt) const + { return string(cvt); } + + template <> inline + std::wstring path::string(const codecvt_type& cvt) const + { return wstring(cvt); } + + template <> inline + std::string path::generic_string() const + { return generic_string(); } + + template <> inline + std::wstring path::generic_string() const + { return generic_wstring(); } + + template <> inline + std::string path::generic_string(const codecvt_type& cvt) const + { return generic_string(cvt); } + + template <> inline + std::wstring path::generic_string(const codecvt_type& cvt) const + { return generic_wstring(cvt); } + + +} // namespace filesystem +} // namespace boost + +//----------------------------------------------------------------------------// + +#include // pops abi_prefix.hpp pragmas + +#endif // BOOST_FILESYSTEM_PATH_HPP diff --git a/3party/boost/boost/filesystem/v3/path_traits.hpp b/3party/boost/boost/filesystem/path_traits.hpp similarity index 95% rename from 3party/boost/boost/filesystem/v3/path_traits.hpp rename to 3party/boost/boost/filesystem/path_traits.hpp index 71e80e2632..a6a2505574 100644 --- a/3party/boost/boost/filesystem/v3/path_traits.hpp +++ b/3party/boost/boost/filesystem/path_traits.hpp @@ -16,7 +16,7 @@ # error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support # endif -#include +#include #include #include #include @@ -32,7 +32,7 @@ #include // must be the last #include -namespace boost { namespace filesystem3 { +namespace boost { namespace filesystem { BOOST_FILESYSTEM_DECL const system::error_category& codecvt_error_category(); // uses std::codecvt_base::result used for error codes: @@ -85,8 +85,8 @@ namespace path_traits { } template inline - bool empty(T (&)[N]) - { return N <= 1; } + bool empty(T (&x)[N]) + { return !x[0]; } // value types differ ---------------------------------------------------------------// // @@ -164,7 +164,7 @@ namespace path_traits { to += from; } - // Source dispatch + // Source dispatch -----------------------------------------------------------------// // contiguous containers template inline @@ -230,18 +230,6 @@ namespace path_traits { }}} // namespace boost::filesystem::path_traits -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem3::codecvt_error_category; -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED -# endif - } -} - #include // pops abi_prefix.hpp pragmas #endif // BOOST_FILESYSTEM_PATH_TRAITS_HPP diff --git a/3party/boost/boost/filesystem/v2/config.hpp b/3party/boost/boost/filesystem/v2/config.hpp deleted file mode 100644 index 7116de5c5e..0000000000 --- a/3party/boost/boost/filesystem/v2/config.hpp +++ /dev/null @@ -1,106 +0,0 @@ -// boost/filesystem/v2/config.hpp ------------------------------------------// - -// Copyright Beman Dawes 2003 - -// 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) - -// See library home page at http://www.boost.org/libs/filesystem - -//----------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM2_CONFIG_HPP -#define BOOST_FILESYSTEM2_CONFIG_HPP - -# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 2 -# error Compiling Filesystem version 2 file with BOOST_FILESYSTEM_VERSION defined != 2 -# endif - -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 2 -# endif - -#define BOOST_FILESYSTEM_I18N // aid users wishing to compile several versions - -// ability to change namespace aids path_table.cpp ------------------------// -#ifndef BOOST_FILESYSTEM2_NAMESPACE -# define BOOST_FILESYSTEM2_NAMESPACE filesystem2 -#endif - -#include -#include // for BOOST_POSIX_API or BOOST_WINDOWS_API -#include - -// BOOST_POSIX_PATH or BOOST_WINDOWS_PATH specify which path syntax to recognise - -# if defined(BOOST_WINDOWS_API) && defined(BOOST_POSIX_PATH) -# error builds with Windows API do not support BOOST_POSIX_PATH -# endif - -# if !defined(_WIN32) && !defined(__CYGWIN__) && defined(BOOST_WINDOWS_PATH) -# error builds on non-Windows platforms do not support BOOST_WINDOWS_PATH -# endif - -# if defined(BOOST_WINDOWS_PATH) && defined(BOOST_POSIX_PATH) -# error both BOOST_WINDOWS_PATH and BOOST_POSIX_PATH are defined -# elif !defined(BOOST_WINDOWS_PATH) && !defined(BOOST_POSIX_PATH) -# if !defined(BOOST_POSIX_PATH) && (defined(_WIN32) || defined(__CYGWIN__)) -# define BOOST_WINDOWS_PATH -# else -# define BOOST_POSIX_PATH -# endif -# endif - -// throw an exception ----------------------------------------------------------------// -// -// Exceptions were originally thrown via boost::throw_exception(). -// As throw_exception() became more complex, it caused user error reporting -// to be harder to interpret, since the exception reported became much more complex. -// The immediate fix was to throw directly, wrapped in a macro to make any later change -// easier. - -#define BOOST_FILESYSTEM_THROW(EX) throw EX - -// narrow support only for badly broken compilers or libraries -------------// - -# if defined(BOOST_NO_STD_WSTRING) || defined(BOOST_NO_SFINAE) || defined(BOOST_NO_STD_LOCALE) || BOOST_WORKAROUND(__BORLANDC__, <0x610) -# define BOOST_FILESYSTEM2_NARROW_ONLY -# endif - -// This header implements separate compilation features as described in -// http://www.boost.org/more/separate_compilation.html - -// enable dynamic linking ---------------------------------------------------// - -#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) -# if defined(BOOST_FILESYSTEM_SOURCE) -# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT -# else -# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT -# endif -#else -# define BOOST_FILESYSTEM_DECL -#endif - -// enable automatic library variant selection ------------------------------// - -#if !defined(BOOST_FILESYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) \ - && !defined(BOOST_FILESYSTEM_NO_LIB) -// -// Set the name of our library, this will get undef'ed by auto_link.hpp -// once it's done with it: -// -#define BOOST_LIB_NAME boost_filesystem -// -// If we're importing code from a dll, then tell auto_link.hpp about it: -// -#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) -# define BOOST_DYN_LINK -#endif -// -// And include the header that does the work: -// -#include -#endif // auto-linking disabled - -#endif // BOOST_FILESYSTEM2_CONFIG_HPP diff --git a/3party/boost/boost/filesystem/v2/convenience.hpp b/3party/boost/boost/filesystem/v2/convenience.hpp deleted file mode 100644 index 30b6adee7d..0000000000 --- a/3party/boost/boost/filesystem/v2/convenience.hpp +++ /dev/null @@ -1,339 +0,0 @@ -// boost/filesystem/convenience.hpp ----------------------------------------// - -// Copyright Beman Dawes, 2002-2005 -// Copyright Vladimir Prus, 2002 -// Use, modification, and distribution is subject to 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) - -// See library home page at http://www.boost.org/libs/filesystem - -//----------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM2_CONVENIENCE_HPP -#define BOOST_FILESYSTEM2_CONVENIENCE_HPP - -#include -#include -#include -#include -#include - -#include // must be the last #include - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY -# define BOOST_FS_FUNC(BOOST_FS_TYPE) \ - template typename boost::enable_if, \ - BOOST_FS_TYPE>::type -# define BOOST_FS_FUNC_STRING BOOST_FS_FUNC(typename Path::string_type) -# define BOOST_FS_TYPENAME typename -# else -# define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE - typedef boost::filesystem::path Path; -# define BOOST_FS_FUNC_STRING inline std::string -# define BOOST_FS_TYPENAME -# endif - -namespace boost -{ - namespace filesystem2 - { - - BOOST_FS_FUNC(bool) create_directories(const Path& ph) - { - if (ph.empty() || exists(ph)) - { - if ( !ph.empty() && !is_directory(ph) ) - boost::throw_exception( basic_filesystem_error( - "boost::filesystem::create_directories", ph, - make_error_code( boost::system::errc::file_exists ) ) ); - return false; - } - - // First create branch, by calling ourself recursively - create_directories(ph.parent_path()); - // Now that parent's path exists, create the directory - create_directory(ph); - return true; - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - - BOOST_FS_FUNC_STRING extension(const Path& ph) - { - typedef BOOST_FS_TYPENAME Path::string_type string_type; - string_type filename = ph.filename(); - - BOOST_FS_TYPENAME string_type::size_type n = filename.rfind('.'); - if (n != string_type::npos) - return filename.substr(n); - else - return string_type(); - } - - BOOST_FS_FUNC_STRING basename(const Path& ph) - { - typedef BOOST_FS_TYPENAME Path::string_type string_type; - string_type filename = ph.filename(); - BOOST_FS_TYPENAME string_type::size_type n = filename.rfind('.'); - return filename.substr(0, n); - } - - - BOOST_FS_FUNC(Path) change_extension( const Path & ph, - const BOOST_FS_TYPENAME Path::string_type & new_extension ) - { -# if !defined(_STLPORT_VERSION) - return ph.parent_path() / (basename(ph) + new_extension); -# else - typedef BOOST_FS_TYPENAME Path::string_type string_type; - string_type filename = basename(ph) + new_extension; - return ph.parent_path() / filename; -# endif - } -# endif - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - // "do-the-right-thing" overloads ---------------------------------------// - - inline bool create_directories(const path& ph) - { return create_directories(ph); } - inline bool create_directories(const wpath& ph) - { return create_directories(ph); } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline std::string extension(const path& ph) - { return extension(ph); } - inline std::wstring extension(const wpath& ph) - { return extension(ph); } - - inline std::string basename(const path& ph) - { return basename( ph ); } - inline std::wstring basename(const wpath& ph) - { return basename( ph ); } - - inline path change_extension( const path & ph, const std::string& new_ex ) - { return change_extension( ph, new_ex ); } - inline wpath change_extension( const wpath & ph, const std::wstring& new_ex ) - { return change_extension( ph, new_ex ); } -# endif - -# endif - - - // basic_recursive_directory_iterator helpers --------------------------// - - namespace detail - { - template< class Path > - struct recur_dir_itr_imp - { - typedef basic_directory_iterator< Path > element_type; - std::stack< element_type, std::vector< element_type > > m_stack; - int m_level; - bool m_no_push; - bool m_no_throw; - - recur_dir_itr_imp() : m_level(0), m_no_push(false), m_no_throw(false) {} - }; - - } // namespace detail - - // basic_recursive_directory_iterator ----------------------------------// - - template< class Path > - class basic_recursive_directory_iterator - : public boost::iterator_facade< - basic_recursive_directory_iterator, - basic_directory_entry, - boost::single_pass_traversal_tag > - { - public: - typedef Path path_type; - - basic_recursive_directory_iterator(){} // creates the "end" iterator - - explicit basic_recursive_directory_iterator( const Path & dir_path ); - basic_recursive_directory_iterator( const Path & dir_path, - system::error_code & ec ); - - int level() const { return m_imp->m_level; } - - void pop(); - void no_push() - { - BOOST_ASSERT( m_imp.get() && "attempt to no_push() on end iterator" ); - m_imp->m_no_push = true; - } - - file_status status() const - { - BOOST_ASSERT( m_imp.get() - && "attempt to call status() on end recursive_iterator" ); - return m_imp->m_stack.top()->status(); - } - - file_status symlink_status() const - { - BOOST_ASSERT( m_imp.get() - && "attempt to call symlink_status() on end recursive_iterator" ); - return m_imp->m_stack.top()->symlink_status(); - } - - private: - - // shared_ptr provides shallow-copy semantics required for InputIterators. - // m_imp.get()==0 indicates the end iterator. - boost::shared_ptr< detail::recur_dir_itr_imp< Path > > m_imp; - - friend class boost::iterator_core_access; - - typename boost::iterator_facade< - basic_recursive_directory_iterator, - basic_directory_entry, - boost::single_pass_traversal_tag >::reference - dereference() const - { - BOOST_ASSERT( m_imp.get() && "attempt to dereference end iterator" ); - return *m_imp->m_stack.top(); - } - - void increment(); - - bool equal( const basic_recursive_directory_iterator & rhs ) const - { return m_imp == rhs.m_imp; } - - }; - - typedef basic_recursive_directory_iterator recursive_directory_iterator; -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - typedef basic_recursive_directory_iterator wrecursive_directory_iterator; -# endif - - // basic_recursive_directory_iterator implementation -------------------// - - // constructors - template - basic_recursive_directory_iterator:: - basic_recursive_directory_iterator( const Path & dir_path ) - : m_imp( new detail::recur_dir_itr_imp ) - { - m_imp->m_stack.push( basic_directory_iterator( dir_path ) ); - if ( m_imp->m_stack.top () == basic_directory_iterator() ) - { m_imp.reset (); } - } - - template - basic_recursive_directory_iterator:: - basic_recursive_directory_iterator( const Path & dir_path, - system::error_code & ec ) - : m_imp( new detail::recur_dir_itr_imp ) - { - m_imp->m_no_throw = true; - m_imp->m_stack.push( basic_directory_iterator( dir_path, ec ) ); - if ( m_imp->m_stack.top () == basic_directory_iterator() ) - { m_imp.reset (); } - } - - // increment - template - void basic_recursive_directory_iterator::increment() - { - BOOST_ASSERT( m_imp.get() && "increment on end iterator" ); - - static const basic_directory_iterator end_itr; - - if ( m_imp->m_no_push ) - { m_imp->m_no_push = false; } - else if ( is_directory( m_imp->m_stack.top()->status() ) ) - { - system::error_code ec; -#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610)) - if( m_imp->m_no_throw ) { - m_imp->m_stack.push( - basic_directory_iterator( *m_imp->m_stack.top(), ec ) - ); - } - else { - m_imp->m_stack.push( - basic_directory_iterator( *m_imp->m_stack.top() ) - ); - } -#else - m_imp->m_stack.push( - m_imp->m_no_throw - ? basic_directory_iterator( *m_imp->m_stack.top(), ec ) - : basic_directory_iterator( *m_imp->m_stack.top() ) ); -#endif - if ( m_imp->m_stack.top() != end_itr ) - { - ++m_imp->m_level; - return; - } - m_imp->m_stack.pop(); - } - - while ( !m_imp->m_stack.empty() - && ++m_imp->m_stack.top() == end_itr ) - { - m_imp->m_stack.pop(); - --m_imp->m_level; - } - - if ( m_imp->m_stack.empty() ) m_imp.reset(); // done, so make end iterator - } - - // pop - template - void basic_recursive_directory_iterator::pop() - { - BOOST_ASSERT( m_imp.get() && "pop on end iterator" ); - BOOST_ASSERT( m_imp->m_level > 0 && "pop with level < 1" ); - - static const basic_directory_iterator end_itr; - - do - { - m_imp->m_stack.pop(); - --m_imp->m_level; - } - while ( !m_imp->m_stack.empty() - && ++m_imp->m_stack.top() == end_itr ); - - if ( m_imp->m_stack.empty() ) m_imp.reset(); // done, so make end iterator - } - - } // namespace filesystem2 -} // namespace boost - -#undef BOOST_FS_FUNC_STRING -#undef BOOST_FS_FUNC - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem2::create_directories; - using filesystem2::basic_recursive_directory_iterator; - using filesystem2::recursive_directory_iterator; - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - using filesystem2::extension; - using filesystem2::basename; - using filesystem2::change_extension; -# endif - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - using filesystem2::wrecursive_directory_iterator; -# endif - - } -} - -//----------------------------------------------------------------------------// - -#include // pops abi_prefix.hpp pragmas -#endif // BOOST_FILESYSTEM2_CONVENIENCE_HPP diff --git a/3party/boost/boost/filesystem/v2/exception.hpp b/3party/boost/boost/filesystem/v2/exception.hpp deleted file mode 100644 index edea663b1f..0000000000 --- a/3party/boost/boost/filesystem/v2/exception.hpp +++ /dev/null @@ -1,9 +0,0 @@ -// boost/filesystem/exception.hpp -------------------------------------------// - -// Copyright Beman Dawes 2003 -// Use, modification, and distribution is subject to 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) - -// This header is no long used. The contents have been moved to path.hpp. -// It is provided so that user code #includes do not have to be changed. diff --git a/3party/boost/boost/filesystem/v2/fstream.hpp b/3party/boost/boost/filesystem/v2/fstream.hpp deleted file mode 100644 index 887d59d3ab..0000000000 --- a/3party/boost/boost/filesystem/v2/fstream.hpp +++ /dev/null @@ -1,613 +0,0 @@ -// boost/filesystem/fstream.hpp --------------------------------------------// - -// Copyright Beman Dawes 2002. -// Use, modification, and distribution is subject to 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) - -// See library home page at http://www.boost.org/libs/filesystem - -//----------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM2_FSTREAM_HPP -#define BOOST_FILESYSTEM2_FSTREAM_HPP - -#include -#include // for 8.3 hack (see below) -#include -#include - -#include -#include - -#include // must be the last #include - -// NOTE: fstream.hpp for Boost 1.32.0 and earlier supplied workarounds for -// various compiler problems. They have been removed to ease development of the -// basic i18n functionality. Once the new interface is stable, the workarounds -// will be reinstated for any compilers that otherwise can support the rest of -// the library after internationalization. - -namespace boost -{ - namespace filesystem2 - { - namespace detail - { -# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM2_NARROW_ONLY) -# if !defined(BOOST_DINKUMWARE_STDLIB) || BOOST_DINKUMWARE_STDLIB < 405 - // The 8.3 hack: - // C++98 does not supply a wchar_t open, so try to get an equivalent - // narrow char name based on the short, so-called 8.3, name. - // Not needed for Dinkumware 405 and later as they do supply wchar_t open. - BOOST_FILESYSTEM_DECL bool create_file_api( const std::wstring & ph, - std::ios_base::openmode mode ); // true if succeeds - BOOST_FILESYSTEM_DECL std::string narrow_path_api( - const std::wstring & ph ); // return is empty if fails - - inline std::string path_proxy( const std::wstring & file_ph, - std::ios_base::openmode mode ) - // Return a non-existant path if cannot supply narrow short path. - // An empty path doesn't work because some Dinkumware versions - // assert the path is non-empty. - { - std::string narrow_ph; - bool created_file( false ); - if ( !exists( file_ph ) - && (mode & std::ios_base::out) != 0 - && create_file_api( file_ph, mode ) ) - { - created_file = true; - } - narrow_ph = narrow_path_api( file_ph ); - if ( narrow_ph.empty() ) - { - if ( created_file ) remove_api( file_ph ); - narrow_ph = "\x01"; - } - return narrow_ph; - } -# else - // Dinkumware 405 and later does supply wchar_t functions - inline const std::wstring & path_proxy( const std::wstring & file_ph, - std::ios_base::openmode ) - { return file_ph; } -# endif -# endif - - inline const std::string & path_proxy( const std::string & file_ph, - std::ios_base::openmode ) - { return file_ph; } - - } // namespace detail - - template < class charT, class traits = std::char_traits > - class basic_filebuf : public std::basic_filebuf - { - private: // disallow copying - basic_filebuf( const basic_filebuf & ); - const basic_filebuf & operator=( const basic_filebuf & ); - public: - basic_filebuf() {} - virtual ~basic_filebuf() {} - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - template - typename boost::enable_if, - basic_filebuf *>::type - open( const Path & file_ph, std::ios_base::openmode mode ); - - basic_filebuf * - open( const wpath & file_ph, std::ios_base::openmode mode ); -# endif - -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - basic_filebuf * - open( const path & file_ph, std::ios_base::openmode mode ); -# endif - }; - - template < class charT, class traits = std::char_traits > - class basic_ifstream : public std::basic_ifstream - { - private: // disallow copying - basic_ifstream( const basic_ifstream & ); - const basic_ifstream & operator=( const basic_ifstream & ); - public: - basic_ifstream() {} - - // use two signatures, rather than one signature with default second - // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - template - explicit basic_ifstream( const Path & file_ph, - typename boost::enable_if >::type* dummy = 0 ); - - template - basic_ifstream( const Path & file_ph, std::ios_base::openmode mode, - typename boost::enable_if >::type* dummy = 0 ); - - template - typename boost::enable_if, void>::type - open( const Path & file_ph ); - - template - typename boost::enable_if, void>::type - open( const Path & file_ph, std::ios_base::openmode mode ); - - explicit basic_ifstream( const wpath & file_ph ); - basic_ifstream( const wpath & file_ph, std::ios_base::openmode mode ); - void open( const wpath & file_ph ); - void open( const wpath & file_ph, std::ios_base::openmode mode ); -# endif - - explicit basic_ifstream( const path & file_ph ); - basic_ifstream( const path & file_ph, std::ios_base::openmode mode ); -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - void open( const path & file_ph ); - void open( const path & file_ph, std::ios_base::openmode mode ); -# endif - virtual ~basic_ifstream() {} - }; - - template < class charT, class traits = std::char_traits > - class basic_ofstream : public std::basic_ofstream - { - private: // disallow copying - basic_ofstream( const basic_ofstream & ); - const basic_ofstream & operator=( const basic_ofstream & ); - public: - basic_ofstream() {} - - // use two signatures, rather than one signature with default second - // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - template - explicit basic_ofstream( const Path & file_ph, - typename boost::enable_if >::type* dummy = 0 ); - explicit basic_ofstream( const wpath & file_ph ); - - template - basic_ofstream( const Path & file_ph, std::ios_base::openmode mode, - typename boost::enable_if >::type* dummy = 0 ); - basic_ofstream( const wpath & file_ph, std::ios_base::openmode mode ); - - template - typename boost::enable_if, void>::type - open( const Path & file_ph ); - void open( const wpath & file_ph ); - - template - typename boost::enable_if, void>::type - open( const Path & file_ph, std::ios_base::openmode mode ); - void open( const wpath & file_ph, std::ios_base::openmode mode ); - -# endif - - explicit basic_ofstream( const path & file_ph ); - basic_ofstream( const path & file_ph, std::ios_base::openmode mode ); -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - void open( const path & file_ph ); - void open( const path & file_ph, std::ios_base::openmode mode ); -# endif - virtual ~basic_ofstream() {} - }; - - template < class charT, class traits = std::char_traits > - class basic_fstream : public std::basic_fstream - { - private: // disallow copying - basic_fstream( const basic_fstream & ); - const basic_fstream & operator=( const basic_fstream & ); - public: - basic_fstream() {} - - // use two signatures, rather than one signature with default second - // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - template - explicit basic_fstream( const Path & file_ph, - typename boost::enable_if >::type* dummy = 0 ); - explicit basic_fstream( const wpath & file_ph ); - - template - basic_fstream( const Path & file_ph, std::ios_base::openmode mode, - typename boost::enable_if >::type* dummy = 0 ); - basic_fstream( const wpath & file_ph, std::ios_base::openmode mode ); - - template - typename boost::enable_if, void>::type - open( const Path & file_ph ); - void open( const wpath & file_ph ); - - template - typename boost::enable_if, void>::type - open( const Path & file_ph, std::ios_base::openmode mode ); - void open( const wpath & file_ph, std::ios_base::openmode mode ); - -# endif - - explicit basic_fstream( const path & file_ph ); - basic_fstream( const path & file_ph, std::ios_base::openmode mode ); -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - void open( const path & file_ph ); - void open( const path & file_ph, std::ios_base::openmode mode ); -# endif - virtual ~basic_fstream() {} - - }; - - typedef basic_filebuf filebuf; - typedef basic_ifstream ifstream; - typedef basic_ofstream ofstream; - typedef basic_fstream fstream; - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - typedef basic_filebuf wfilebuf; - typedef basic_ifstream wifstream; - typedef basic_fstream wfstream; - typedef basic_ofstream wofstream; -# endif - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - -// basic_filebuf definitions -----------------------------------------------// - - template - template - typename boost::enable_if, - basic_filebuf *>::type - basic_filebuf::open( const Path & file_ph, - std::ios_base::openmode mode ) - { - return (std::basic_filebuf::open( detail::path_proxy( - file_ph.external_file_string(), mode ).c_str(), mode ) - == 0) ? 0 : this; - } - - template - basic_filebuf * - basic_filebuf::open( const wpath & file_ph, - std::ios_base::openmode mode ) - { - return this->BOOST_NESTED_TEMPLATE open( file_ph, mode ); - } - -// basic_ifstream definitions ----------------------------------------------// - - template template - basic_ifstream::basic_ifstream(const Path & file_ph, - typename boost::enable_if >::type* ) - : std::basic_ifstream( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in ).c_str(), std::ios_base::in ) {} - - template - basic_ifstream::basic_ifstream( const wpath & file_ph ) - : std::basic_ifstream( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in ).c_str(), std::ios_base::in ) {} - - template template - basic_ifstream::basic_ifstream( const Path & file_ph, - std::ios_base::openmode mode, - typename boost::enable_if >::type* ) - : std::basic_ifstream( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ) {} - - template - basic_ifstream::basic_ifstream( const wpath & file_ph, - std::ios_base::openmode mode ) - : std::basic_ifstream( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ) {} - - template template - typename boost::enable_if, void>::type - basic_ifstream::open( const Path & file_ph ) - { - std::basic_ifstream::open( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in ).c_str(), std::ios_base::in ); - } - - template - void basic_ifstream::open( const wpath & file_ph ) - { - std::basic_ifstream::open( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in ).c_str(), std::ios_base::in ); - } - - template template - typename boost::enable_if, void>::type - basic_ifstream::open( const Path & file_ph, - std::ios_base::openmode mode ) - { - std::basic_ifstream::open( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ); - } - - template - void basic_ifstream::open( const wpath & file_ph, - std::ios_base::openmode mode ) - { - std::basic_ifstream::open( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ); - } - -// basic_ofstream definitions ----------------------------------------------// - - template template - basic_ofstream::basic_ofstream(const Path & file_ph, - typename boost::enable_if >::type* ) - : std::basic_ofstream( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::out ).c_str(), std::ios_base::out ) {} - - template - basic_ofstream::basic_ofstream( const wpath & file_ph ) - : std::basic_ofstream( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::out ).c_str(), std::ios_base::out ) {} - - template template - basic_ofstream::basic_ofstream( const Path & file_ph, - std::ios_base::openmode mode, - typename boost::enable_if >::type* ) - : std::basic_ofstream( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ) {} - - template - basic_ofstream::basic_ofstream( const wpath & file_ph, - std::ios_base::openmode mode ) - : std::basic_ofstream( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ) {} - - template template - typename boost::enable_if, void>::type - basic_ofstream::open( const Path & file_ph ) - { - std::basic_ofstream::open( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::out ).c_str(), std::ios_base::out ); - } - - template - void basic_ofstream::open( const wpath & file_ph ) - { - std::basic_ofstream::open( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::out ).c_str(), std::ios_base::out ); - } - - template template - typename boost::enable_if, void>::type - basic_ofstream::open( const Path & file_ph, - std::ios_base::openmode mode ) - { - std::basic_ofstream::open( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ); - } - - template - void basic_ofstream::open( const wpath & file_ph, - std::ios_base::openmode mode ) - { - std::basic_ofstream::open( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ); - } - -// basic_fstream definitions -----------------------------------------------// - - template template - basic_fstream::basic_fstream(const Path & file_ph, - typename boost::enable_if >::type* ) - : std::basic_fstream( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in|std::ios_base::out ).c_str(), - std::ios_base::in|std::ios_base::out ) {} - - template - basic_fstream::basic_fstream( const wpath & file_ph ) - : std::basic_fstream( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in|std::ios_base::out ).c_str(), - std::ios_base::in|std::ios_base::out ) {} - - template template - basic_fstream::basic_fstream( const Path & file_ph, - std::ios_base::openmode mode, - typename boost::enable_if >::type* ) - : std::basic_fstream( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ) {} - - template - basic_fstream::basic_fstream( const wpath & file_ph, - std::ios_base::openmode mode ) - : std::basic_fstream( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ) {} - - template template - typename boost::enable_if, void>::type - basic_fstream::open( const Path & file_ph ) - { - std::basic_fstream::open( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in|std::ios_base::out ).c_str(), - std::ios_base::in|std::ios_base::out ); - } - - template - void basic_fstream::open( const wpath & file_ph ) - { - std::basic_fstream::open( - detail::path_proxy( file_ph.external_file_string(), - std::ios_base::in|std::ios_base::out ).c_str(), - std::ios_base::in|std::ios_base::out ); - } - - template template - typename boost::enable_if, void>::type - basic_fstream::open( const Path & file_ph, - std::ios_base::openmode mode ) - { - std::basic_fstream::open( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ); - } - - template - void basic_fstream::open( const wpath & file_ph, - std::ios_base::openmode mode ) - { - std::basic_fstream::open( - detail::path_proxy( file_ph.external_file_string(), - mode ).c_str(), mode ); - } - -# endif - -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - template - basic_filebuf * - basic_filebuf::open( const path & file_ph, - std::ios_base::openmode mode ) - { - return std::basic_filebuf::open( - file_ph.file_string().c_str(), mode ) == 0 ? 0 : this; - } -# endif - - template - basic_ifstream::basic_ifstream( const path & file_ph ) - : std::basic_ifstream( - file_ph.file_string().c_str(), std::ios_base::in ) {} - - template - basic_ifstream::basic_ifstream( const path & file_ph, - std::ios_base::openmode mode ) - : std::basic_ifstream( - file_ph.file_string().c_str(), mode ) {} - -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - template - void basic_ifstream::open( const path & file_ph ) - { - std::basic_ifstream::open( - file_ph.file_string().c_str(), std::ios_base::in ); - } - - template - void basic_ifstream::open( const path & file_ph, - std::ios_base::openmode mode ) - { - std::basic_ifstream::open( - file_ph.file_string().c_str(), mode ); - } -# endif - - template - basic_ofstream::basic_ofstream( const path & file_ph ) - : std::basic_ofstream( - file_ph.file_string().c_str(), std::ios_base::out ) {} - - template - basic_ofstream::basic_ofstream( const path & file_ph, - std::ios_base::openmode mode ) - : std::basic_ofstream( - file_ph.file_string().c_str(), mode ) {} - -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - template - void basic_ofstream::open( const path & file_ph ) - { - std::basic_ofstream::open( - file_ph.file_string().c_str(), std::ios_base::out ); - } - - template - void basic_ofstream::open( const path & file_ph, - std::ios_base::openmode mode ) - { - std::basic_ofstream::open( - file_ph.file_string().c_str(), mode ); - } -# endif - - template - basic_fstream::basic_fstream( const path & file_ph ) - : std::basic_fstream( - file_ph.file_string().c_str(), - std::ios_base::in|std::ios_base::out ) {} - - - template - basic_fstream::basic_fstream( const path & file_ph, - std::ios_base::openmode mode ) - : std::basic_fstream( - file_ph.file_string().c_str(), mode ) {} - -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1200 ) // VC++ 6.0 can't handle this - template - void basic_fstream::open( const path & file_ph ) - { - std::basic_fstream::open( - file_ph.file_string().c_str(), std::ios_base::in|std::ios_base::out ); - } - - template - void basic_fstream::open( const path & file_ph, - std::ios_base::openmode mode ) - { - std::basic_fstream::open( - file_ph.file_string().c_str(), mode ); - } -# endif - } // namespace filesystem2 -} // namespace boost - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - using filesystem2::wfilebuf; - using filesystem2::wifstream; - using filesystem2::wfstream; - using filesystem2::wofstream; -# endif - using filesystem2::filebuf; - using filesystem2::ifstream; - using filesystem2::ofstream; - using filesystem2::fstream; - using filesystem2::basic_filebuf; - using filesystem2::basic_ifstream; - using filesystem2::basic_ofstream; - using filesystem2::basic_fstream; - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED -# endif - } -} - -//----------------------------------------------------------------------------// - -#include // pops abi_prefix.hpp pragmas -#endif // BOOST_FILESYSTEM2_FSTREAM_HPP diff --git a/3party/boost/boost/filesystem/v2/operations.hpp b/3party/boost/boost/filesystem/v2/operations.hpp deleted file mode 100644 index 57c406daac..0000000000 --- a/3party/boost/boost/filesystem/v2/operations.hpp +++ /dev/null @@ -1,1245 +0,0 @@ -// boost/filesystem/operations.hpp -----------------------------------------// - -// Copyright 2002-2005 Beman Dawes -// Copyright 2002 Jan Langer -// Copyright 2001 Dietmar Kuehl -// -// 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) - -// See library home page at http://www.boost.org/libs/filesystem - -//----------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM2_OPERATIONS_HPP -#define BOOST_FILESYSTEM2_OPERATIONS_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include // for pair -#include - -#ifdef BOOST_WINDOWS_API -# include -# if !defined(_WIN32_WINNT) || _WIN32_WINNT >= 0x0500 -# define BOOST_FS_HARD_LINK // Default for Windows 2K or later -# endif -#endif - -#include // must be the last #include - -# ifdef BOOST_NO_STDC_NAMESPACE - namespace std { using ::time_t; } -# endif - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem2 - { - -// typedef boost::filesystem::path Path; needs to be in namespace boost::filesystem -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY -# define BOOST_FS_FUNC(BOOST_FS_TYPE) \ - template typename boost::enable_if, \ - BOOST_FS_TYPE>::type -# define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) \ - template inline typename boost::enable_if, \ - BOOST_FS_TYPE>::type -# define BOOST_FS_TYPENAME typename -# else -# define BOOST_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE -# define BOOST_INLINE_FS_FUNC(BOOST_FS_TYPE) inline BOOST_FS_TYPE - typedef boost::filesystem2::path Path; -# define BOOST_FS_TYPENAME -# endif - - template class basic_directory_iterator; - - // BOOST_FILESYSTEM2_NARROW_ONLY needs this: - typedef basic_directory_iterator directory_iterator; - - template class basic_directory_entry; - - enum file_type - { - status_unknown, - file_not_found, - regular_file, - directory_file, - // the following will never be reported by some operating or file systems - symlink_file, - block_file, - character_file, - fifo_file, - socket_file, - type_unknown // file does exist, but isn't one of the above types or - // we don't have strong enough permission to find its type - }; - - class file_status - { - public: - explicit file_status( file_type v = status_unknown ) : m_value(v) {} - - void type( file_type v ) { m_value = v; } - file_type type() const { return m_value; } - - private: - // the internal representation is unspecified so that additional state - // information such as permissions can be added in the future; this - // implementation just uses status_type as the internal representation - - file_type m_value; - }; - - inline bool status_known( file_status f ) { return f.type() != status_unknown; } - inline bool exists( file_status f ) { return f.type() != status_unknown && f.type() != file_not_found; } - inline bool is_regular_file(file_status f){ return f.type() == regular_file; } - inline bool is_directory( file_status f ) { return f.type() == directory_file; } - inline bool is_symlink( file_status f ) { return f.type() == symlink_file; } - inline bool is_other( file_status f ) { return exists(f) && !is_regular_file(f) && !is_directory(f) && !is_symlink(f); } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline bool is_regular( file_status f ) { return f.type() == regular_file; } -# endif - - struct space_info - { - // all values are byte counts - boost::uintmax_t capacity; - boost::uintmax_t free; // <= capacity - boost::uintmax_t available; // <= free - }; - - namespace detail - { - typedef std::pair< system::error_code, bool > - query_pair; - - typedef std::pair< system::error_code, boost::uintmax_t > - uintmax_pair; - - typedef std::pair< system::error_code, std::time_t > - time_pair; - - typedef std::pair< system::error_code, space_info > - space_pair; - - template< class Path > - struct directory_pair - { - typedef std::pair< system::error_code, - typename Path::external_string_type > type; - }; - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - BOOST_FILESYSTEM_DECL bool - symbolic_link_exists_api( const std::string & ); // deprecated -# endif - - BOOST_FILESYSTEM_DECL file_status - status_api( const std::string & ph, system::error_code & ec ); -# ifndef BOOST_WINDOWS_API - BOOST_FILESYSTEM_DECL file_status - symlink_status_api( const std::string & ph, system::error_code & ec ); -# endif - BOOST_FILESYSTEM_DECL query_pair - is_empty_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL query_pair - equivalent_api( const std::string & ph1, const std::string & ph2 ); - BOOST_FILESYSTEM_DECL uintmax_pair - file_size_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL space_pair - space_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL time_pair - last_write_time_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL system::error_code - last_write_time_api( const std::string & ph, std::time_t new_value ); - BOOST_FILESYSTEM_DECL system::error_code - get_current_path_api( std::string & ph ); - BOOST_FILESYSTEM_DECL system::error_code - set_current_path_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL query_pair - create_directory_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL system::error_code - create_hard_link_api( const std::string & to_ph, - const std::string & from_ph ); - BOOST_FILESYSTEM_DECL system::error_code - create_symlink_api( const std::string & to_ph, - const std::string & from_ph ); - BOOST_FILESYSTEM_DECL system::error_code - remove_api( const std::string & ph ); - BOOST_FILESYSTEM_DECL system::error_code - rename_api( const std::string & from, const std::string & to ); - BOOST_FILESYSTEM_DECL system::error_code - copy_file_api( const std::string & from, const std::string & to, bool fail_if_exists ); - -# if defined(BOOST_WINDOWS_API) - - BOOST_FILESYSTEM_DECL system::error_code - get_full_path_name_api( const std::string & ph, std::string & target ); - -# if !defined(BOOST_FILESYSTEM2_NARROW_ONLY) - - BOOST_FILESYSTEM_DECL boost::filesystem2::file_status - status_api( const std::wstring & ph, system::error_code & ec ); - BOOST_FILESYSTEM_DECL query_pair - is_empty_api( const std::wstring & ph ); - BOOST_FILESYSTEM_DECL query_pair - equivalent_api( const std::wstring & ph1, const std::wstring & ph2 ); - BOOST_FILESYSTEM_DECL uintmax_pair - file_size_api( const std::wstring & ph ); - BOOST_FILESYSTEM_DECL space_pair - space_api( const std::wstring & ph ); - BOOST_FILESYSTEM_DECL system::error_code - get_full_path_name_api( const std::wstring & ph, std::wstring & target ); - BOOST_FILESYSTEM_DECL time_pair - last_write_time_api( const std::wstring & ph ); - BOOST_FILESYSTEM_DECL system::error_code - last_write_time_api( const std::wstring & ph, std::time_t new_value ); - BOOST_FILESYSTEM_DECL system::error_code - get_current_path_api( std::wstring & ph ); - BOOST_FILESYSTEM_DECL system::error_code - set_current_path_api( const std::wstring & ph ); - BOOST_FILESYSTEM_DECL query_pair - create_directory_api( const std::wstring & ph ); -# ifdef BOOST_FS_HARD_LINK - BOOST_FILESYSTEM_DECL system::error_code - create_hard_link_api( const std::wstring & existing_ph, - const std::wstring & new_ph ); -# endif - BOOST_FILESYSTEM_DECL system::error_code - create_symlink_api( const std::wstring & to_ph, - const std::wstring & from_ph ); - BOOST_FILESYSTEM_DECL system::error_code - remove_api( const std::wstring & ph ); - BOOST_FILESYSTEM_DECL system::error_code - rename_api( const std::wstring & from, const std::wstring & to ); - BOOST_FILESYSTEM_DECL system::error_code - copy_file_api( const std::wstring & from, const std::wstring & to, bool fail_if_exists ); - -# endif -# endif - - template - bool remove_aux( const Path & ph, file_status f ); - - template - unsigned long remove_all_aux( const Path & ph, file_status f ); - - } // namespace detail - -// operations functions ----------------------------------------------------// - - // The non-template overloads enable automatic conversion from std and - // C-style strings. See basic_path constructors. The enable_if for the - // templates implements the famous "do-the-right-thing" rule. - -// query functions ---------------------------------------------------------// - - BOOST_INLINE_FS_FUNC(file_status) - status( const Path & ph, system::error_code & ec ) - { return detail::status_api( ph.external_file_string(), ec ); } - - BOOST_FS_FUNC(file_status) - status( const Path & ph ) - { - system::error_code ec; - file_status result( detail::status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::status", ph, ec ) ); - return result; - } - - BOOST_INLINE_FS_FUNC(file_status) - symlink_status( const Path & ph, system::error_code & ec ) -# ifdef BOOST_WINDOWS_API - { return detail::status_api( ph.external_file_string(), ec ); } -# else - { return detail::symlink_status_api( ph.external_file_string(), ec ); } -# endif - - BOOST_FS_FUNC(file_status) - symlink_status( const Path & ph ) - { - system::error_code ec; - file_status result( symlink_status( ph, ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::symlink_status", ph, ec ) ); - return result; - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline bool symbolic_link_exists( const path & ph ) - { return is_symlink( symlink_status(ph) ); } -# endif - - BOOST_FS_FUNC(bool) exists( const Path & ph ) - { - system::error_code ec; - file_status result( detail::status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::exists", ph, ec ) ); - return exists( result ); - } - - BOOST_FS_FUNC(bool) is_directory( const Path & ph ) - { - system::error_code ec; - file_status result( detail::status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::is_directory", ph, ec ) ); - return is_directory( result ); - } - - BOOST_FS_FUNC(bool) is_regular_file( const Path & ph ) - { - system::error_code ec; - file_status result( detail::status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::is_regular_file", ph, ec ) ); - return is_regular_file( result ); - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - BOOST_FS_FUNC(bool) is_regular( const Path & ph ) - { - system::error_code ec; - file_status result( detail::status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::is_regular", ph, ec ) ); - return is_regular( result ); - } -# endif - - BOOST_FS_FUNC(bool) is_other( const Path & ph ) - { - system::error_code ec; - file_status result( detail::status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::is_other", ph, ec ) ); - return is_other( result ); - } - - BOOST_FS_FUNC(bool) is_symlink( -# ifdef BOOST_WINDOWS_API - const Path & ) - { - return false; -# else - const Path & ph) - { - system::error_code ec; - file_status result( detail::symlink_status_api( ph.external_file_string(), ec ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::is_symlink", ph, ec ) ); - return is_symlink( result ); -# endif - } - - // VC++ 7.0 and earlier has a serious namespace bug that causes a clash - // between boost::filesystem2::is_empty and the unrelated type trait - // boost::is_empty. - -# if !defined( BOOST_MSVC ) || BOOST_MSVC > 1300 - BOOST_FS_FUNC(bool) is_empty( const Path & ph ) -# else - BOOST_FS_FUNC(bool) _is_empty( const Path & ph ) -# endif - { - detail::query_pair result( - detail::is_empty_api( ph.external_file_string() ) ); - if ( result.first ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::is_empty", ph, result.first ) ); - return result.second; - } - - BOOST_FS_FUNC(bool) equivalent( const Path & ph1, const Path & ph2 ) - { - detail::query_pair result( detail::equivalent_api( - ph1.external_file_string(), ph2.external_file_string() ) ); - if ( result.first ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::equivalent", ph1, ph2, result.first ) ); - return result.second; - } - - BOOST_FS_FUNC(boost::uintmax_t) file_size( const Path & ph ) - { - detail::uintmax_pair result - ( detail::file_size_api( ph.external_file_string() ) ); - if ( result.first ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::file_size", ph, result.first ) ); - return result.second; - } - - BOOST_FS_FUNC(space_info) space( const Path & ph ) - { - detail::space_pair result - ( detail::space_api( ph.external_file_string() ) ); - if ( result.first ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::space", ph, result.first ) ); - return result.second; - } - - BOOST_FS_FUNC(std::time_t) last_write_time( const Path & ph ) - { - detail::time_pair result - ( detail::last_write_time_api( ph.external_file_string() ) ); - if ( result.first ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::last_write_time", ph, result.first ) ); - return result.second; - } - - -// operations --------------------------------------------------------------// - - BOOST_FS_FUNC(bool) create_directory( const Path & dir_ph ) - { - detail::query_pair result( - detail::create_directory_api( dir_ph.external_directory_string() ) ); - if ( result.first ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::create_directory", - dir_ph, result.first ) ); - return result.second; - } - -#if !defined(BOOST_WINDOWS_API) || defined(BOOST_FS_HARD_LINK) - BOOST_FS_FUNC(void) - create_hard_link( const Path & to_ph, const Path & from_ph ) - { - system::error_code ec( - detail::create_hard_link_api( - to_ph.external_file_string(), - from_ph.external_file_string() ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::create_hard_link", - to_ph, from_ph, ec ) ); - } - - BOOST_FS_FUNC(system::error_code) - create_hard_link( const Path & to_ph, const Path & from_ph, - system::error_code & ec ) - { - ec = detail::create_hard_link_api( - to_ph.external_file_string(), - from_ph.external_file_string() ); - return ec; - } -#endif - - BOOST_FS_FUNC(void) - create_symlink( const Path & to_ph, const Path & from_ph ) - { - system::error_code ec( - detail::create_symlink_api( - to_ph.external_file_string(), - from_ph.external_file_string() ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::create_symlink", - to_ph, from_ph, ec ) ); - } - - BOOST_FS_FUNC(system::error_code) - create_symlink( const Path & to_ph, const Path & from_ph, - system::error_code & ec ) - { - ec = detail::create_symlink_api( - to_ph.external_file_string(), - from_ph.external_file_string() ); - return ec; - } - - BOOST_FS_FUNC(bool) remove( const Path & ph ) - { - system::error_code ec; - file_status f = symlink_status( ph, ec ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::remove", ph, ec ) ); - return detail::remove_aux( ph, f ); - } - - BOOST_FS_FUNC(unsigned long) remove_all( const Path & ph ) - { - system::error_code ec; - file_status f = symlink_status( ph, ec ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::remove_all", ph, ec ) ); - return exists( f ) ? detail::remove_all_aux( ph, f ) : 0; - } - - BOOST_FS_FUNC(void) rename( const Path & from_path, const Path & to_path ) - { - system::error_code ec( detail::rename_api( - from_path.external_directory_string(), - to_path.external_directory_string() ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::rename", - from_path, to_path, ec ) ); - } - - BOOST_SCOPED_ENUM_START(copy_option) - { fail_if_exists, overwrite_if_exists }; - BOOST_SCOPED_ENUM_END - - BOOST_FS_FUNC(void) copy_file( const Path & from_path, const Path & to_path, - BOOST_SCOPED_ENUM(copy_option) option = copy_option::fail_if_exists ) - { - system::error_code ec( detail::copy_file_api( - from_path.external_directory_string(), - to_path.external_directory_string(), option == copy_option::fail_if_exists ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::copy_file", - from_path, to_path, ec ) ); - } - - template< class Path > - Path current_path() - { - typename Path::external_string_type ph; - system::error_code ec( detail::get_current_path_api( ph ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::current_path", ec ) ); - return Path( Path::traits_type::to_internal( ph ) ); - } - - BOOST_FS_FUNC(void) current_path( const Path & ph ) - { - system::error_code ec( detail::set_current_path_api( - ph.external_directory_string() ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::current_path", ph, ec ) ); - } - - template< class Path > - const Path & initial_path() - { - static Path init_path; - if ( init_path.empty() ) init_path = current_path(); - return init_path; - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - // legacy support - inline path current_path() // overload supports pre-i18n apps - { return current_path(); } - inline const path & initial_path() // overload supports pre-i18n apps - { return initial_path(); } -# endif - - BOOST_FS_FUNC(Path) system_complete( const Path & ph ) - { -# ifdef BOOST_WINDOWS_API - if ( ph.empty() ) return ph; - BOOST_FS_TYPENAME Path::external_string_type sys_ph; - system::error_code ec( detail::get_full_path_name_api( ph.external_file_string(), - sys_ph ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::system_complete", ph, ec ) ); - return Path( Path::traits_type::to_internal( sys_ph ) ); -# else - return (ph.empty() || ph.is_complete()) - ? ph : current_path() / ph; -# endif - } - - BOOST_FS_FUNC(Path) - complete( const Path & ph, - const Path & base/* = initial_path() */) - { - BOOST_ASSERT( base.is_complete() - && (ph.is_complete() || !ph.has_root_name()) - && "boost::filesystem::complete() precondition not met" ); -# ifdef BOOST_WINDOWS_PATH - if (ph.empty() || ph.is_complete()) return ph; - if ( !ph.has_root_name() ) - return ph.has_root_directory() - ? Path( base.root_name() ) / ph - : base / ph; - return base / ph; -# else - return (ph.empty() || ph.is_complete()) ? ph : base / ph; -# endif - } - - // VC++ 7.1 had trouble with default arguments, so separate one argument - // signatures are provided as workarounds; the effect is the same. - BOOST_FS_FUNC(Path) complete( const Path & ph ) - { return complete( ph, initial_path() ); } - - BOOST_FS_FUNC(void) - last_write_time( const Path & ph, const std::time_t new_time ) - { - system::error_code ec( detail::last_write_time_api( ph.external_file_string(), - new_time ) ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::last_write_time", ph, ec ) ); - } - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - // "do-the-right-thing" overloads ---------------------------------------// - - inline file_status status( const path & ph ) - { return status( ph ); } - inline file_status status( const wpath & ph ) - { return status( ph ); } - - inline file_status status( const path & ph, system::error_code & ec ) - { return status( ph, ec ); } - inline file_status status( const wpath & ph, system::error_code & ec ) - { return status( ph, ec ); } - - inline file_status symlink_status( const path & ph ) - { return symlink_status( ph ); } - inline file_status symlink_status( const wpath & ph ) - { return symlink_status( ph ); } - - inline file_status symlink_status( const path & ph, system::error_code & ec ) - { return symlink_status( ph, ec ); } - inline file_status symlink_status( const wpath & ph, system::error_code & ec ) - { return symlink_status( ph, ec ); } - - inline bool exists( const path & ph ) { return exists( ph ); } - inline bool exists( const wpath & ph ) { return exists( ph ); } - - inline bool is_directory( const path & ph ) - { return is_directory( ph ); } - inline bool is_directory( const wpath & ph ) - { return is_directory( ph ); } - - inline bool is_regular_file( const path & ph ) - { return is_regular_file( ph ); } - inline bool is_regular_file( const wpath & ph ) - { return is_regular_file( ph ); } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline bool is_regular( const path & ph ) - { return is_regular( ph ); } - inline bool is_regular( const wpath & ph ) - { return is_regular( ph ); } -# endif - - inline bool is_other( const path & ph ) - { return is_other( ph ); } - inline bool is_other( const wpath & ph ) - { return is_other( ph ); } - - inline bool is_symlink( const path & ph ) - { return is_symlink( ph ); } - inline bool is_symlink( const wpath & ph ) - { return is_symlink( ph ); } - - inline bool is_empty( const path & ph ) - { return boost::filesystem2::is_empty( ph ); } - inline bool is_empty( const wpath & ph ) - { return boost::filesystem2::is_empty( ph ); } - - inline bool equivalent( const path & ph1, const path & ph2 ) - { return equivalent( ph1, ph2 ); } - inline bool equivalent( const wpath & ph1, const wpath & ph2 ) - { return equivalent( ph1, ph2 ); } - - inline boost::uintmax_t file_size( const path & ph ) - { return file_size( ph ); } - inline boost::uintmax_t file_size( const wpath & ph ) - { return file_size( ph ); } - - inline space_info space( const path & ph ) - { return space( ph ); } - inline space_info space( const wpath & ph ) - { return space( ph ); } - - inline std::time_t last_write_time( const path & ph ) - { return last_write_time( ph ); } - inline std::time_t last_write_time( const wpath & ph ) - { return last_write_time( ph ); } - - inline bool create_directory( const path & dir_ph ) - { return create_directory( dir_ph ); } - inline bool create_directory( const wpath & dir_ph ) - { return create_directory( dir_ph ); } - -#if !defined(BOOST_WINDOWS_API) || defined(BOOST_FS_HARD_LINK) - inline void create_hard_link( const path & to_ph, - const path & from_ph ) - { return create_hard_link( to_ph, from_ph ); } - inline void create_hard_link( const wpath & to_ph, - const wpath & from_ph ) - { return create_hard_link( to_ph, from_ph ); } - - inline system::error_code create_hard_link( const path & to_ph, - const path & from_ph, system::error_code & ec ) - { return create_hard_link( to_ph, from_ph, ec ); } - inline system::error_code create_hard_link( const wpath & to_ph, - const wpath & from_ph, system::error_code & ec ) - { return create_hard_link( to_ph, from_ph, ec ); } -#endif - - inline void create_symlink( const path & to_ph, - const path & from_ph ) - { return create_symlink( to_ph, from_ph ); } - inline void create_symlink( const wpath & to_ph, - const wpath & from_ph ) - { return create_symlink( to_ph, from_ph ); } - - inline system::error_code create_symlink( const path & to_ph, - const path & from_ph, system::error_code & ec ) - { return create_symlink( to_ph, from_ph, ec ); } - inline system::error_code create_symlink( const wpath & to_ph, - const wpath & from_ph, system::error_code & ec ) - { return create_symlink( to_ph, from_ph, ec ); } - - inline bool remove( const path & ph ) - { return remove( ph ); } - inline bool remove( const wpath & ph ) - { return remove( ph ); } - - inline unsigned long remove_all( const path & ph ) - { return remove_all( ph ); } - inline unsigned long remove_all( const wpath & ph ) - { return remove_all( ph ); } - - inline void rename( const path & from_path, const path & to_path ) - { return rename( from_path, to_path ); } - inline void rename( const wpath & from_path, const wpath & to_path ) - { return rename( from_path, to_path ); } - - inline void copy_file( const path & from_path, const path & to_path ) - { return copy_file( from_path, to_path ); } - inline void copy_file( const wpath & from_path, const wpath & to_path ) - { return copy_file( from_path, to_path ); } - - inline path system_complete( const path & ph ) - { return system_complete( ph ); } - inline wpath system_complete( const wpath & ph ) - { return system_complete( ph ); } - - inline path complete( const path & ph, - const path & base/* = initial_path()*/ ) - { return complete( ph, base ); } - inline wpath complete( const wpath & ph, - const wpath & base/* = initial_path()*/ ) - { return complete( ph, base ); } - - inline path complete( const path & ph ) - { return complete( ph, initial_path() ); } - inline wpath complete( const wpath & ph ) - { return complete( ph, initial_path() ); } - - inline void last_write_time( const path & ph, const std::time_t new_time ) - { last_write_time( ph, new_time ); } - inline void last_write_time( const wpath & ph, const std::time_t new_time ) - { last_write_time( ph, new_time ); } - - inline void current_path( const path & ph ) - { current_path( ph ); } - inline void current_path( const wpath & ph ) - { current_path( ph ); } - -# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - namespace detail - { - template - bool remove_aux( const Path & ph, file_status f ) - { - if ( exists( f ) ) - { - system::error_code ec = remove_api( ph.external_file_string() ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::remove", ph, ec ) ); - return true; - } - return false; - } - - template - unsigned long remove_all_aux( const Path & ph, file_status f ) - { - static const boost::filesystem2::basic_directory_iterator end_itr; - unsigned long count = 1; - if ( !boost::filesystem2::is_symlink( f ) // don't recurse symbolic links - && boost::filesystem2::is_directory( f ) ) - { - for ( boost::filesystem2::basic_directory_iterator itr( ph ); - itr != end_itr; ++itr ) - { - boost::system::error_code ec; - boost::filesystem2::file_status fn = boost::filesystem2::symlink_status( itr->path(), ec ); - if ( ec ) - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem:remove_all", ph, ec ) ); - count += remove_all_aux( itr->path(), fn ); - } - } - remove_aux( ph, f ); - return count; - } - -// test helper -------------------------------------------------------------// - - // not part of the documented interface because false positives are possible; - // there is no law that says that an OS that has large stat.st_size - // actually supports large file sizes. - BOOST_FILESYSTEM_DECL bool possible_large_file_size_support(); - -// directory_iterator helpers ----------------------------------------------// - -// forwarding functions avoid need for BOOST_FILESYSTEM_DECL for class -// basic_directory_iterator, and so avoid iterator_facade DLL template -// problems. They also overload to the proper external path character type. - - BOOST_FILESYSTEM_DECL system::error_code - dir_itr_first( void *& handle, -#if defined(BOOST_POSIX_API) - void *& buffer, -#endif - const std::string & dir_path, - std::string & target, file_status & fs, file_status & symlink_fs ); - // eof: return==0 && handle==0 - - BOOST_FILESYSTEM_DECL system::error_code - dir_itr_increment( void *& handle, -#if defined(BOOST_POSIX_API) - void *& buffer, -#endif - std::string & target, file_status & fs, file_status & symlink_fs ); - // eof: return==0 && handle==0 - - BOOST_FILESYSTEM_DECL system::error_code - dir_itr_close( void *& handle -#if defined(BOOST_POSIX_API) - , void *& buffer -#endif - ); - // Effects: none if handle==0, otherwise close handle, set handle=0 - -# if defined(BOOST_WINDOWS_API) && !defined(BOOST_FILESYSTEM2_NARROW_ONLY) - BOOST_FILESYSTEM_DECL system::error_code - dir_itr_first( void *& handle, const std::wstring & ph, - std::wstring & target, file_status & fs, file_status & symlink_fs ); - BOOST_FILESYSTEM_DECL system::error_code - dir_itr_increment( void *& handle, std::wstring & target, - file_status & fs, file_status & symlink_fs ); -# endif - - template< class Path > - class dir_itr_imp - { - public: - basic_directory_entry m_directory_entry; - void * m_handle; -# ifdef BOOST_POSIX_API - void * m_buffer; // see dir_itr_increment implementation -# endif - dir_itr_imp() : m_handle(0) -# ifdef BOOST_POSIX_API - , m_buffer(0) -# endif - {} - - ~dir_itr_imp() { dir_itr_close( m_handle -#if defined(BOOST_POSIX_API) - , m_buffer -#endif - ); } - }; - - BOOST_FILESYSTEM_DECL system::error_code not_found_error(); - - } // namespace detail - -// basic_directory_iterator ------------------------------------------------// - - template< class Path > - class basic_directory_iterator - : public boost::iterator_facade< - basic_directory_iterator, - basic_directory_entry, - boost::single_pass_traversal_tag > - { - public: - typedef Path path_type; - - basic_directory_iterator(){} // creates the "end" iterator - - explicit basic_directory_iterator( const Path & dir_path ); - basic_directory_iterator( const Path & dir_path, system::error_code & ec ); - - private: - - // shared_ptr provides shallow-copy semantics required for InputIterators. - // m_imp.get()==0 indicates the end iterator. - boost::shared_ptr< detail::dir_itr_imp< Path > > m_imp; - - friend class boost::iterator_core_access; - - typename boost::iterator_facade< - basic_directory_iterator, - basic_directory_entry, - boost::single_pass_traversal_tag >::reference dereference() const - { - BOOST_ASSERT( m_imp.get() && "attempt to dereference end iterator" ); - return m_imp->m_directory_entry; - } - - void increment(); - - bool equal( const basic_directory_iterator & rhs ) const - { return m_imp == rhs.m_imp; } - - system::error_code m_init( const Path & dir_path ); - }; - - typedef basic_directory_iterator< path > directory_iterator; -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - typedef basic_directory_iterator< wpath > wdirectory_iterator; -# endif - - // basic_directory_iterator implementation ---------------------------// - - template - system::error_code basic_directory_iterator::m_init( - const Path & dir_path ) - { - if ( dir_path.empty() ) - { - m_imp.reset(); - return detail::not_found_error(); - } - typename Path::external_string_type name; - file_status fs, symlink_fs; - system::error_code ec( detail::dir_itr_first( m_imp->m_handle, -#if defined(BOOST_POSIX_API) - m_imp->m_buffer, -#endif - dir_path.external_directory_string(), - name, fs, symlink_fs ) ); - - if ( ec ) - { - m_imp.reset(); - return ec; - } - - if ( m_imp->m_handle == 0 ) m_imp.reset(); // eof, so make end iterator - else // not eof - { - m_imp->m_directory_entry.assign( dir_path - / Path::traits_type::to_internal( name ), fs, symlink_fs ); - if ( name[0] == dot::value // dot or dot-dot - && (name.size() == 1 - || (name[1] == dot::value - && name.size() == 2)) ) - { increment(); } - } - return boost::system::error_code(); - } - - template - basic_directory_iterator::basic_directory_iterator( - const Path & dir_path ) - : m_imp( new detail::dir_itr_imp ) - { - system::error_code ec( m_init(dir_path) ); - if ( ec ) - { - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::basic_directory_iterator constructor", - dir_path, ec ) ); - } - } - - template - basic_directory_iterator::basic_directory_iterator( - const Path & dir_path, system::error_code & ec ) - : m_imp( new detail::dir_itr_imp ) - { - ec = m_init(dir_path); - } - - template - void basic_directory_iterator::increment() - { - BOOST_ASSERT( m_imp.get() && "attempt to increment end iterator" ); - BOOST_ASSERT( m_imp->m_handle != 0 && "internal program error" ); - - typename Path::external_string_type name; - file_status fs, symlink_fs; - system::error_code ec; - - for (;;) - { - ec = detail::dir_itr_increment( m_imp->m_handle, -#if defined(BOOST_POSIX_API) - m_imp->m_buffer, -#endif - name, fs, symlink_fs ); - if ( ec ) - { - BOOST_FILESYSTEM_THROW( basic_filesystem_error( - "boost::filesystem::basic_directory_iterator increment", - m_imp->m_directory_entry.path().parent_path(), ec ) ); - } - if ( m_imp->m_handle == 0 ) { m_imp.reset(); return; } // eof, make end - if ( !(name[0] == dot::value // !(dot or dot-dot) - && (name.size() == 1 - || (name[1] == dot::value - && name.size() == 2))) ) - { - m_imp->m_directory_entry.replace_filename( - Path::traits_type::to_internal( name ), fs, symlink_fs ); - return; - } - } - } - - // basic_directory_entry -----------------------------------------------// - - template - class basic_directory_entry - { - public: - typedef Path path_type; - typedef typename Path::string_type string_type; - - // compiler generated copy-ctor, copy assignment, and destructor apply - - basic_directory_entry() {} - explicit basic_directory_entry( const path_type & p, - file_status st = file_status(), file_status symlink_st=file_status() ) - : m_path(p), m_status(st), m_symlink_status(symlink_st) - {} - - void assign( const path_type & p, - file_status st, file_status symlink_st ) - { m_path = p; m_status = st; m_symlink_status = symlink_st; } - - void replace_filename( const string_type & s, - file_status st, file_status symlink_st ) - { - m_path.remove_filename(); - m_path /= s; - m_status = st; - m_symlink_status = symlink_st; - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - void replace_leaf( const string_type & s, - file_status st, file_status symlink_st ) - { replace_filename( s, st, symlink_st ); } -# endif - - const Path & path() const { return m_path; } - file_status status() const; - file_status status( system::error_code & ec ) const; - file_status symlink_status() const; - file_status symlink_status( system::error_code & ec ) const; - - // conversion simplifies the most common use of basic_directory_entry - operator const path_type &() const { return m_path; } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - // deprecated functions preserve common use cases in legacy code - typename Path::string_type filename() const - { - return path().filename(); - } - typename Path::string_type leaf() const - { - return path().filename(); - } - typename Path::string_type string() const - { - return path().string(); - } -# endif - - private: - path_type m_path; - mutable file_status m_status; // stat()-like - mutable file_status m_symlink_status; // lstat()-like - // note: m_symlink_status is not used by Windows implementation - - }; // basic_directory_status - - typedef basic_directory_entry directory_entry; -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - typedef basic_directory_entry wdirectory_entry; -# endif - - // basic_directory_entry implementation --------------------------------// - - template - file_status - basic_directory_entry::status() const - { - if ( !status_known( m_status ) ) - { -# ifndef BOOST_WINDOWS_API - if ( status_known( m_symlink_status ) - && !is_symlink( m_symlink_status ) ) - { m_status = m_symlink_status; } - else { m_status = boost::filesystem2::status( m_path ); } -# else - m_status = boost::filesystem2::status( m_path ); -# endif - } - return m_status; - } - - template - file_status - basic_directory_entry::status( system::error_code & ec ) const - { - if ( !status_known( m_status ) ) - { -# ifndef BOOST_WINDOWS_API - if ( status_known( m_symlink_status ) - && !is_symlink( m_symlink_status ) ) - { ec = boost::system::error_code();; m_status = m_symlink_status; } - else { m_status = boost::filesystem2::status( m_path, ec ); } -# else - m_status = boost::filesystem2::status( m_path, ec ); -# endif - } - else ec = boost::system::error_code();; - return m_status; - } - - template - file_status - basic_directory_entry::symlink_status() const - { -# ifndef BOOST_WINDOWS_API - if ( !status_known( m_symlink_status ) ) - { m_symlink_status = boost::filesystem2::symlink_status( m_path ); } - return m_symlink_status; -# else - return status(); -# endif - } - - template - file_status - basic_directory_entry::symlink_status( system::error_code & ec ) const - { -# ifndef BOOST_WINDOWS_API - if ( !status_known( m_symlink_status ) ) - { m_symlink_status = boost::filesystem2::symlink_status( m_path, ec ); } - else ec = boost::system::error_code();; - return m_symlink_status; -# else - return status( ec ); -# endif - } - } // namespace filesystem2 -} // namespace boost - -#undef BOOST_FS_FUNC - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem2::basic_directory_entry; - using filesystem2::basic_directory_iterator; - using filesystem2::block_file; - using filesystem2::character_file; - using filesystem2::complete; - using filesystem2::copy_file; - using filesystem2::copy_option; - using filesystem2::create_directory; -# if !defined(BOOST_WINDOWS_API) || defined(BOOST_FS_HARD_LINK) - using filesystem2::create_hard_link; -# endif - using filesystem2::create_symlink; - using filesystem2::current_path; - using filesystem2::directory_entry; - using filesystem2::directory_file; - using filesystem2::directory_iterator; - using filesystem2::equivalent; - using filesystem2::exists; - using filesystem2::fifo_file; - using filesystem2::file_not_found; - using filesystem2::file_size; - using filesystem2::file_status; - using filesystem2::file_type; - using filesystem2::initial_path; - using filesystem2::is_directory; - using filesystem2::is_directory; - using filesystem2::is_empty; - using filesystem2::is_other; - using filesystem2::is_regular_file; - using filesystem2::is_symlink; - using filesystem2::last_write_time; - using filesystem2::regular_file; - using filesystem2::remove; - using filesystem2::remove_all; - using filesystem2::rename; - using filesystem2::socket_file; - using filesystem2::space; - using filesystem2::space_info; - using filesystem2::status; - using filesystem2::status_known; - using filesystem2::symlink_file; - using filesystem2::symlink_status; - using filesystem2::system_complete; - using filesystem2::type_unknown; -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - using filesystem2::is_regular; - using filesystem2::symbolic_link_exists; -# endif -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - using filesystem2::wdirectory_iterator; - using filesystem2::wdirectory_entry; -# endif - namespace detail - { - using filesystem2::detail::not_found_error; - using filesystem2::detail::possible_large_file_size_support; - } - } -} - -#include // pops abi_prefix.hpp pragmas -#endif // BOOST_FILESYSTEM2_OPERATIONS_HPP diff --git a/3party/boost/boost/filesystem/v2/path.hpp b/3party/boost/boost/filesystem/v2/path.hpp deleted file mode 100644 index 615b89cd31..0000000000 --- a/3party/boost/boost/filesystem/v2/path.hpp +++ /dev/null @@ -1,1571 +0,0 @@ -// boost/filesystem/path.hpp -----------------------------------------------// - -// Copyright Beman Dawes 2002-2005 -// Copyright Vladimir Prus 2002 - -// 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) - -// See library home page at http://www.boost.org/libs/filesystem - -// basic_path's stem(), extension(), and replace_extension() are based on -// basename(), extension(), and change_extension() from the original -// filesystem/convenience.hpp header by Vladimir Prus. - -//----------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM2_PATH_HPP -#define BOOST_FILESYSTEM2_PATH_HPP - -#include -#include -#include -#include -#include -#include -#include - -#include -#include // for lexicographical_compare -#include // needed by basic_path inserter and extractor -#include - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY -# include -# endif - -#include // must be the last #include - -namespace boost -{ - namespace BOOST_FILESYSTEM2_NAMESPACE - { - template class basic_path; - - struct path_traits; - typedef basic_path< std::string, path_traits > path; - - struct path_traits - { - typedef std::string internal_string_type; - typedef std::string external_string_type; - static external_string_type to_external( const path &, - const internal_string_type & src ) { return src; } - static internal_string_type to_internal( - const external_string_type & src ) { return src; } - }; - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - struct BOOST_FILESYSTEM_DECL wpath_traits; - - typedef basic_path< std::wstring, wpath_traits > wpath; - - struct BOOST_FILESYSTEM_DECL wpath_traits - { - typedef std::wstring internal_string_type; -# ifdef BOOST_WINDOWS_API - typedef std::wstring external_string_type; - static external_string_type to_external( const wpath &, - const internal_string_type & src ) { return src; } - static internal_string_type to_internal( - const external_string_type & src ) { return src; } -# else - typedef std::string external_string_type; - static external_string_type to_external( const wpath & ph, - const internal_string_type & src ); - static internal_string_type to_internal( - const external_string_type & src ); -# endif - static void imbue( const std::locale & loc ); - static bool imbue( const std::locale & loc, const std::nothrow_t & ); - }; - -# endif // ifndef BOOST_FILESYSTEM2_NARROW_ONLY - - // path traits ---------------------------------------------------------// - - template struct is_basic_path - { BOOST_STATIC_CONSTANT( bool, value = false ); }; - template<> struct is_basic_path - { BOOST_STATIC_CONSTANT( bool, value = true ); }; -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - template<> struct is_basic_path - { BOOST_STATIC_CONSTANT( bool, value = true ); }; -# endif - - // These only have to be specialized if Path::string_type::value_type - // is not convertible from char, although specializations may eliminate - // compiler warnings. See ticket 2543. - template struct slash - { BOOST_STATIC_CONSTANT( char, value = '/' ); }; - - template struct dot - { BOOST_STATIC_CONSTANT( char, value = '.' ); }; - - template struct colon - { BOOST_STATIC_CONSTANT( char, value = ':' ); }; - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - template<> struct slash - { BOOST_STATIC_CONSTANT( wchar_t, value = L'/' ); }; - template<> struct dot - { BOOST_STATIC_CONSTANT( wchar_t, value = L'.' ); }; - template<> struct colon - { BOOST_STATIC_CONSTANT( wchar_t, value = L':' ); }; -# endif - -# ifdef BOOST_WINDOWS_PATH - template struct path_alt_separator - { BOOST_STATIC_CONSTANT( char, value = '\\' ); }; -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - template<> struct path_alt_separator - { BOOST_STATIC_CONSTANT( wchar_t, value = L'\\' ); }; -# endif -# endif - - // workaround for VC++ 7.0 and earlier issues with nested classes - namespace detail - { - template - class iterator_helper - { - public: - typedef typename Path::iterator iterator; - static void do_increment( iterator & ph ); - static void do_decrement( iterator & ph ); - }; - } - - // basic_path ----------------------------------------------------------// - - template - class basic_path - { - // invariant: m_path valid according to the portable generic path grammar - - // validate template arguments -// TODO: get these working -// BOOST_STATIC_ASSERT( ::boost::is_same::value ); -// BOOST_STATIC_ASSERT( ::boost::is_same::value || ::boost::is_same::value ); - - public: - // compiler generates copy constructor and copy assignment - - typedef basic_path path_type; - typedef String string_type; - typedef typename String::value_type value_type; - typedef Traits traits_type; - typedef typename Traits::external_string_type external_string_type; - - // constructors/destructor - basic_path() {} - basic_path( const string_type & s ) { operator/=( s ); } - basic_path( const value_type * s ) { operator/=( s ); } -# ifndef BOOST_NO_MEMBER_TEMPLATES - template - basic_path( InputIterator first, InputIterator last ) - { append( first, last ); } -# endif - ~basic_path() {} - - // assignments - basic_path & operator=( const string_type & s ) - { -# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, >= 310) - m_path.clear(); -# else - m_path.erase( m_path.begin(), m_path.end() ); -# endif - operator/=( s ); - return *this; - } - basic_path & operator=( const value_type * s ) - { -# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, >= 310) - m_path.clear(); -# else - m_path.erase( m_path.begin(), m_path.end() ); -# endif - operator/=( s ); - return *this; - } -# ifndef BOOST_NO_MEMBER_TEMPLATES - template - basic_path & assign( InputIterator first, InputIterator last ) - { m_path.clear(); append( first, last ); return *this; } -# endif - - // modifiers - basic_path & operator/=( const basic_path & rhs ) { return operator /=( rhs.string().c_str() ); } - basic_path & operator/=( const string_type & rhs ) { return operator /=( rhs.c_str() ); } - basic_path & operator/=( const value_type * s ); -# ifndef BOOST_NO_MEMBER_TEMPLATES - template - basic_path & append( InputIterator first, InputIterator last ); -# endif - - void clear() - { -# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, >= 310) - m_path.clear(); -# else - m_path.erase( m_path.begin(), m_path.end() ); -# endif - } - - void swap( basic_path & rhs ) - { - m_path.swap( rhs.m_path ); -# ifdef BOOST_CYGWIN_PATH - std::swap( m_cygwin_root, rhs.m_cygwin_root ); -# endif - } - - basic_path & remove_filename(); - basic_path & replace_extension( const string_type & new_extension = string_type() ); - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - basic_path & remove_leaf() { return remove_filename(); } -# endif - - // observers - const string_type & string() const { return m_path; } - const string_type file_string() const; - const string_type directory_string() const { return file_string(); } - - const external_string_type external_file_string() const { return Traits::to_external( *this, file_string() ); } - const external_string_type external_directory_string() const { return Traits::to_external( *this, directory_string() ); } - - basic_path root_path() const; - string_type root_name() const; - string_type root_directory() const; - basic_path relative_path() const; - basic_path parent_path() const; - string_type filename() const; - string_type stem() const; - string_type extension() const; - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - string_type leaf() const { return filename(); } - basic_path branch_path() const { return parent_path(); } - bool has_leaf() const { return !m_path.empty(); } - bool has_branch_path() const { return !parent_path().empty(); } -# endif - - bool empty() const { return m_path.empty(); } // name consistent with std containers - bool is_complete() const; - bool has_root_path() const; - bool has_root_name() const; - bool has_root_directory() const; - bool has_relative_path() const { return !relative_path().empty(); } - bool has_filename() const { return !m_path.empty(); } - bool has_parent_path() const { return !parent_path().empty(); } - - // iterators - class iterator : public boost::iterator_facade< - iterator, - string_type const, - boost::bidirectional_traversal_tag > - { - private: - friend class boost::iterator_core_access; - friend class boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path; - - const string_type & dereference() const - { return m_name; } - bool equal( const iterator & rhs ) const - { return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos; } - - friend class boost::BOOST_FILESYSTEM2_NAMESPACE::detail::iterator_helper; - - void increment() - { - boost::BOOST_FILESYSTEM2_NAMESPACE::detail::iterator_helper::do_increment( - *this ); - } - void decrement() - { - boost::BOOST_FILESYSTEM2_NAMESPACE::detail::iterator_helper::do_decrement( - *this ); - } - - string_type m_name; // current element - const basic_path * m_path_ptr; // path being iterated over - typename string_type::size_type m_pos; // position of name in - // path_ptr->string(). The - // end() iterator is indicated by - // pos == path_ptr->m_path.size() - }; // iterator - - typedef iterator const_iterator; - - iterator begin() const; - iterator end() const; - - private: - // Note: This is an implementation for POSIX and Windows, where there - // are only minor differences between generic and native path grammars. - // Private members might be quite different in other implementations, - // particularly where there were wide differences between portable and - // native path formats, or between file_string() and - // directory_string() formats, or simply that the implementation - // was willing expend additional memory to achieve greater speed for - // some operations at the expense of other operations. - - string_type m_path; // invariant: portable path grammar - // on Windows, backslashes converted to slashes - -# ifdef BOOST_CYGWIN_PATH - bool m_cygwin_root; // if present, m_path[0] was slash. note: initialization - // done by append -# endif - - void m_append_separator_if_needed(); - void m_append( value_type value ); // converts Windows alt_separator - - // Was qualified; como433beta8 reports: - // warning #427-D: qualified name is not allowed in member declaration - friend class iterator; - friend class boost::BOOST_FILESYSTEM2_NAMESPACE::detail::iterator_helper; - - // Deprecated features ease transition for existing code. Don't use these - // in new code. -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - public: - typedef bool (*name_check)( const std::string & name ); - basic_path( const string_type & str, name_check ) { operator/=( str ); } - basic_path( const typename string_type::value_type * s, name_check ) - { operator/=( s );} - string_type native_file_string() const { return file_string(); } - string_type native_directory_string() const { return directory_string(); } - static bool default_name_check_writable() { return false; } - static void default_name_check( name_check ) {} - static name_check default_name_check() { return 0; } - basic_path & canonize(); - basic_path & normalize(); -# endif - }; - - // basic_path non-member functions ---------------------------------------// - - template< class String, class Traits > - inline void swap( basic_path & lhs, - basic_path & rhs ) { lhs.swap( rhs ); } - - template< class String, class Traits > - bool operator<( const basic_path & lhs, const basic_path & rhs ) - { - return std::lexicographical_compare( - lhs.begin(), lhs.end(), rhs.begin(), rhs.end() ); - } - - template< class String, class Traits > - bool operator<( const typename basic_path::string_type::value_type * lhs, - const basic_path & rhs ) - { - basic_path tmp( lhs ); - return std::lexicographical_compare( - tmp.begin(), tmp.end(), rhs.begin(), rhs.end() ); - } - - template< class String, class Traits > - bool operator<( const typename basic_path::string_type & lhs, - const basic_path & rhs ) - { - basic_path tmp( lhs ); - return std::lexicographical_compare( - tmp.begin(), tmp.end(), rhs.begin(), rhs.end() ); - } - - template< class String, class Traits > - bool operator<( const basic_path & lhs, - const typename basic_path::string_type::value_type * rhs ) - { - basic_path tmp( rhs ); - return std::lexicographical_compare( - lhs.begin(), lhs.end(), tmp.begin(), tmp.end() ); - } - - template< class String, class Traits > - bool operator<( const basic_path & lhs, - const typename basic_path::string_type & rhs ) - { - basic_path tmp( rhs ); - return std::lexicographical_compare( - lhs.begin(), lhs.end(), tmp.begin(), tmp.end() ); - } - - // operator == uses hand-written compare rather than !(lhs < rhs) && !(rhs < lhs) - // because the result is the same yet the direct compare is much more efficient - // than lexicographical_compare, which would also be called twice. - - template< class String, class Traits > - inline bool operator==( const basic_path & lhs, - const typename basic_path::string_type::value_type * rhs ) - { - typedef typename - boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path path_type; - const typename path_type::string_type::value_type * l (lhs.string().c_str()); - while ( (*l == *rhs -# ifdef BOOST_WINDOWS_PATH - || (*l == path_alt_separator::value && *rhs == slash::value) - || (*l == slash::value && *rhs == path_alt_separator::value) -# endif - ) && *l ) { ++l; ++rhs; } - return *l == *rhs -# ifdef BOOST_WINDOWS_PATH - || (*l == path_alt_separator::value && *rhs == slash::value) - || (*l == slash::value && *rhs == path_alt_separator::value) -# endif - ; - } - - template< class String, class Traits > - inline bool operator==( const basic_path & lhs, - const basic_path & rhs ) - { - return lhs == rhs.string().c_str(); - } - - template< class String, class Traits > - inline bool operator==( const typename basic_path::string_type::value_type * lhs, - const basic_path & rhs ) - { - return rhs == lhs; - } - - template< class String, class Traits > - inline bool operator==( const typename basic_path::string_type & lhs, - const basic_path & rhs ) - { - return rhs == lhs.c_str(); - } - - template< class String, class Traits > - inline bool operator==( const basic_path & lhs, - const typename basic_path::string_type & rhs ) - { - return lhs == rhs.c_str(); - } - - template< class String, class Traits > - inline bool operator!=( const basic_path & lhs, - const basic_path & rhs ) - { return !(lhs == rhs); } - - template< class String, class Traits > - inline bool operator!=( const typename basic_path::string_type::value_type * lhs, - const basic_path & rhs ) - { return !(lhs == rhs); } - - template< class String, class Traits > - inline bool operator!=( const typename basic_path::string_type & lhs, - const basic_path & rhs ) - { return !(lhs == rhs); } - - template< class String, class Traits > - inline bool operator!=( const basic_path & lhs, - const typename basic_path::string_type::value_type * rhs ) - { return !(lhs == rhs); } - - template< class String, class Traits > - inline bool operator!=( const basic_path & lhs, - const typename basic_path::string_type & rhs ) - { return !(lhs == rhs); } - - template< class String, class Traits > - inline bool operator>( const basic_path & lhs, const basic_path & rhs ) { return rhs < lhs; } - - template< class String, class Traits > - inline bool operator>( const typename basic_path::string_type::value_type * lhs, - const basic_path & rhs ) { return rhs < basic_path(lhs); } - - template< class String, class Traits > - inline bool operator>( const typename basic_path::string_type & lhs, - const basic_path & rhs ) { return rhs < basic_path(lhs); } - - template< class String, class Traits > - inline bool operator>( const basic_path & lhs, - const typename basic_path::string_type::value_type * rhs ) - { return basic_path(rhs) < lhs; } - - template< class String, class Traits > - inline bool operator>( const basic_path & lhs, - const typename basic_path::string_type & rhs ) - { return basic_path(rhs) < lhs; } - - template< class String, class Traits > - inline bool operator<=( const basic_path & lhs, const basic_path & rhs ) { return !(rhs < lhs); } - - template< class String, class Traits > - inline bool operator<=( const typename basic_path::string_type::value_type * lhs, - const basic_path & rhs ) { return !(rhs < basic_path(lhs)); } - - template< class String, class Traits > - inline bool operator<=( const typename basic_path::string_type & lhs, - const basic_path & rhs ) { return !(rhs < basic_path(lhs)); } - - template< class String, class Traits > - inline bool operator<=( const basic_path & lhs, - const typename basic_path::string_type::value_type * rhs ) - { return !(basic_path(rhs) < lhs); } - - template< class String, class Traits > - inline bool operator<=( const basic_path & lhs, - const typename basic_path::string_type & rhs ) - { return !(basic_path(rhs) < lhs); } - - template< class String, class Traits > - inline bool operator>=( const basic_path & lhs, const basic_path & rhs ) { return !(lhs < rhs); } - - template< class String, class Traits > - inline bool operator>=( const typename basic_path::string_type::value_type * lhs, - const basic_path & rhs ) { return !(lhs < basic_path(rhs)); } - - template< class String, class Traits > - inline bool operator>=( const typename basic_path::string_type & lhs, - const basic_path & rhs ) { return !(lhs < basic_path(rhs)); } - - template< class String, class Traits > - inline bool operator>=( const basic_path & lhs, - const typename basic_path::string_type::value_type * rhs ) - { return !(basic_path(lhs) < rhs); } - - template< class String, class Traits > - inline bool operator>=( const basic_path & lhs, - const typename basic_path::string_type & rhs ) - { return !(basic_path(lhs) < rhs); } - - // operator / - - template< class String, class Traits > - inline basic_path operator/( - const basic_path & lhs, - const basic_path & rhs ) - { return basic_path( lhs ) /= rhs; } - - template< class String, class Traits > - inline basic_path operator/( - const basic_path & lhs, - const typename String::value_type * rhs ) - { return basic_path( lhs ) /= - basic_path( rhs ); } - - template< class String, class Traits > - inline basic_path operator/( - const basic_path & lhs, const String & rhs ) - { return basic_path( lhs ) /= - basic_path( rhs ); } - - template< class String, class Traits > - inline basic_path operator/( - const typename String::value_type * lhs, - const basic_path & rhs ) - { return basic_path( lhs ) /= rhs; } - - template< class String, class Traits > - inline basic_path operator/( - const String & lhs, const basic_path & rhs ) - { return basic_path( lhs ) /= rhs; } - - // inserters and extractors --------------------------------------------// - -// bypass VC++ 7.0 and earlier, and broken Borland compilers -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__BORLANDC__, < 0x610) - template< class Path > - std::basic_ostream< typename Path::string_type::value_type, - typename Path::string_type::traits_type > & - operator<< - ( std::basic_ostream< typename Path::string_type::value_type, - typename Path::string_type::traits_type >& os, const Path & ph ) - { - os << ph.string(); - return os; - } - - template< class Path > - std::basic_istream< typename Path::string_type::value_type, - typename Path::string_type::traits_type > & - operator>> - ( std::basic_istream< typename Path::string_type::value_type, - typename Path::string_type::traits_type >& is, Path & ph ) - { - typename Path::string_type str; - std::getline(is, str); // See ticket 3863 - ph = str; - return is; - } -# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - template< class String, class Traits > - std::basic_ostream< BOOST_DEDUCED_TYPENAME String::value_type, - BOOST_DEDUCED_TYPENAME String::traits_type > & - operator<< - ( std::basic_ostream< BOOST_DEDUCED_TYPENAME String::value_type, - BOOST_DEDUCED_TYPENAME String::traits_type >& os, - const basic_path< String, Traits > & ph ) - { - os << ph.string(); - return os; - } - - template< class String, class Traits > - std::basic_istream< BOOST_DEDUCED_TYPENAME String::value_type, - BOOST_DEDUCED_TYPENAME String::traits_type > & - operator>> - ( std::basic_istream< BOOST_DEDUCED_TYPENAME String::value_type, - BOOST_DEDUCED_TYPENAME String::traits_type> & is, - basic_path< String, Traits > & ph ) - { - String str; - std::getline(is, str); // See ticket 3863 - ph = str; - return is; - } -# endif - - // basic_filesystem_error helpers --------------------------------------// - - // Originally choice of implementation was done via specialization of - // basic_filesystem_error::what(). Several compilers (GCC, aCC, etc.) - // couldn't handle that, so the choice is now accomplished by overloading. - - namespace detail - { - // BOOST_FILESYSTEM_DECL version works for VC++ but not GCC. Go figure! - inline - const char * what( const char * sys_err_what, - const path & path1_arg, const path & path2_arg, std::string & target ) - { - try - { - if ( target.empty() ) - { - target = sys_err_what; - if ( !path1_arg.empty() ) - { - target += ": \""; - target += path1_arg.file_string(); - target += "\""; - } - if ( !path2_arg.empty() ) - { - target += ", \""; - target += path2_arg.file_string(); - target += "\""; - } - } - return target.c_str(); - } - catch (...) - { - return sys_err_what; - } - } - - template - const char * what( const char * sys_err_what, - const Path & /*path1_arg*/, const Path & /*path2_arg*/, std::string & /*target*/ ) - { - return sys_err_what; - } - } - - // basic_filesystem_error ----------------------------------------------// - - template - class basic_filesystem_error : public system::system_error - { - // see http://www.boost.org/more/error_handling.html for design rationale - public: - // compiler generates copy constructor and copy assignment - - typedef Path path_type; - - basic_filesystem_error( const std::string & what_arg, - system::error_code ec ); - - basic_filesystem_error( const std::string & what_arg, - const path_type & path1_arg, system::error_code ec ); - - basic_filesystem_error( const std::string & what_arg, const path_type & path1_arg, - const path_type & path2_arg, system::error_code ec ); - - ~basic_filesystem_error() throw() {} - - const path_type & path1() const - { - static const path_type empty_path; - return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ; - } - const path_type & path2() const - { - static const path_type empty_path; - return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ; - } - - const char * what() const throw() - { - if ( !m_imp_ptr.get() ) - return system::system_error::what(); - return detail::what( system::system_error::what(), m_imp_ptr->m_path1, - m_imp_ptr->m_path2, m_imp_ptr->m_what ); - } - - private: - struct m_imp - { - path_type m_path1; // may be empty() - path_type m_path2; // may be empty() - std::string m_what; // not built until needed - }; - boost::shared_ptr m_imp_ptr; - }; - - typedef basic_filesystem_error filesystem_error; - -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - typedef basic_filesystem_error wfilesystem_error; -# endif - - // path::name_checks -----------------------------------------------------// - - BOOST_FILESYSTEM_DECL bool portable_posix_name( const std::string & name ); - BOOST_FILESYSTEM_DECL bool windows_name( const std::string & name ); - BOOST_FILESYSTEM_DECL bool portable_name( const std::string & name ); - BOOST_FILESYSTEM_DECL bool portable_directory_name( const std::string & name ); - BOOST_FILESYSTEM_DECL bool portable_file_name( const std::string & name ); - BOOST_FILESYSTEM_DECL bool native( const std::string & name ); - inline bool no_check( const std::string & ) - { return true; } - -// implementation -----------------------------------------------------------// - - namespace detail - { - - // is_separator helper ------------------------------------------------// - - template - inline bool is_separator( typename Path::string_type::value_type c ) - { - return c == slash::value -# ifdef BOOST_WINDOWS_PATH - || c == path_alt_separator::value -# endif - ; - } - - // filename_pos helper ----------------------------------------------------// - - template - typename String::size_type filename_pos( - const String & str, // precondition: portable generic path grammar - typename String::size_type end_pos ) // end_pos is past-the-end position - // return 0 if str itself is filename (or empty) - { - typedef typename - boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path path_type; - - // case: "//" - if ( end_pos == 2 - && str[0] == slash::value - && str[1] == slash::value ) return 0; - - // case: ends in "/" - if ( end_pos && str[end_pos-1] == slash::value ) - return end_pos-1; - - // set pos to start of last element - typename String::size_type pos( - str.find_last_of( slash::value, end_pos-1 ) ); -# ifdef BOOST_WINDOWS_PATH - if ( pos == String::npos ) - pos = str.find_last_of( path_alt_separator::value, end_pos-1 ); - if ( pos == String::npos ) - pos = str.find_last_of( colon::value, end_pos-2 ); -# endif - - return ( pos == String::npos // path itself must be a filename (or empty) - || (pos == 1 && str[0] == slash::value) ) // or net - ? 0 // so filename is entire string - : pos + 1; // or starts after delimiter - } - - // first_element helper -----------------------------------------------// - // sets pos and len of first element, excluding extra separators - // if src.empty(), sets pos,len, to 0,0. - - template - void first_element( - const String & src, // precondition: portable generic path grammar - typename String::size_type & element_pos, - typename String::size_type & element_size, -# if !BOOST_WORKAROUND( BOOST_MSVC, <= 1310 ) // VC++ 7.1 - typename String::size_type size = String::npos -# else - typename String::size_type size = -1 -# endif - ) - { - if ( size == String::npos ) size = src.size(); - element_pos = 0; - element_size = 0; - if ( src.empty() ) return; - - typedef typename boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path path_type; - - typename String::size_type cur(0); - - // deal with // [network] - if ( size >= 2 && src[0] == slash::value - && src[1] == slash::value - && (size == 2 - || src[2] != slash::value) ) - { - cur += 2; - element_size += 2; - } - - // leading (not non-network) separator - else if ( src[0] == slash::value ) - { - ++element_size; - // bypass extra leading separators - while ( cur+1 < size - && src[cur+1] == slash::value ) - { - ++cur; - ++element_pos; - } - return; - } - - // at this point, we have either a plain name, a network name, - // or (on Windows only) a device name - - // find the end - while ( cur < size -# ifdef BOOST_WINDOWS_PATH - && src[cur] != colon::value -# endif - && src[cur] != slash::value ) - { - ++cur; - ++element_size; - } - -# ifdef BOOST_WINDOWS_PATH - if ( cur == size ) return; - // include device delimiter - if ( src[cur] == colon::value ) - { ++element_size; } -# endif - - return; - } - - // root_directory_start helper ----------------------------------------// - - template - typename String::size_type root_directory_start( - const String & s, // precondition: portable generic path grammar - typename String::size_type size ) - // return npos if no root_directory found - { - typedef typename boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path path_type; - -# ifdef BOOST_WINDOWS_PATH - // case "c:/" - if ( size > 2 - && s[1] == colon::value - && s[2] == slash::value ) return 2; -# endif - - // case "//" - if ( size == 2 - && s[0] == slash::value - && s[1] == slash::value ) return String::npos; - - // case "//net {/}" - if ( size > 3 - && s[0] == slash::value - && s[1] == slash::value - && s[2] != slash::value ) - { - typename String::size_type pos( - s.find( slash::value, 2 ) ); - return pos < size ? pos : String::npos; - } - - // case "/" - if ( size > 0 && s[0] == slash::value ) return 0; - - return String::npos; - } - - // is_non_root_slash helper -------------------------------------------// - - template - bool is_non_root_slash( const String & str, - typename String::size_type pos ) // pos is position of the slash - { - typedef typename - boost::BOOST_FILESYSTEM2_NAMESPACE::basic_path - path_type; - - BOOST_ASSERT( !str.empty() && str[pos] == slash::value - && "precondition violation" ); - - // subsequent logic expects pos to be for leftmost slash of a set - while ( pos > 0 && str[pos-1] == slash::value ) - --pos; - - return pos != 0 - && (pos <= 2 || str[1] != slash::value - || str.find( slash::value, 2 ) != pos) -# ifdef BOOST_WINDOWS_PATH - && (pos !=2 || str[1] != colon::value) -# endif - ; - } - } // namespace detail - - // decomposition functions ----------------------------------------------// - - template - String basic_path::filename() const - { - typename String::size_type end_pos( - detail::filename_pos( m_path, m_path.size() ) ); - return (m_path.size() - && end_pos - && m_path[end_pos] == slash::value - && detail::is_non_root_slash< String, Traits >(m_path, end_pos)) - ? String( 1, dot::value ) - : m_path.substr( end_pos ); - } - - template - String basic_path::stem() const - { - string_type name = filename(); - typename string_type::size_type n = name.rfind(dot::value); - return name.substr(0, n); - } - - template - String basic_path::extension() const - { - string_type name = filename(); - typename string_type::size_type n = name.rfind(dot::value); - if (n != string_type::npos) - return name.substr(n); - else - return string_type(); - } - - template - basic_path basic_path::parent_path() const - { - typename String::size_type end_pos( - detail::filename_pos( m_path, m_path.size() ) ); - - bool filename_was_separator( m_path.size() - && m_path[end_pos] == slash::value ); - - // skip separators unless root directory - typename string_type::size_type root_dir_pos( detail::root_directory_start - ( m_path, end_pos ) ); - for ( ; - end_pos > 0 - && (end_pos-1) != root_dir_pos - && m_path[end_pos-1] == slash::value - ; - --end_pos ) {} - - return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator) - ? path_type() - : path_type( m_path.substr( 0, end_pos ) ); - } - - template - basic_path basic_path::relative_path() const - { - iterator itr( begin() ); - for ( ; itr.m_pos != m_path.size() - && (itr.m_name[0] == slash::value -# ifdef BOOST_WINDOWS_PATH - || itr.m_name[itr.m_name.size()-1] - == colon::value -# endif - ); ++itr ) {} - - return basic_path( m_path.substr( itr.m_pos ) ); - } - - template - String basic_path::root_name() const - { - iterator itr( begin() ); - - return ( itr.m_pos != m_path.size() - && ( - ( itr.m_name.size() > 1 - && itr.m_name[0] == slash::value - && itr.m_name[1] == slash::value - ) -# ifdef BOOST_WINDOWS_PATH - || itr.m_name[itr.m_name.size()-1] - == colon::value -# endif - ) ) - ? *itr - : String(); - } - - template - String basic_path::root_directory() const - { - typename string_type::size_type start( - detail::root_directory_start( m_path, m_path.size() ) ); - - return start == string_type::npos - ? string_type() - : m_path.substr( start, 1 ); - } - - template - basic_path basic_path::root_path() const - { - // even on POSIX, root_name() is non-empty() on network paths - return basic_path( root_name() ) /= root_directory(); - } - - // path query functions -------------------------------------------------// - - template - inline bool basic_path::is_complete() const - { -# ifdef BOOST_WINDOWS_PATH - return has_root_name() && has_root_directory(); -# else - return has_root_directory(); -# endif - } - - template - inline bool basic_path::has_root_path() const - { - return !root_path().empty(); - } - - template - inline bool basic_path::has_root_name() const - { - return !root_name().empty(); - } - - template - inline bool basic_path::has_root_directory() const - { - return !root_directory().empty(); - } - - // append ---------------------------------------------------------------// - - template - void basic_path::m_append_separator_if_needed() - // requires: !empty() - { - if ( -# ifdef BOOST_WINDOWS_PATH - *(m_path.end()-1) != colon::value && -# endif - *(m_path.end()-1) != slash::value ) - { - m_path += slash::value; - } - } - - template - void basic_path::m_append( value_type value ) - { -# ifdef BOOST_CYGWIN_PATH - if ( m_path.empty() ) m_cygwin_root = (value == slash::value); -# endif - -# ifdef BOOST_WINDOWS_PATH - // for BOOST_WINDOWS_PATH, convert alt_separator ('\') to separator ('/') - m_path += ( value == path_alt_separator::value - ? slash::value - : value ); -# else - m_path += value; -# endif - } - - // except that it wouldn't work for BOOST_NO_MEMBER_TEMPLATES compilers, - // the append() member template could replace this code. - template - basic_path & basic_path::operator /= - ( const value_type * next_p ) - { - // ignore escape sequence on POSIX or Windows - if ( *next_p == slash::value - && *(next_p+1) == slash::value - && *(next_p+2) == colon::value ) next_p += 3; - - // append slash::value if needed - if ( !empty() && *next_p != 0 - && !detail::is_separator( *next_p ) ) - { m_append_separator_if_needed(); } - - for ( ; *next_p != 0; ++next_p ) m_append( *next_p ); - return *this; - } - -# ifndef BOOST_NO_MEMBER_TEMPLATES - template template - basic_path & basic_path::append( - InputIterator first, InputIterator last ) - { - // append slash::value if needed - if ( !empty() && first != last - && !detail::is_separator( *first ) ) - { m_append_separator_if_needed(); } - - // song-and-dance to avoid violating InputIterator requirements - // (which prohibit lookahead) in detecting a possible escape sequence - // (escape sequences are simply ignored on POSIX and Windows) - bool was_escape_sequence(true); - std::size_t append_count(0); - typename String::size_type initial_pos( m_path.size() ); - - for ( ; first != last && *first; ++first ) - { - if ( append_count == 0 && *first != slash::value ) - was_escape_sequence = false; - if ( append_count == 1 && *first != slash::value ) - was_escape_sequence = false; - if ( append_count == 2 && *first != colon::value ) - was_escape_sequence = false; - m_append( *first ); - ++append_count; - } - - // erase escape sequence if any - if ( was_escape_sequence && append_count >= 3 ) - m_path.erase( initial_pos, 3 ); - - return *this; - } -# endif - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - - // canonize ------------------------------------------------------------// - - template - basic_path & basic_path::canonize() - { - static const typename string_type::value_type dot_str[] - = { dot::value, 0 }; - - if ( m_path.empty() ) return *this; - - path_type temp; - - for ( iterator itr( begin() ); itr != end(); ++itr ) - { - temp /= *itr; - }; - - if ( temp.empty() ) temp /= dot_str; - m_path = temp.m_path; - return *this; - } - - // normalize ------------------------------------------------------------// - - template - basic_path & basic_path::normalize() - { - static const typename string_type::value_type dot_str[] - = { dot::value, 0 }; - - if ( m_path.empty() ) return *this; - - path_type temp; - iterator start( begin() ); - iterator last( end() ); - iterator stop( last-- ); - for ( iterator itr( start ); itr != stop; ++itr ) - { - // ignore "." except at start and last - if ( itr->size() == 1 - && (*itr)[0] == dot::value - && itr != start - && itr != last ) continue; - - // ignore a name and following ".." - if ( !temp.empty() - && itr->size() == 2 - && (*itr)[0] == dot::value - && (*itr)[1] == dot::value ) // dot dot - { - string_type lf( temp.filename() ); - if ( lf.size() > 0 - && (lf.size() != 1 - || (lf[0] != dot::value - && lf[0] != slash::value)) - && (lf.size() != 2 - || (lf[0] != dot::value - && lf[1] != dot::value -# ifdef BOOST_WINDOWS_PATH - && lf[1] != colon::value -# endif - ) - ) - ) - { - temp.remove_filename(); - // if not root directory, must also remove "/" if any - if ( temp.m_path.size() > 0 - && temp.m_path[temp.m_path.size()-1] - == slash::value ) - { - typename string_type::size_type rds( - detail::root_directory_start( temp.m_path, - temp.m_path.size() ) ); - if ( rds == string_type::npos - || rds != temp.m_path.size()-1 ) - { temp.m_path.erase( temp.m_path.size()-1 ); } - } - - iterator next( itr ); - if ( temp.empty() && ++next != stop - && next == last && *last == dot_str ) temp /= dot_str; - continue; - } - } - - temp /= *itr; - }; - - if ( temp.empty() ) temp /= dot_str; - m_path = temp.m_path; - return *this; - } - -# endif - - // modifiers ------------------------------------------------------------// - - template - basic_path & basic_path::remove_filename() - { - m_path.erase( - detail::filename_pos( m_path, m_path.size() ) ); - return *this; - } - - template - basic_path & - basic_path::replace_extension( const string_type & new_ext ) - { - // erase existing extension if any - string_type old_ext = extension(); - if ( !old_ext.empty() ) - m_path.erase( m_path.size() - old_ext.size() ); - - if ( !new_ext.empty() && new_ext[0] != dot::value ) - m_path += dot::value; - - m_path += new_ext; - - return *this; - } - - - // path conversion functions --------------------------------------------// - - template - const String - basic_path::file_string() const - { -# ifdef BOOST_WINDOWS_PATH - // for Windows, use the alternate separator, and bypass extra - // root separators - - typename string_type::size_type root_dir_start( - detail::root_directory_start( m_path, m_path.size() ) ); - bool in_root( root_dir_start != string_type::npos ); - String s; - for ( typename string_type::size_type pos( 0 ); - pos != m_path.size(); ++pos ) - { - // special case // [net] - if ( pos == 0 && m_path.size() > 1 - && m_path[0] == slash::value - && m_path[1] == slash::value - && ( m_path.size() == 2 - || !detail::is_separator( m_path[2] ) - ) ) - { - ++pos; - s += path_alt_separator::value; - s += path_alt_separator::value; - continue; - } - - // bypass extra root separators - if ( in_root ) - { - if ( s.size() > 0 - && s[s.size()-1] == path_alt_separator::value - && m_path[pos] == slash::value - ) continue; - } - - if ( m_path[pos] == slash::value ) - s += path_alt_separator::value; - else - s += m_path[pos]; - - if ( pos > root_dir_start - && m_path[pos] == slash::value ) - { in_root = false; } - } -# ifdef BOOST_CYGWIN_PATH - if ( m_cygwin_root ) s[0] = slash::value; -# endif - return s; -# else - return m_path; -# endif - } - - // iterator functions ---------------------------------------------------// - - template - typename basic_path::iterator basic_path::begin() const - { - iterator itr; - itr.m_path_ptr = this; - typename string_type::size_type element_size; - detail::first_element( m_path, itr.m_pos, element_size ); - itr.m_name = m_path.substr( itr.m_pos, element_size ); - return itr; - } - - template - typename basic_path::iterator basic_path::end() const - { - iterator itr; - itr.m_path_ptr = this; - itr.m_pos = m_path.size(); - return itr; - } - - namespace detail - { - // do_increment ------------------------------------------------------// - - template - void iterator_helper::do_increment( iterator & itr ) - { - typedef typename Path::string_type string_type; - typedef typename Path::traits_type traits_type; - - BOOST_ASSERT( itr.m_pos < itr.m_path_ptr->m_path.size() && "basic_path::iterator increment past end()" ); - - bool was_net( itr.m_name.size() > 2 - && itr.m_name[0] == slash::value - && itr.m_name[1] == slash::value - && itr.m_name[2] != slash::value ); - - // increment to position past current element - itr.m_pos += itr.m_name.size(); - - // if end reached, create end iterator - if ( itr.m_pos == itr.m_path_ptr->m_path.size() ) - { - itr.m_name.erase( itr.m_name.begin(), itr.m_name.end() ); // VC++ 6.0 lib didn't supply clear() - return; - } - - // process separator (Windows drive spec is only case not a separator) - if ( itr.m_path_ptr->m_path[itr.m_pos] == slash::value ) - { - // detect root directory - if ( was_net - # ifdef BOOST_WINDOWS_PATH - // case "c:/" - || itr.m_name[itr.m_name.size()-1] == colon::value - # endif - ) - { - itr.m_name = slash::value; - return; - } - - // bypass separators - while ( itr.m_pos != itr.m_path_ptr->m_path.size() - && itr.m_path_ptr->m_path[itr.m_pos] == slash::value ) - { ++itr.m_pos; } - - // detect trailing separator, and treat it as ".", per POSIX spec - if ( itr.m_pos == itr.m_path_ptr->m_path.size() - && detail::is_non_root_slash< string_type, traits_type >( - itr.m_path_ptr->m_path, itr.m_pos-1 ) ) - { - --itr.m_pos; - itr.m_name = dot::value; - return; - } - } - - // get next element - typename string_type::size_type end_pos( - itr.m_path_ptr->m_path.find( slash::value, itr.m_pos ) ); - itr.m_name = itr.m_path_ptr->m_path.substr( itr.m_pos, end_pos - itr.m_pos ); - } - - // do_decrement ------------------------------------------------------// - - template - void iterator_helper::do_decrement( iterator & itr ) - { - BOOST_ASSERT( itr.m_pos && "basic_path::iterator decrement past begin()" ); - - typedef typename Path::string_type string_type; - typedef typename Path::traits_type traits_type; - - typename string_type::size_type end_pos( itr.m_pos ); - - typename string_type::size_type root_dir_pos( - detail::root_directory_start( - itr.m_path_ptr->m_path, end_pos ) ); - - // if at end and there was a trailing non-root '/', return "." - if ( itr.m_pos == itr.m_path_ptr->m_path.size() - && itr.m_path_ptr->m_path.size() > 1 - && itr.m_path_ptr->m_path[itr.m_pos-1] == slash::value - && detail::is_non_root_slash< string_type, traits_type >( - itr.m_path_ptr->m_path, itr.m_pos-1 ) - ) - { - --itr.m_pos; - itr.m_name = dot::value; - return; - } - - // skip separators unless root directory - for ( - ; - end_pos > 0 - && (end_pos-1) != root_dir_pos - && itr.m_path_ptr->m_path[end_pos-1] == slash::value - ; - --end_pos ) {} - - itr.m_pos = detail::filename_pos - ( itr.m_path_ptr->m_path, end_pos ); - itr.m_name = itr.m_path_ptr->m_path.substr( itr.m_pos, end_pos - itr.m_pos ); - } - } // namespace detail - - // basic_filesystem_error implementation --------------------------------// - - template - basic_filesystem_error::basic_filesystem_error( - const std::string & what_arg, system::error_code ec ) - : system::system_error(ec, what_arg) - { - try - { - m_imp_ptr.reset( new m_imp ); - } - catch (...) { m_imp_ptr.reset(); } - } - - template - basic_filesystem_error::basic_filesystem_error( - const std::string & what_arg, const path_type & path1_arg, - system::error_code ec ) - : system::system_error(ec, what_arg) - { - try - { - m_imp_ptr.reset( new m_imp ); - m_imp_ptr->m_path1 = path1_arg; - } - catch (...) { m_imp_ptr.reset(); } - } - - template - basic_filesystem_error::basic_filesystem_error( - const std::string & what_arg, const path_type & path1_arg, - const path_type & path2_arg, system::error_code ec ) - : system::system_error(ec, what_arg) - { - try - { - m_imp_ptr.reset( new m_imp ); - m_imp_ptr->m_path1 = path1_arg; - m_imp_ptr->m_path2 = path2_arg; - } - catch (...) { m_imp_ptr.reset(); } - } - - } // namespace BOOST_FILESYSTEM2_NAMESPACE -} // namespace boost - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem2::basic_path; - using filesystem2::path_traits; - - using filesystem2::slash; - using filesystem2::dot; - using filesystem2::colon; - - using filesystem2::path; -# ifndef BOOST_FILESYSTEM2_NARROW_ONLY - using filesystem2::wpath_traits; - using filesystem2::wpath; - using filesystem2::wfilesystem_error; -# endif - using filesystem2::basic_filesystem_error; - using filesystem2::filesystem_error; - using filesystem2::portable_posix_name; - using filesystem2::windows_name; - using filesystem2::portable_name; - using filesystem2::portable_directory_name; - using filesystem2::portable_file_name; - using filesystem2::native; - using filesystem2::no_check; - using filesystem2::swap; - using filesystem2::operator<; - using filesystem2::operator==; - using filesystem2::operator!=; - using filesystem2::operator>; - using filesystem2::operator<=; - using filesystem2::operator>=; - using filesystem2::operator/; - using filesystem2::operator<<; - using filesystem2::operator>>; - } -} - -//----------------------------------------------------------------------------// - -#include // pops abi_prefix.hpp pragmas - -#endif // BOOST_FILESYSTEM2_PATH_HPP diff --git a/3party/boost/boost/filesystem/v3/config.hpp b/3party/boost/boost/filesystem/v3/config.hpp deleted file mode 100644 index 13fc308dbe..0000000000 --- a/3party/boost/boost/filesystem/v3/config.hpp +++ /dev/null @@ -1,85 +0,0 @@ -// boost/filesystem/v3/config.hpp ----------------------------------------------------// - -// Copyright Beman Dawes 2003 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// Library home page: http://www.boost.org/libs/filesystem - -//--------------------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM3_CONFIG_HPP -#define BOOST_FILESYSTEM3_CONFIG_HPP - -# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 3 -# error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3 -# endif - -# if !defined(BOOST_FILESYSTEM_VERSION) -# define BOOST_FILESYSTEM_VERSION 3 -# endif - -#define BOOST_FILESYSTEM_I18N // aid users wishing to compile several versions - -// This header implements separate compilation features as described in -// http://www.boost.org/more/separate_compilation.html - -#include -#include // for BOOST_POSIX_API or BOOST_WINDOWS_API -#include - -// BOOST_FILESYSTEM_DEPRECATED needed for source compiles -----------------------------// - -# ifdef BOOST_FILESYSTEM_SOURCE -# define BOOST_FILESYSTEM_DEPRECATED -# endif - -// throw an exception ----------------------------------------------------------------// -// -// Exceptions were originally thrown via boost::throw_exception(). -// As throw_exception() became more complex, it caused user error reporting -// to be harder to interpret, since the exception reported became much more complex. -// The immediate fix was to throw directly, wrapped in a macro to make any later change -// easier. - -#define BOOST_FILESYSTEM_THROW(EX) throw EX - -# if defined( BOOST_NO_STD_WSTRING ) -# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support -# endif - -// enable dynamic linking -------------------------------------------------------------// - -#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) -# if defined(BOOST_FILESYSTEM_SOURCE) -# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT -# else -# define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT -# endif -#else -# define BOOST_FILESYSTEM_DECL -#endif - -// enable automatic library variant selection ----------------------------------------// - -#if !defined(BOOST_FILESYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) \ - && !defined(BOOST_FILESYSTEM_NO_LIB) -// -// Set the name of our library, this will get undef'ed by auto_link.hpp -// once it's done with it: -// -#define BOOST_LIB_NAME boost_filesystem -// -// If we're importing code from a dll, then tell auto_link.hpp about it: -// -#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK) -# define BOOST_DYN_LINK -#endif -// -// And include the header that does the work: -// -#include -#endif // auto-linking disabled - -#endif // BOOST_FILESYSTEM3_CONFIG_HPP diff --git a/3party/boost/boost/filesystem/v3/convenience.hpp b/3party/boost/boost/filesystem/v3/convenience.hpp deleted file mode 100644 index 1a1f9435fe..0000000000 --- a/3party/boost/boost/filesystem/v3/convenience.hpp +++ /dev/null @@ -1,74 +0,0 @@ -// boost/filesystem/convenience.hpp ----------------------------------------// - -// Copyright Beman Dawes, 2002-2005 -// Copyright Vladimir Prus, 2002 -// Use, modification, and distribution is subject to 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) - -// See library home page at http://www.boost.org/libs/filesystem - -//----------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM3_CONVENIENCE_HPP -#define BOOST_FILESYSTEM3_CONVENIENCE_HPP - -#include - -# if defined( BOOST_NO_STD_WSTRING ) -# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support -# endif - -#include -#include - -#include // must be the last #include - -namespace boost -{ - namespace filesystem3 - { - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - - inline std::string extension(const path & p) - { - return p.extension().string(); - } - - inline std::string basename(const path & p) - { - return p.stem().string(); - } - - inline path change_extension( const path & p, const path & new_extension ) - { - path new_p( p ); - new_p.replace_extension( new_extension ); - return new_p; - } - -# endif - - - } // namespace filesystem3 -} // namespace boost - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - using filesystem3::extension; - using filesystem3::basename; - using filesystem3::change_extension; -# endif - } -} - -//----------------------------------------------------------------------------// - -#include // pops abi_prefix.hpp pragmas -#endif // BOOST_FILESYSTEM3_CONVENIENCE_HPP diff --git a/3party/boost/boost/filesystem/v3/exception.hpp b/3party/boost/boost/filesystem/v3/exception.hpp deleted file mode 100644 index 985cd8f715..0000000000 --- a/3party/boost/boost/filesystem/v3/exception.hpp +++ /dev/null @@ -1,9 +0,0 @@ -// boost/filesystem/exception.hpp -----------------------------------------------------// - -// Copyright Beman Dawes 2003 -// Use, modification, and distribution is subject to 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) - -// This header is no longer used. The contents have been moved to path.hpp. -// It is provided so that user code #includes do not have to be changed. diff --git a/3party/boost/boost/filesystem/v3/fstream.hpp b/3party/boost/boost/filesystem/v3/fstream.hpp deleted file mode 100644 index 60a2a3b2b4..0000000000 --- a/3party/boost/boost/filesystem/v3/fstream.hpp +++ /dev/null @@ -1,208 +0,0 @@ -// boost/filesystem/fstream.hpp ------------------------------------------------------// - -// Copyright Beman Dawes 2002 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// Library home page: http://www.boost.org/libs/filesystem - -//--------------------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM3_FSTREAM_HPP -#define BOOST_FILESYSTEM3_FSTREAM_HPP - -#include - -# if defined( BOOST_NO_STD_WSTRING ) -# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support -# endif - -#include -#include -#include - -#include // must be the last #include - -// on Windows, except for standard libaries known to have wchar_t overloads for -// file stream I/O, use path::string() to get a narrow character c_str() -#if defined(BOOST_WINDOWS_API) \ - && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION)) - // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware -# define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available -#else // use the native c_str, which will be narrow on POSIX, wide on Windows -# define BOOST_FILESYSTEM_C_STR c_str() -#endif - -namespace boost -{ -namespace filesystem3 -{ - -//--------------------------------------------------------------------------------------// -// basic_filebuf // -//--------------------------------------------------------------------------------------// - - template < class charT, class traits = std::char_traits > - class basic_filebuf : public std::basic_filebuf - { - private: // disallow copying - basic_filebuf(const basic_filebuf&); - const basic_filebuf& operator=(const basic_filebuf&); - - public: - basic_filebuf() {} - virtual ~basic_filebuf() {} - - basic_filebuf* - open(const path& p, std::ios_base::openmode mode) - { - return std::basic_filebuf::open(p.BOOST_FILESYSTEM_C_STR, mode) - ? this : 0; - } - }; - -//--------------------------------------------------------------------------------------// -// basic_ifstream // -//--------------------------------------------------------------------------------------// - - template < class charT, class traits = std::char_traits > - class basic_ifstream : public std::basic_ifstream - { - private: // disallow copying - basic_ifstream(const basic_ifstream&); - const basic_ifstream& operator=(const basic_ifstream&); - - public: - basic_ifstream() {} - - // use two signatures, rather than one signature with default second - // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) - - explicit basic_ifstream(const path& p) - : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {} - - basic_ifstream(const path& p, std::ios_base::openmode mode) - : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, mode) {} - - void open(const path& p) - { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); } - - void open(const path& p, std::ios_base::openmode mode) - { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } - - virtual ~basic_ifstream() {} - }; - -//--------------------------------------------------------------------------------------// -// basic_ofstream // -//--------------------------------------------------------------------------------------// - - template < class charT, class traits = std::char_traits > - class basic_ofstream : public std::basic_ofstream - { - private: // disallow copying - basic_ofstream(const basic_ofstream&); - const basic_ofstream& operator=(const basic_ofstream&); - - public: - basic_ofstream() {} - - // use two signatures, rather than one signature with default second - // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) - - explicit basic_ofstream(const path& p) - : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {} - - basic_ofstream(const path& p, std::ios_base::openmode mode) - : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, mode) {} - - void open(const path& p) - { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); } - - void open(const path& p, std::ios_base::openmode mode) - { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } - - virtual ~basic_ofstream() {} - }; - -//--------------------------------------------------------------------------------------// -// basic_fstream // -//--------------------------------------------------------------------------------------// - - template < class charT, class traits = std::char_traits > - class basic_fstream : public std::basic_fstream - { - private: // disallow copying - basic_fstream(const basic_fstream&); - const basic_fstream & operator=(const basic_fstream&); - - public: - basic_fstream() {} - - // use two signatures, rather than one signature with default second - // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) - - explicit basic_fstream(const path& p) - : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, - std::ios_base::in | std::ios_base::out) {} - - basic_fstream(const path& p, std::ios_base::openmode mode) - : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, mode) {} - - void open(const path& p) - { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, - std::ios_base::in | std::ios_base::out); } - - void open(const path& p, std::ios_base::openmode mode) - { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } - - virtual ~basic_fstream() {} - - }; - -//--------------------------------------------------------------------------------------// -// typedefs // -//--------------------------------------------------------------------------------------// - - typedef basic_filebuf filebuf; - typedef basic_ifstream ifstream; - typedef basic_ofstream ofstream; - typedef basic_fstream fstream; - - typedef basic_filebuf wfilebuf; - typedef basic_ifstream wifstream; - typedef basic_ofstream wofstream; - typedef basic_fstream wfstream; - -} // namespace filesystem3 -} // namespace boost - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem3::filebuf; - using filesystem3::ifstream; - using filesystem3::ofstream; - using filesystem3::fstream; - using filesystem3::wfilebuf; - using filesystem3::wifstream; - using filesystem3::wfstream; - using filesystem3::wofstream; - using filesystem3::basic_filebuf; - using filesystem3::basic_ifstream; - using filesystem3::basic_ofstream; - using filesystem3::basic_fstream; - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED -# endif - } -} - -//----------------------------------------------------------------------------// - -#include // pops abi_prefix.hpp pragmas -#endif // BOOST_FILESYSTEM3_FSTREAM_HPP diff --git a/3party/boost/boost/filesystem/v3/operations.hpp b/3party/boost/boost/filesystem/v3/operations.hpp deleted file mode 100644 index 81a7a3ff4c..0000000000 --- a/3party/boost/boost/filesystem/v3/operations.hpp +++ /dev/null @@ -1,1060 +0,0 @@ -// boost/filesystem/operations.hpp ---------------------------------------------------// - -// Copyright Beman Dawes 2002-2009 -// Copyright Jan Langer 2002 -// Copyright Dietmar Kuehl 2001 -// Copyright Vladimir Prus 2002 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// Library home page: http://www.boost.org/libs/filesystem - -//--------------------------------------------------------------------------------------// - -#ifndef BOOST_FILESYSTEM3_OPERATIONS_HPP -#define BOOST_FILESYSTEM3_OPERATIONS_HPP - -#include - -# if defined( BOOST_NO_STD_WSTRING ) -# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support -# endif - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include // for pair -#include -#include -#include - -#ifdef BOOST_WINDOWS_API -# include -#endif - -#include // must be the last #include - -//--------------------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem3 - { - -//--------------------------------------------------------------------------------------// -// // -// support classes and enums // -// // -//--------------------------------------------------------------------------------------// - - enum file_type - { - status_error, -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - status_unknown = status_error, -# endif - file_not_found, - regular_file, - directory_file, - // the following may not apply to some operating systems or file systems - symlink_file, - block_file, - character_file, - fifo_file, - socket_file, - reparse_file, // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink - type_unknown, // file does exist, but isn't one of the above types or - // we don't have strong enough permission to find its type - - _detail_directory_symlink // internal use only; never exposed to users - }; - - class BOOST_FILESYSTEM_DECL file_status - { - public: - file_status() : m_value(status_error) {} - explicit file_status(file_type v) : m_value(v) {} - - void type(file_type v) { m_value = v; } - file_type type() const { return m_value; } - - bool operator==(const file_status& rhs) const { return type() == rhs.type(); } - bool operator!=(const file_status& rhs) const { return !(*this == rhs); } - - private: - // the internal representation is unspecified so that additional state - // information such as permissions can be added in the future; this - // implementation just uses file_type as the internal representation - - file_type m_value; - }; - - inline bool status_known(file_status f) { return f.type() != status_error; } - inline bool exists(file_status f) { return f.type() != status_error - && f.type() != file_not_found; } - inline bool is_regular_file(file_status f){ return f.type() == regular_file; } - inline bool is_directory(file_status f) { return f.type() == directory_file; } - inline bool is_symlink(file_status f) { return f.type() == symlink_file; } - inline bool is_other(file_status f) { return exists(f) && !is_regular_file(f) - && !is_directory(f) && !is_symlink(f); } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline bool is_regular(file_status f) { return f.type() == regular_file; } -# endif - - struct space_info - { - // all values are byte counts - boost::uintmax_t capacity; - boost::uintmax_t free; // <= capacity - boost::uintmax_t available; // <= free - }; - - BOOST_SCOPED_ENUM_START(copy_option) - {none, fail_if_exists = none, overwrite_if_exists}; - BOOST_SCOPED_ENUM_END - -//--------------------------------------------------------------------------------------// -// implementation details // -//--------------------------------------------------------------------------------------// - - namespace detail - { - BOOST_FILESYSTEM_DECL - file_status status(const path&p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - file_status symlink_status(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - bool is_empty(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - path initial_path(system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void copy(const path& from, const path& to, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void copy_directory(const path& from, const path& to, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void copy_file(const path& from, const path& to, - BOOST_SCOPED_ENUM(copy_option) option, // See ticket #2925 - system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - bool create_directories(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - bool create_directory(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void create_directory_symlink(const path& to, const path& from, - system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void create_hard_link(const path& to, const path& from, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void create_symlink(const path& to, const path& from, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - path current_path(system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void current_path(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - bool equivalent(const path& p1, const path& p2, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - boost::uintmax_t file_size(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - boost::uintmax_t hard_link_count(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - std::time_t last_write_time(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void last_write_time(const path& p, const std::time_t new_time, - system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - path read_symlink(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - // For standardization, if the committee doesn't like "remove", consider "eliminate" - bool remove(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - boost::uintmax_t remove_all(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void rename(const path& old_p, const path& new_p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - void resize_file(const path& p, uintmax_t size, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - space_info space(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - path system_complete(const path& p, system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - path temp_directory_path(system::error_code* ec=0); - BOOST_FILESYSTEM_DECL - path unique_path(const path& p, system::error_code* ec=0); - } // namespace detail - -//--------------------------------------------------------------------------------------// -// // -// status query functions // -// // -//--------------------------------------------------------------------------------------// - - inline - file_status status(const path& p) {return detail::status(p);} - inline - file_status status(const path& p, system::error_code& ec) - {return detail::status(p, &ec);} - inline - file_status symlink_status(const path& p) {return detail::symlink_status(p);} - inline - file_status symlink_status(const path& p, system::error_code& ec) - {return detail::symlink_status(p, &ec);} - inline - bool exists(const path& p) {return exists(detail::status(p));} - inline - bool exists(const path& p, system::error_code& ec) - {return exists(detail::status(p, &ec));} - inline - bool is_directory(const path& p) {return is_directory(detail::status(p));} - inline - bool is_directory(const path& p, system::error_code& ec) - {return is_directory(detail::status(p, &ec));} - inline - bool is_regular_file(const path& p) {return is_regular_file(detail::status(p));} - inline - bool is_regular_file(const path& p, system::error_code& ec) - {return is_regular_file(detail::status(p, &ec));} - inline - bool is_other(const path& p) {return is_other(detail::status(p));} - inline - bool is_other(const path& p, system::error_code& ec) - {return is_other(detail::status(p, &ec));} - inline - bool is_symlink(const path& p) {return is_symlink(detail::symlink_status(p));} - inline - bool is_symlink(const path& p, system::error_code& ec) - {return is_symlink(detail::symlink_status(p, &ec));} -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline - bool is_regular(const path& p) {return is_regular(detail::status(p));} - inline - bool is_regular(const path& p, system::error_code& ec) - {return is_regular(detail::status(p, &ec));} -# endif - - inline - bool is_empty(const path& p) {return detail::is_empty(p);} - inline - bool is_empty(const path& p, system::error_code& ec) - {return detail::is_empty(p, &ec);} - -//--------------------------------------------------------------------------------------// -// // -// operational functions // -// in alphabetical order, unless otherwise noted // -// // -//--------------------------------------------------------------------------------------// - - // forward declarations - path current_path(); // fwd declaration - path initial_path(); - - BOOST_FILESYSTEM_DECL - path absolute(const path& p, const path& base=current_path()); - // If base.is_absolute(), throws nothing. Thus no need for ec argument - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline - path complete(const path& p) - { - return absolute(p, initial_path()); - } - - inline - path complete(const path& p, const path& base) - { - return absolute(p, base); - } -# endif - - inline - void copy(const path& from, const path& to) {detail::copy(from, to);} - - inline - void copy(const path& from, const path& to, system::error_code& ec) - {detail::copy(from, to, &ec);} - inline - void copy_directory(const path& from, const path& to) - {detail::copy_directory(from, to);} - inline - void copy_directory(const path& from, const path& to, system::error_code& ec) - {detail::copy_directory(from, to, &ec);} - inline - void copy_file(const path& from, const path& to, // See ticket #2925 - BOOST_SCOPED_ENUM(copy_option) option) - {detail::copy_file(from, to, option);} - inline - void copy_file(const path& from, const path& to) - {detail::copy_file(from, to, copy_option::fail_if_exists);} - inline - void copy_file(const path& from, const path& to, // See ticket #2925 - BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec) - {detail::copy_file(from, to, option, &ec);} - inline - void copy_file(const path& from, const path& to, system::error_code& ec) - {detail::copy_file(from, to, copy_option::fail_if_exists, &ec);} - inline - void copy_symlink(const path& existing_symlink, const path& new_symlink) {detail::copy_symlink(existing_symlink, new_symlink);} - - inline - void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec) - {detail::copy_symlink(existing_symlink, new_symlink, &ec);} - inline - bool create_directories(const path& p) {return detail::create_directories(p);} - - inline - bool create_directories(const path& p, system::error_code& ec) - {return detail::create_directories(p, &ec);} - inline - bool create_directory(const path& p) {return detail::create_directory(p);} - - inline - bool create_directory(const path& p, system::error_code& ec) - {return detail::create_directory(p, &ec);} - inline - void create_directory_symlink(const path& to, const path& from) - {detail::create_directory_symlink(to, from);} - inline - void create_directory_symlink(const path& to, const path& from, system::error_code& ec) - {detail::create_directory_symlink(to, from, &ec);} - inline - void create_hard_link(const path& to, const path& new_hard_link) {detail::create_hard_link(to, new_hard_link);} - - inline - void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec) - {detail::create_hard_link(to, new_hard_link, &ec);} - inline - void create_symlink(const path& to, const path& new_symlink) {detail::create_symlink(to, new_symlink);} - - inline - void create_symlink(const path& to, const path& new_symlink, system::error_code& ec) - {detail::create_symlink(to, new_symlink, &ec);} - inline - path current_path() {return detail::current_path();} - - inline - path current_path(system::error_code& ec) {return detail::current_path(&ec);} - - inline - void current_path(const path& p) {detail::current_path(p);} - - inline - void current_path(const path& p, system::error_code& ec) {detail::current_path(p, &ec);} - - inline - bool equivalent(const path& p1, const path& p2) {return detail::equivalent(p1, p2);} - - inline - bool equivalent(const path& p1, const path& p2, system::error_code& ec) - {return detail::equivalent(p1, p2, &ec);} - inline - boost::uintmax_t file_size(const path& p) {return detail::file_size(p);} - - inline - boost::uintmax_t file_size(const path& p, system::error_code& ec) - {return detail::file_size(p, &ec);} - inline - boost::uintmax_t hard_link_count(const path& p) {return detail::hard_link_count(p);} - - inline - boost::uintmax_t hard_link_count(const path& p, system::error_code& ec) - {return detail::hard_link_count(p, &ec);} - inline - path initial_path() {return detail::initial_path();} - - inline - path initial_path(system::error_code& ec) {return detail::initial_path(&ec);} - - template - path initial_path() {return initial_path();} - template - path initial_path(system::error_code& ec) {return detail::initial_path(&ec);} - - inline - std::time_t last_write_time(const path& p) {return detail::last_write_time(p);} - - inline - std::time_t last_write_time(const path& p, system::error_code& ec) - {return detail::last_write_time(p, &ec);} - inline - void last_write_time(const path& p, const std::time_t new_time) - {detail::last_write_time(p, new_time);} - inline - void last_write_time(const path& p, const std::time_t new_time, system::error_code& ec) - {detail::last_write_time(p, new_time, &ec);} - inline - path read_symlink(const path& p) {return detail::read_symlink(p);} - - inline - path read_symlink(const path& p, system::error_code& ec) - {return detail::read_symlink(p, &ec);} - inline - // For standardization, if the committee doesn't like "remove", consider "eliminate" - bool remove(const path& p) {return detail::remove(p);} - - inline - bool remove(const path& p, system::error_code& ec) {return detail::remove(p, &ec);} - - inline - boost::uintmax_t remove_all(const path& p) {return detail::remove_all(p);} - - inline - boost::uintmax_t remove_all(const path& p, system::error_code& ec) - {return detail::remove_all(p, &ec);} - inline - void rename(const path& old_p, const path& new_p) {detail::rename(old_p, new_p);} - - inline - void rename(const path& old_p, const path& new_p, system::error_code& ec) - {detail::rename(old_p, new_p, &ec);} - inline // name suggested by Scott McMurray - void resize_file(const path& p, uintmax_t size) {detail::resize_file(p, size);} - - inline - void resize_file(const path& p, uintmax_t size, system::error_code& ec) - {detail::resize_file(p, size, &ec);} - inline - space_info space(const path& p) {return detail::space(p);} - - inline - space_info space(const path& p, system::error_code& ec) {return detail::space(p, &ec);} - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - inline bool symbolic_link_exists(const path& p) - { return is_symlink(symlink_status(p)); } -# endif - - inline - path system_complete(const path& p) {return detail::system_complete(p);} - - inline - path system_complete(const path& p, system::error_code& ec) - {return detail::system_complete(p, &ec);} - inline - path temp_directory_path() {return detail::temp_directory_path();} - - inline - path temp_directory_path(system::error_code& ec) - {return detail::temp_directory_path(&ec);} - inline - path unique_path(const path& p="%%%%-%%%%-%%%%-%%%%") - { return detail::unique_path(p); } - inline - path unique_path(const path& p, system::error_code& ec) - { return detail::unique_path(p, &ec); } - -//--------------------------------------------------------------------------------------// -// // -// directory_entry // -// // -//--------------------------------------------------------------------------------------// - -// GCC has a problem with a member function named path within a namespace or -// sub-namespace that also has a class named path. The workaround is to always -// fully qualify the name path when it refers to the class name. - -class BOOST_FILESYSTEM_DECL directory_entry -{ -public: - - // compiler generated copy constructor, copy assignment, and destructor apply - - directory_entry() {} - explicit directory_entry(const boost::filesystem::path& p, - file_status st = file_status(), file_status symlink_st=file_status()) - : m_path(p), m_status(st), m_symlink_status(symlink_st) - {} - - void assign(const boost::filesystem::path& p, - file_status st = file_status(), file_status symlink_st = file_status()) - { m_path = p; m_status = st; m_symlink_status = symlink_st; } - - void replace_filename(const boost::filesystem::path& p, - file_status st = file_status(), file_status symlink_st = file_status()) - { - m_path.remove_filename(); - m_path /= p; - m_status = st; - m_symlink_status = symlink_st; - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - void replace_leaf(const boost::filesystem::path& p, - file_status st, file_status symlink_st) - { replace_filename(p, st, symlink_st); } -# endif - - const boost::filesystem::path& path() const {return m_path;} - file_status status() const {return m_get_status();} - file_status status(system::error_code& ec) const {return m_get_status(&ec);} - file_status symlink_status() const {return m_get_symlink_status();} - file_status symlink_status(system::error_code& ec) const {return m_get_symlink_status(&ec);} - - bool operator==(const directory_entry& rhs) {return m_path == rhs.m_path;} - bool operator!=(const directory_entry& rhs) {return m_path != rhs.m_path;} - bool operator< (const directory_entry& rhs) {return m_path < rhs.m_path;} - bool operator<=(const directory_entry& rhs) {return m_path <= rhs.m_path;} - bool operator> (const directory_entry& rhs) {return m_path > rhs.m_path;} - bool operator>=(const directory_entry& rhs) {return m_path >= rhs.m_path;} - -private: - boost::filesystem::path m_path; - mutable file_status m_status; // stat()-like - mutable file_status m_symlink_status; // lstat()-like - - file_status m_get_status(system::error_code* ec=0) const; - file_status m_get_symlink_status(system::error_code* ec=0) const; -}; // directory_entry - -//--------------------------------------------------------------------------------------// -// // -// directory_iterator helpers // -// // -//--------------------------------------------------------------------------------------// - -class directory_iterator; - -namespace detail -{ - BOOST_FILESYSTEM_DECL - system::error_code dir_itr_close(// never throws() - void *& handle -# if defined(BOOST_POSIX_API) - , void *& buffer -# endif - ); - - struct dir_itr_imp - { - directory_entry dir_entry; - void* handle; - -# ifdef BOOST_POSIX_API - void* buffer; // see dir_itr_increment implementation -# endif - - dir_itr_imp() : handle(0) -# ifdef BOOST_POSIX_API - , buffer(0) -# endif - {} - - ~dir_itr_imp() // never throws - { - dir_itr_close(handle -# if defined(BOOST_POSIX_API) - , buffer -# endif - ); - } - }; - - // see path::iterator: comment below - BOOST_FILESYSTEM_DECL void directory_iterator_construct(directory_iterator& it, - const path& p, system::error_code* ec); - BOOST_FILESYSTEM_DECL void directory_iterator_increment(directory_iterator& it, - system::error_code* ec); - -} // namespace detail - -//--------------------------------------------------------------------------------------// -// // -// directory_iterator // -// // -//--------------------------------------------------------------------------------------// - - class directory_iterator - : public boost::iterator_facade< directory_iterator, - directory_entry, - boost::single_pass_traversal_tag > - { - public: - - directory_iterator(){} // creates the "end" iterator - - // iterator_facade derived classes don't seem to like implementations in - // separate translation unit dll's, so forward to detail functions - explicit directory_iterator(const path& p) - : m_imp(new detail::dir_itr_imp) - { detail::directory_iterator_construct(*this, p, 0); } - - directory_iterator(const path& p, system::error_code& ec) - : m_imp(new detail::dir_itr_imp) - { detail::directory_iterator_construct(*this, p, &ec); } - - ~directory_iterator() {} // never throws - - directory_iterator& increment(system::error_code& ec) - { - detail::directory_iterator_increment(*this, &ec); - return *this; - } - - private: - friend struct detail::dir_itr_imp; - friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_construct(directory_iterator& it, - const path& p, system::error_code* ec); - friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_increment(directory_iterator& it, - system::error_code* ec); - - // shared_ptr provides shallow-copy semantics required for InputIterators. - // m_imp.get()==0 indicates the end iterator. - boost::shared_ptr< detail::dir_itr_imp > m_imp; - - friend class boost::iterator_core_access; - - boost::iterator_facade< - directory_iterator, - directory_entry, - boost::single_pass_traversal_tag >::reference dereference() const - { - BOOST_ASSERT_MSG(m_imp.get(), "attempt to dereference end iterator"); - return m_imp->dir_entry; - } - - void increment() { detail::directory_iterator_increment(*this, 0); } - - bool equal(const directory_iterator& rhs) const - { return m_imp == rhs.m_imp; } - }; - -//--------------------------------------------------------------------------------------// -// // -// recursive_directory_iterator helpers // -// // -//--------------------------------------------------------------------------------------// - - BOOST_SCOPED_ENUM_START(symlink_option) - { - none, - no_recurse = none, // don't follow directory symlinks (default behavior) - recurse, // follow directory symlinks - _detail_no_push = recurse << 1 // internal use only - }; - BOOST_SCOPED_ENUM_END - - BOOST_BITMASK(BOOST_SCOPED_ENUM(symlink_option)) - - namespace detail - { - struct recur_dir_itr_imp - { - typedef directory_iterator element_type; - std::stack< element_type, std::vector< element_type > > m_stack; - int m_level; - BOOST_SCOPED_ENUM(symlink_option) m_options; - - recur_dir_itr_imp() : m_level(0), m_options(symlink_option::none) {} - - void increment(system::error_code* ec); // ec == 0 means throw on error - - void pop(); - - }; - - // Implementation is inline to avoid dynamic linking difficulties with m_stack: - // Microsoft warning C4251, m_stack needs to have dll-interface to be used by - // clients of struct 'boost::filesystem::detail::recur_dir_itr_imp' - - inline - void recur_dir_itr_imp::increment(system::error_code* ec) - // ec == 0 means throw on error - { - if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push) - m_options &= ~symlink_option::_detail_no_push; - else if (is_directory(m_stack.top()->status()) - && (!is_symlink(m_stack.top()->symlink_status()) - || (m_options & symlink_option::recurse) == symlink_option::recurse)) - { - if (ec == 0) - m_stack.push(directory_iterator(m_stack.top()->path())); - else - { - m_stack.push(directory_iterator(m_stack.top()->path(), *ec)); - if (*ec) return; - } - if (m_stack.top() != directory_iterator()) - { - ++m_level; - return; - } - m_stack.pop(); - } - - while (!m_stack.empty() && ++m_stack.top() == directory_iterator()) - { - m_stack.pop(); - --m_level; - } - } - - inline - void recur_dir_itr_imp::pop() - { - BOOST_ASSERT_MSG(m_level > 0, - "pop() on recursive_directory_iterator with level < 1"); - - do - { - m_stack.pop(); - --m_level; - } - while (!m_stack.empty() && ++m_stack.top() == directory_iterator()); - } - } // namespace detail - -//--------------------------------------------------------------------------------------// -// // -// recursive_directory_iterator // -// // -//--------------------------------------------------------------------------------------// - - class recursive_directory_iterator - : public boost::iterator_facade< - recursive_directory_iterator, - directory_entry, - boost::single_pass_traversal_tag > - { - public: - - recursive_directory_iterator(){} // creates the "end" iterator - - explicit recursive_directory_iterator(const path& dir_path, - BOOST_SCOPED_ENUM(symlink_option) opt = symlink_option::none) - : m_imp(new detail::recur_dir_itr_imp) - { - m_imp->m_options = opt; - m_imp->m_stack.push(directory_iterator(dir_path)); - if (m_imp->m_stack.top() == directory_iterator()) - { m_imp.reset (); } - } - - recursive_directory_iterator(const path& dir_path, - BOOST_SCOPED_ENUM(symlink_option) opt, - system::error_code & ec) - : m_imp(new detail::recur_dir_itr_imp) - { - m_imp->m_options = opt; - m_imp->m_stack.push(directory_iterator(dir_path, ec)); - if (m_imp->m_stack.top() == directory_iterator()) - { m_imp.reset (); } - } - - recursive_directory_iterator(const path& dir_path, - system::error_code & ec) - : m_imp(new detail::recur_dir_itr_imp) - { - m_imp->m_options = symlink_option::none; - m_imp->m_stack.push(directory_iterator(dir_path, ec)); - if (m_imp->m_stack.top() == directory_iterator()) - { m_imp.reset (); } - } - - recursive_directory_iterator& increment(system::error_code& ec) - { - BOOST_ASSERT_MSG(m_imp.get(), - "increment() on end recursive_directory_iterator"); - m_imp->increment(&ec); - return *this; - } - - int level() const - { - BOOST_ASSERT_MSG(m_imp.get(), - "level() on end recursive_directory_iterator"); - return m_imp->m_level; - } - - bool no_push_pending() const - { - BOOST_ASSERT_MSG(m_imp.get(), - "is_no_push_requested() on end recursive_directory_iterator"); - return (m_imp->m_options & symlink_option::_detail_no_push) - == symlink_option::_detail_no_push; - } - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - bool no_push_request() const { return no_push_pending(); } -# endif - - void pop() - { - BOOST_ASSERT_MSG(m_imp.get(), - "pop() on end recursive_directory_iterator"); - m_imp->pop(); - if (m_imp->m_stack.empty()) m_imp.reset(); // done, so make end iterator - } - - void no_push(bool value=true) - { - BOOST_ASSERT_MSG(m_imp.get(), - "no_push() on end recursive_directory_iterator"); - if (value) - m_imp->m_options |= symlink_option::_detail_no_push; - else - m_imp->m_options &= ~symlink_option::_detail_no_push; - } - - file_status status() const - { - BOOST_ASSERT_MSG(m_imp.get(), - "status() on end recursive_directory_iterator"); - return m_imp->m_stack.top()->status(); - } - - file_status symlink_status() const - { - BOOST_ASSERT_MSG(m_imp.get(), - "symlink_status() on end recursive_directory_iterator"); - return m_imp->m_stack.top()->symlink_status(); - } - - private: - - // shared_ptr provides shallow-copy semantics required for InputIterators. - // m_imp.get()==0 indicates the end iterator. - boost::shared_ptr< detail::recur_dir_itr_imp > m_imp; - - friend class boost::iterator_core_access; - - boost::iterator_facade< - recursive_directory_iterator, - directory_entry, - boost::single_pass_traversal_tag >::reference - dereference() const - { - BOOST_ASSERT_MSG(m_imp.get(), - "dereference of end recursive_directory_iterator"); - return *m_imp->m_stack.top(); - } - - void increment() - { - BOOST_ASSERT_MSG(m_imp.get(), - "increment of end recursive_directory_iterator"); - m_imp->increment(0); - if (m_imp->m_stack.empty()) - m_imp.reset(); // done, so make end iterator - } - - bool equal(const recursive_directory_iterator& rhs) const - { return m_imp == rhs.m_imp; } - - }; - -# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) - typedef recursive_directory_iterator wrecursive_directory_iterator; -# endif - -//--------------------------------------------------------------------------------------// -// // -// class filesystem_error // -// // -//--------------------------------------------------------------------------------------// - - class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error - { - // see http://www.boost.org/more/error_handling.html for design rationale - - // all functions are inline to avoid issues with crossing dll boundaries - - public: - // compiler generates copy constructor and copy assignment - - filesystem_error( - const std::string & what_arg, system::error_code ec) - : system::system_error(ec, what_arg) - { - try - { - m_imp_ptr.reset(new m_imp); - } - catch (...) { m_imp_ptr.reset(); } - } - - filesystem_error( - const std::string & what_arg, const path& path1_arg, - system::error_code ec) - : system::system_error(ec, what_arg) - { - try - { - m_imp_ptr.reset(new m_imp); - m_imp_ptr->m_path1 = path1_arg; - } - catch (...) { m_imp_ptr.reset(); } - } - - filesystem_error( - const std::string & what_arg, const path& path1_arg, - const path& path2_arg, system::error_code ec) - : system::system_error(ec, what_arg) - { - try - { - m_imp_ptr.reset(new m_imp); - m_imp_ptr->m_path1 = path1_arg; - m_imp_ptr->m_path2 = path2_arg; - } - catch (...) { m_imp_ptr.reset(); } - } - - ~filesystem_error() throw() {} - - const path& path1() const - { - static const path empty_path; - return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path ; - } - const path& path2() const - { - static const path empty_path; - return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path ; - } - - const char* what() const throw() - { - if (!m_imp_ptr.get()) - return system::system_error::what(); - - try - { - if (m_imp_ptr->m_what.empty()) - { - m_imp_ptr->m_what = system::system_error::what(); - if (!m_imp_ptr->m_path1.empty()) - { - m_imp_ptr->m_what += ": \""; - m_imp_ptr->m_what += m_imp_ptr->m_path1.string(); - m_imp_ptr->m_what += "\""; - } - if (!m_imp_ptr->m_path2.empty()) - { - m_imp_ptr->m_what += ", \""; - m_imp_ptr->m_what += m_imp_ptr->m_path2.string(); - m_imp_ptr->m_what += "\""; - } - } - return m_imp_ptr->m_what.c_str(); - } - catch (...) - { - return system::system_error::what(); - } - } - - private: - struct m_imp - { - path m_path1; // may be empty() - path m_path2; // may be empty() - std::string m_what; // not built until needed - }; - boost::shared_ptr m_imp_ptr; - }; - -// test helper -----------------------------------------------------------------------// - -// Not part of the documented interface since false positives are possible; -// there is no law that says that an OS that has large stat.st_size -// actually supports large file sizes. - - namespace detail - { - BOOST_FILESYSTEM_DECL bool possible_large_file_size_support(); - } - - } // namespace filesystem3 -} // namespace boost - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem3::absolute; - using filesystem3::block_file; - using filesystem3::character_file; -// using filesystem3::copy; - using filesystem3::copy_file; - using filesystem3::copy_option; - using filesystem3::copy_symlink; - using filesystem3::create_directories; - using filesystem3::create_directory; - using filesystem3::create_hard_link; - using filesystem3::create_symlink; - using filesystem3::create_directory_symlink; - using filesystem3::current_path; - using filesystem3::directory_entry; - using filesystem3::directory_file; - using filesystem3::directory_iterator; - using filesystem3::equivalent; - using filesystem3::exists; - using filesystem3::fifo_file; - using filesystem3::file_not_found; - using filesystem3::file_size; - using filesystem3::file_status; - using filesystem3::file_type; - using filesystem3::filesystem_error; - using filesystem3::hard_link_count; - using filesystem3::initial_path; - using filesystem3::is_directory; - using filesystem3::is_directory; - using filesystem3::is_empty; - using filesystem3::is_other; - using filesystem3::is_regular_file; - using filesystem3::is_symlink; - using filesystem3::last_write_time; - using filesystem3::read_symlink; - using filesystem3::recursive_directory_iterator; - using filesystem3::regular_file; - using filesystem3::reparse_file; - using filesystem3::remove; - using filesystem3::remove_all; - using filesystem3::rename; - using filesystem3::resize_file; - using filesystem3::socket_file; - using filesystem3::space; - using filesystem3::space_info; - using filesystem3::status; - using filesystem3::status_error; - using filesystem3::status_known; - using filesystem3::symlink_file; - using filesystem3::symlink_option; - using filesystem3::symlink_status; - using filesystem3::system_complete; - using filesystem3::temp_directory_path; - using filesystem3::type_unknown; - using filesystem3::unique_path; -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - using filesystem3::is_regular; - using filesystem3::status_unknown; - using filesystem3::symbolic_link_exists; - //using filesystem3::wdirectory_iterator; - //using filesystem3::wdirectory_entry; -# endif - namespace detail - { - using filesystem3::detail::possible_large_file_size_support; - } - } -} - -#include // pops abi_prefix.hpp pragmas -#endif // BOOST_FILESYSTEM3_OPERATIONS_HPP diff --git a/3party/boost/boost/filesystem/v3/path.hpp b/3party/boost/boost/filesystem/v3/path.hpp deleted file mode 100644 index de09c6b67f..0000000000 --- a/3party/boost/boost/filesystem/v3/path.hpp +++ /dev/null @@ -1,724 +0,0 @@ -// filesystem path.hpp ---------------------------------------------------------------// - -// Copyright Beman Dawes 2002-2005, 2009 -// Copyright Vladimir Prus 2002 - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -// Library home page: http://www.boost.org/libs/filesystem - -// path::stem(), extension(), and replace_extension() are based on -// basename(), extension(), and change_extension() from the original -// filesystem/convenience.hpp header by Vladimir Prus. - -#ifndef BOOST_FILESYSTEM_PATH_HPP -#define BOOST_FILESYSTEM_PATH_HPP - -#include - -# if defined( BOOST_NO_STD_WSTRING ) -# error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support -# endif - -#include -#include // includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include // must be the last #include - -namespace boost -{ -namespace filesystem3 -{ - //------------------------------------------------------------------------------------// - // // - // class path // - // // - //------------------------------------------------------------------------------------// - - class BOOST_FILESYSTEM_DECL path - { - public: - - // value_type is the character type used by the operating system API to - // represent paths. - -# ifdef BOOST_WINDOWS_API - typedef wchar_t value_type; -# else - typedef char value_type; -# endif - typedef std::basic_string string_type; - typedef std::codecvt codecvt_type; - - - // ----- character encoding conversions ----- - - // Following the principle of least astonishment, path input arguments - // passed to or obtained from the operating system via objects of - // class path behave as if they were directly passed to or - // obtained from the O/S API, unless conversion is explicitly requested. - // - // POSIX specfies that path strings are passed unchanged to and from the - // API. Note that this is different from the POSIX command line utilities, - // which convert according to a locale. - // - // Thus for POSIX, char strings do not undergo conversion. wchar_t strings - // are converted to/from char using the path locale or, if a conversion - // argument is given, using a conversion object modeled on - // std::wstring_convert. - // - // The path locale, which is global to the thread, can be changed by the - // imbue() function. It is initialized to an implementation defined locale. - // - // For Windows, wchar_t strings do not undergo conversion. char strings - // are converted using the "ANSI" or "OEM" code pages, as determined by - // the AreFileApisANSI() function, or, if a conversion argument is given, - // using a conversion object modeled on std::wstring_convert. - // - // See m_pathname comments for further important rationale. - - // TODO: rules needed for operating systems that use / or . - // differently, or format directory paths differently from file paths. - // - // ************************************************************************ - // - // More work needed: How to handle an operating system that may have - // slash characters or dot characters in valid filenames, either because - // it doesn't follow the POSIX standard, or because it allows MBCS - // filename encodings that may contain slash or dot characters. For - // example, ISO/IEC 2022 (JIS) encoding which allows switching to - // JIS x0208-1983 encoding. A valid filename in this set of encodings is - // 0x1B 0x24 0x42 [switch to X0208-1983] 0x24 0x2F [U+304F Kiragana letter KU] - // ^^^^ - // Note that 0x2F is the ASCII slash character - // - // ************************************************************************ - - // Supported source arguments: half-open iterator range, container, c-array, - // and single pointer to null terminated string. - - // All source arguments except pointers to null terminated byte strings support - // multi-byte character strings which may have embedded nulls. Embedded null - // support is required for some Asian languages on Windows. - - // "const codecvt_type& cvt=codecvt()" default arguments are not used because some - // compilers, such as Microsoft prior to VC++ 10, do not handle defaults correctly - // in templates. - - // ----- constructors ----- - - path(){} - - path(const path& p) : m_pathname(p.m_pathname) {} - - template - path(Source const& source, - typename boost::enable_if::type> >::type* =0) - { - path_traits::dispatch(source, m_pathname, codecvt()); - } - - // Overloads for the operating system API's native character type. Rationale: - // - Avoids use of codecvt() for native value_type strings. This limits the - // impact of locale("") initialization failures on POSIX systems to programs - // that actually depend on locale(""). It further ensures that exceptions thrown - // as a result of such failues occur after main() has started, so can be caught. - // This is a partial resolution of tickets 4688, 5100, and 5289. - // - A slight optimization for a common use case, particularly on POSIX since - // value_type is char and that is the most common useage. - path(const value_type* s) : m_pathname(s) {} - path(const std::basic_string& s) : m_pathname(s) {} - - template - path(Source const& source, const codecvt_type& cvt) - // see note above explaining why codecvt() default arguments are not used - { - path_traits::dispatch(source, m_pathname, cvt); - } - - template - path(InputIterator begin, InputIterator end) - { - if (begin != end) - { - std::basic_string::value_type> - s(begin, end); - path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, codecvt()); - } - } - - template - path(InputIterator begin, InputIterator end, const codecvt_type& cvt) - { - if (begin != end) - { - std::basic_string::value_type> - s(begin, end); - path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); - } - } - - // ----- assignments ----- - - path& operator=(const path& p) - { - m_pathname = p.m_pathname; - return *this; - } - - template - typename boost::enable_if::type>, path&>::type - operator=(Source const& source) - { - m_pathname.clear(); - path_traits::dispatch(source, m_pathname, codecvt()); - return *this; - } - - template - path& assign(Source const& source, const codecvt_type& cvt) - { - m_pathname.clear(); - path_traits::dispatch(source, m_pathname, cvt); - return *this; - } - - template - path& assign(InputIterator begin, InputIterator end) - { - return assign(begin, end, codecvt()); - } - - template - path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt) - { - m_pathname.clear(); - if (begin != end) - { - std::basic_string::value_type> - s(begin, end); - path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); - } - return *this; - } - - // ----- appends ----- - - // if a separator is added, it is the preferred separator for the platform; - // slash for POSIX, backslash for Windows - - path& operator/=(const path& p); - - template - typename boost::enable_if::type>, path&>::type - operator/=(Source const& source) - { - return append(source, codecvt()); - } - - template - path& append(Source const& source, const codecvt_type& cvt); - - template - path& append(InputIterator begin, InputIterator end) - { - return append(begin, end, codecvt()); - } - - template - path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt); - - // ----- modifiers ----- - - void clear() { m_pathname.clear(); } - path& make_preferred() -# ifdef BOOST_POSIX_API - { return *this; } // POSIX no effect -# else // BOOST_WINDOWS_API - ; // change slashes to backslashes -# endif - path& remove_filename(); - path& replace_extension(const path& new_extension = path()); - void swap(path& rhs) { m_pathname.swap(rhs.m_pathname); } - - // ----- observers ----- - - // For operating systems that format file paths differently than directory - // paths, return values from observers are formatted as file names unless there - // is a trailing separator, in which case returns are formatted as directory - // paths. POSIX and Windows make no such distinction. - - // Implementations are permitted to return const values or const references. - - // The string or path returned by an observer are specified as being formatted - // as "native" or "generic". - // - // For POSIX, these are all the same format; slashes and backslashes are as input and - // are not modified. - // - // For Windows, native: as input; slashes and backslashes are not modified; - // this is the format of the internally stored string. - // generic: backslashes are converted to slashes - - // ----- native format observers ----- - - const string_type& native() const { return m_pathname; } // Throws: nothing - const value_type* c_str() const { return m_pathname.c_str(); } // Throws: nothing - - template - String string() const; - - template - String string(const codecvt_type& cvt) const; - -# ifdef BOOST_WINDOWS_API - const std::string string() const { return string(codecvt()); } - const std::string string(const codecvt_type& cvt) const - { - std::string tmp; - if (!m_pathname.empty()) - path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(), - tmp, cvt); - return tmp; - } - - // string_type is std::wstring, so there is no conversion - const std::wstring& wstring() const { return m_pathname; } - const std::wstring& wstring(const codecvt_type&) const { return m_pathname; } - -# else // BOOST_POSIX_API - // string_type is std::string, so there is no conversion - const std::string& string() const { return m_pathname; } - const std::string& string(const codecvt_type&) const { return m_pathname; } - - const std::wstring wstring() const { return wstring(codecvt()); } - const std::wstring wstring(const codecvt_type& cvt) const - { - std::wstring tmp; - if (!m_pathname.empty()) - path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(), - tmp, cvt); - return tmp; - } - -# endif - - // ----- generic format observers ----- - - template - String generic_string() const; - - template - String generic_string(const codecvt_type& cvt) const; - -# ifdef BOOST_WINDOWS_API - const std::string generic_string() const { return generic_string(codecvt()); } - const std::string generic_string(const codecvt_type& cvt) const; - const std::wstring generic_wstring() const; - const std::wstring generic_wstring(const codecvt_type&) const { return generic_wstring(); }; - -# else // BOOST_POSIX_API - // On POSIX-like systems, the generic format is the same as the native format - const std::string& generic_string() const { return m_pathname; } - const std::string& generic_string(const codecvt_type&) const { return m_pathname; } - const std::wstring generic_wstring() const { return wstring(codecvt()); } - const std::wstring generic_wstring(const codecvt_type& cvt) const { return wstring(cvt); } - -# endif - - // ----- decomposition ----- - - path root_path() const; - path root_name() const; // returns 0 or 1 element path - // even on POSIX, root_name() is non-empty() for network paths - path root_directory() const; // returns 0 or 1 element path - path relative_path() const; - path parent_path() const; - path filename() const; // returns 0 or 1 element path - path stem() const; // returns 0 or 1 element path - path extension() const; // returns 0 or 1 element path - - // ----- query ----- - - bool empty() const { return m_pathname.empty(); } // name consistent with std containers - bool has_root_path() const { return has_root_directory() || has_root_name(); } - bool has_root_name() const { return !root_name().empty(); } - bool has_root_directory() const { return !root_directory().empty(); } - bool has_relative_path() const { return !relative_path().empty(); } - bool has_parent_path() const { return !parent_path().empty(); } - bool has_filename() const { return !m_pathname.empty(); } - bool has_stem() const { return !stem().empty(); } - bool has_extension() const { return !extension().empty(); } - bool is_absolute() const - { -# ifdef BOOST_WINDOWS_API - return has_root_name() && has_root_directory(); -# else - return has_root_directory(); -# endif - } - bool is_relative() const { return !is_absolute(); } - - // ----- imbue ----- - - static std::locale imbue(const std::locale& loc); - - // ----- codecvt ----- - - static const codecvt_type& codecvt() - { - return *wchar_t_codecvt_facet(); - } - - // ----- iterators ----- - - class iterator; - typedef iterator const_iterator; - - iterator begin() const; - iterator end() const; - - // ----- deprecated functions ----- - -# if defined(BOOST_FILESYSTEM_DEPRECATED) && defined(BOOST_FILESYSTEM_NO_DEPRECATED) -# error both BOOST_FILESYSTEM_DEPRECATED and BOOST_FILESYSTEM_NO_DEPRECATED are defined -# endif - -# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED) - // recently deprecated functions supplied by default - path& normalize() { return m_normalize(); } - path& remove_leaf() { return remove_filename(); } - path leaf() const { return filename(); } - path branch_path() const { return parent_path(); } - bool has_leaf() const { return !m_pathname.empty(); } - bool has_branch_path() const { return !parent_path().empty(); } - bool is_complete() const { return is_absolute(); } -# endif - -# if defined(BOOST_FILESYSTEM_DEPRECATED) - // deprecated functions with enough signature or semantic changes that they are - // not supplied by default - const std::string file_string() const { return string(); } - const std::string directory_string() const { return string(); } - const std::string native_file_string() const { return string(); } - const std::string native_directory_string() const { return string(); } - const string_type external_file_string() const { return native(); } - const string_type external_directory_string() const { return native(); } - - // older functions no longer supported - //typedef bool (*name_check)(const std::string & name); - //basic_path(const string_type& str, name_check) { operator/=(str); } - //basic_path(const typename string_type::value_type* s, name_check) - // { operator/=(s);} - //static bool default_name_check_writable() { return false; } - //static void default_name_check(name_check) {} - //static name_check default_name_check() { return 0; } - //basic_path& canonize(); -# endif - -//--------------------------------------------------------------------------------------// -// class path private members // -//--------------------------------------------------------------------------------------// - - private: -# if defined(_MSC_VER) -# pragma warning(push) // Save warning settings -# pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>' -# endif // needs to have dll-interface... -/* - m_pathname has the type, encoding, and format required by the native - operating system. Thus for POSIX and Windows there is no conversion for - passing m_pathname.c_str() to the O/S API or when obtaining a path from the - O/S API. POSIX encoding is unspecified other than for dot and slash - characters; POSIX just treats paths as a sequence of bytes. Windows - encoding is UCS-2 or UTF-16 depending on the version. -*/ - string_type m_pathname; // Windows: as input; backslashes NOT converted to slashes, - // slashes NOT converted to backslashes -# if defined(_MSC_VER) -# pragma warning(pop) // restore warning settings. -# endif - - string_type::size_type m_append_separator_if_needed(); - // Returns: If separator is to be appended, m_pathname.size() before append. Otherwise 0. - // Note: An append is never performed if size()==0, so a returned 0 is unambiguous. - - void m_erase_redundant_separator(string_type::size_type sep_pos); - string_type::size_type m_parent_path_end() const; - - path& m_normalize(); - - // Was qualified; como433beta8 reports: - // warning #427-D: qualified name is not allowed in member declaration - friend class iterator; - friend bool operator<(const path& lhs, const path& rhs); - - // see path::iterator::increment/decrement comment below - static void m_path_iterator_increment(path::iterator & it); - static void m_path_iterator_decrement(path::iterator & it); - - static const codecvt_type *& wchar_t_codecvt_facet(); - - }; // class path - -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - typedef path wpath; -# endif - - //------------------------------------------------------------------------------------// - // class path::iterator // - //------------------------------------------------------------------------------------// - - class path::iterator - : public boost::iterator_facade< - path::iterator, - path const, - boost::bidirectional_traversal_tag > - { - private: - friend class boost::iterator_core_access; - friend class boost::filesystem3::path; - friend void m_path_iterator_increment(path::iterator & it); - friend void m_path_iterator_decrement(path::iterator & it); - - const path& dereference() const { return m_element; } - - bool equal(const iterator & rhs) const - { - return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos; - } - - // iterator_facade derived classes don't seem to like implementations in - // separate translation unit dll's, so forward to class path static members - void increment() { m_path_iterator_increment(*this); } - void decrement() { m_path_iterator_decrement(*this); } - - path m_element; // current element - const path * m_path_ptr; // path being iterated over - string_type::size_type m_pos; // position of name in - // m_path_ptr->m_pathname. The - // end() iterator is indicated by - // m_pos == m_path_ptr->m_pathname.size() - }; // path::iterator - - //------------------------------------------------------------------------------------// - // // - // non-member functions // - // // - //------------------------------------------------------------------------------------// - - // std::lexicographical_compare would infinately recurse because path iterators - // yield paths, so provide a path aware version - inline bool lexicographical_compare(path::iterator first1, path::iterator last1, - path::iterator first2, path::iterator last2) - { - for (; first1 != last1 && first2 != last2 ; ++first1, ++first2) - { - if (first1->native() < first2->native()) return true; - if (first2->native() < first1->native()) return false; - } - return first1 == last1 && first2 != last2; - } - - inline bool operator<(const path& lhs, const path& rhs) - { - return lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); - } - - inline bool operator<=(const path& lhs, const path& rhs) { return !(rhs < lhs); } - inline bool operator> (const path& lhs, const path& rhs) { return rhs < lhs; } - inline bool operator>=(const path& lhs, const path& rhs) { return !(lhs < rhs); } - - // equality operators act as if comparing generic format strings, to achieve the - // effect of lexicographical_compare element by element compare. - // operator==() efficiency is a concern; a user reported the original version 2 - // !(lhs < rhs) && !(rhs < lhs) implementation caused a serious performance problem - // for a map of 10,000 paths. - -# ifdef BOOST_WINDOWS_API - inline bool operator==(const path& lhs, const path::value_type* rhs) - { - const path::value_type* l(lhs.c_str()); - while ((*l == *rhs || (*l == L'\\' && *rhs == L'/') || (*l == L'/' && *rhs == L'\\')) - && *l) { ++l; ++rhs; } - return *l == *rhs || (*l == L'\\' && *rhs == L'/') || (*l == L'/' && *rhs == L'\\'); - } - inline bool operator==(const path& lhs, const path& rhs) { return lhs == rhs.c_str(); } - inline bool operator==(const path& lhs, const path::string_type& rhs) { return lhs == rhs.c_str(); } - inline bool operator==(const path::string_type& lhs, const path& rhs) { return rhs == lhs.c_str(); } - inline bool operator==(const path::value_type* lhs, const path& rhs) { return rhs == lhs; } -# else // BOOST_POSIX_API - inline bool operator==(const path& lhs, const path& rhs) { return lhs.native() == rhs.native(); } - inline bool operator==(const path& lhs, const path::string_type& rhs) { return lhs.native() == rhs; } - inline bool operator==(const path& lhs, const path::value_type* rhs) { return lhs.native() == rhs; } - inline bool operator==(const path::string_type& lhs, const path& rhs) { return lhs == rhs.native(); } - inline bool operator==(const path::value_type* lhs, const path& rhs) { return lhs == rhs.native(); } -# endif - - inline bool operator!=(const path& lhs, const path& rhs) { return !(lhs == rhs); } - inline bool operator!=(const path& lhs, const path::string_type& rhs) { return !(lhs == rhs); } - inline bool operator!=(const path& lhs, const path::value_type* rhs) { return !(lhs == rhs); } - inline bool operator!=(const path::string_type& lhs, const path& rhs) { return !(lhs == rhs); } - inline bool operator!=(const path::value_type* lhs, const path& rhs) { return !(lhs == rhs); } - - inline void swap(path& lhs, path& rhs) { lhs.swap(rhs); } - - inline path operator/(const path& lhs, const path& rhs) { return path(lhs) /= rhs; } - - // inserters and extractors - // use boost::io::quoted() to handle spaces in paths - // use '&' as escape character to ease use for Windows paths - - template - inline std::basic_ostream& - operator<<(std::basic_ostream& os, const path& p) - { - return os - << boost::io::quoted(p.string >(), static_cast('&')); - } - - template - inline std::basic_istream& - operator>>(std::basic_istream& is, path& p) - { - std::basic_string str; - is >> boost::io::quoted(str, static_cast('&')); - p = str; - return is; - } - - // name_checks - - // These functions are holdovers from version 1. It isn't clear they have much - // usefulness, or how to generalize them for later versions. - - BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name); - BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name); - BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name); - BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name); - BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name); - BOOST_FILESYSTEM_DECL bool native(const std::string & name); - -//--------------------------------------------------------------------------------------// -// class path member template implementation // -//--------------------------------------------------------------------------------------// - - template - path& path::append(InputIterator begin, InputIterator end, const codecvt_type& cvt) - { - if (begin == end) - return *this; - string_type::size_type sep_pos(m_append_separator_if_needed()); - std::basic_string::value_type> - s(begin, end); - path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt); - if (sep_pos) - m_erase_redundant_separator(sep_pos); - return *this; - } - - template - path& path::append(Source const & source, const codecvt_type& cvt) - { - if (path_traits::empty(source)) - return *this; - string_type::size_type sep_pos(m_append_separator_if_needed()); - path_traits::dispatch(source, m_pathname, cvt); - if (sep_pos) - m_erase_redundant_separator(sep_pos); - return *this; - } - -//--------------------------------------------------------------------------------------// -// class path member template specializations // -//--------------------------------------------------------------------------------------// - - template <> inline - std::string path::string() const - { return string(); } - - template <> inline - std::wstring path::string() const - { return wstring(); } - - template <> inline - std::string path::string(const codecvt_type& cvt) const - { return string(cvt); } - - template <> inline - std::wstring path::string(const codecvt_type& cvt) const - { return wstring(cvt); } - - template <> inline - std::string path::generic_string() const - { return generic_string(); } - - template <> inline - std::wstring path::generic_string() const - { return generic_wstring(); } - - template <> inline - std::string path::generic_string(const codecvt_type& cvt) const - { return generic_string(cvt); } - - template <> inline - std::wstring path::generic_string(const codecvt_type& cvt) const - { return generic_wstring(cvt); } - - -} // namespace filesystem3 -} // namespace boost - -//----------------------------------------------------------------------------// - -namespace boost -{ - namespace filesystem - { - using filesystem3::path; -# ifndef BOOST_FILESYSTEM_NO_DEPRECATED - using filesystem3::wpath; -# endif - using filesystem3::lexicographical_compare; - using filesystem3::portable_posix_name; - using filesystem3::windows_name; - using filesystem3::portable_name; - using filesystem3::portable_directory_name; - using filesystem3::portable_file_name; - using filesystem3::native; - using filesystem3::swap; - using filesystem3::operator<; - using filesystem3::operator==; - using filesystem3::operator!=; - using filesystem3::operator>; - using filesystem3::operator<=; - using filesystem3::operator>=; - using filesystem3::operator/; - using filesystem3::operator<<; - using filesystem3::operator>>; - } -} - -//----------------------------------------------------------------------------// - -#include // pops abi_prefix.hpp pragmas - -#endif // BOOST_FILESYSTEM_PATH_HPP diff --git a/3party/boost/boost/flyweight/intermodule_holder.hpp b/3party/boost/boost/flyweight/intermodule_holder.hpp index 9ebe493a5a..d8d9cd3ae6 100644 --- a/3party/boost/boost/flyweight/intermodule_holder.hpp +++ b/3party/boost/boost/flyweight/intermodule_holder.hpp @@ -1,4 +1,4 @@ -/* Copyright 2006-2010 Joaquin M Lopez Munoz. +/* Copyright 2006-2011 Joaquin M Lopez Munoz. * 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) @@ -29,7 +29,7 @@ namespace flyweights{ template struct intermodule_holder_class: - interprocess::detail::intermodule_singleton, + interprocess::ipcdetail::intermodule_singleton, holder_marker { typedef intermodule_holder_class type; diff --git a/3party/boost/boost/function/function_template.hpp b/3party/boost/boost/function/function_template.hpp index 3514e28821..bf139a0957 100644 --- a/3party/boost/boost/function/function_template.hpp +++ b/3party/boost/boost/function/function_template.hpp @@ -858,7 +858,7 @@ namespace boost { #else private: struct dummy { - void nonnull() {}; + void nonnull() {} }; typedef void (dummy::*safe_bool)(); diff --git a/3party/boost/boost/functional/detail/container_fwd.hpp b/3party/boost/boost/functional/detail/container_fwd.hpp index 9a69d155b2..e2bf86526c 100644 --- a/3party/boost/boost/functional/detail/container_fwd.hpp +++ b/3party/boost/boost/functional/detail/container_fwd.hpp @@ -1,11 +1,11 @@ -// Copyright 2005-2008 Daniel James. +// Copyright 2005-2012 Daniel James. // 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) // Forwarding header for container_fwd.hpp's new location. -// This header is deprecated, I'll be adding a warning in a future release, -// then converting it to an error and finally removing this header completely. +// This header is deprecated, I'll change the warning to an error in a future +// release, and then later remove the header completely. #if !defined(BOOST_FUNCTIONAL_DETAIL_CONTAINER_FWD_HPP) #define BOOST_FUNCTIONAL_DETAIL_CONTAINER_FWD_HPP @@ -14,6 +14,14 @@ # pragma once #endif +#if defined(__EDG__) +#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__) +#pragma message("Warning: boost/functional/detail/container_fwd.hpp is deprecated, use boost/detail/container_fwd.hpp instead.") +#elif defined(__GNUC__) || defined(__HP_aCC) || \ + defined(__SUNPRO_CC) || defined(__IBMCPP__) +#warning "boost/functional/detail/container_fwd.hpp is deprecated, use boost/detail/container_fwd.hpp instead." +#endif + #include #endif diff --git a/3party/boost/boost/functional/hash/detail/container_fwd_0x.hpp b/3party/boost/boost/functional/hash/detail/container_fwd_0x.hpp new file mode 100644 index 0000000000..bed7730fc0 --- /dev/null +++ b/3party/boost/boost/functional/hash/detail/container_fwd_0x.hpp @@ -0,0 +1,29 @@ + +// Copyright 2012 Daniel James. +// 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) + +#if !defined(BOOST_DETAIL_CONTAINER_FWD_0X_HPP) +#define BOOST_DETAIL_CONTAINER_FWD_0X_HPP + +#include + +// std::array + +#if !defined(BOOST_NO_CXX11_HDR_ARRAY) +# include +#endif + +// std::tuple + +#if !defined(BOOST_NO_CXX11_HDR_TUPLE) +# include +#endif + +// std::shared_ptr/std::unique_ptr + +#if !defined(BOOST_NO_CXX11_HDR_MEMORY) +# include +#endif + +#endif diff --git a/3party/boost/boost/functional/hash/detail/hash_float.hpp b/3party/boost/boost/functional/hash/detail/hash_float.hpp index ea1bc25f48..194be1cae5 100644 --- a/3party/boost/boost/functional/hash/detail/hash_float.hpp +++ b/3party/boost/boost/functional/hash/detail/hash_float.hpp @@ -86,10 +86,24 @@ namespace boost { namespace hash_detail { + template + inline bool is_zero(T v) + { +#if !defined(__GNUC__) + return v == 0; +#else + // GCC's '-Wfloat-equal' will complain about comparing + // v to 0, but because it disables warnings for system + // headers it won't complain if you use std::equal_to to + // compare with 0. Resulting in this silliness: + return std::equal_to()(v, 0); +#endif + } + template inline std::size_t float_hash_value(T v) { - return v == 0 ? 0 : float_hash_impl(v); + return boost::hash_detail::is_zero(v) ? 0 : float_hash_impl(v); } } } diff --git a/3party/boost/boost/functional/hash/extensions.hpp b/3party/boost/boost/functional/hash/extensions.hpp index 3c587a3bf5..4358736b26 100644 --- a/3party/boost/boost/functional/hash/extensions.hpp +++ b/3party/boost/boost/functional/hash/extensions.hpp @@ -14,7 +14,11 @@ #define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP #include -#include +#include +#include +#include +#include +#include #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once @@ -54,51 +58,51 @@ namespace boost std::size_t hash_value(std::pair const& v) { std::size_t seed = 0; - hash_combine(seed, v.first); - hash_combine(seed, v.second); + boost::hash_combine(seed, v.first); + boost::hash_combine(seed, v.second); return seed; } template std::size_t hash_value(std::vector const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::list const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::deque const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::set const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::multiset const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::map const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template std::size_t hash_value(std::multimap const& v) { - return hash_range(v.begin(), v.end()); + return boost::hash_range(v.begin(), v.end()); } template @@ -110,6 +114,83 @@ namespace boost return seed; } +#if !defined(BOOST_NO_CXX11_HDR_ARRAY) + template + std::size_t hash_value(std::array const& v) + { + return boost::hash_range(v.begin(), v.end()); + } +#endif + +#if !defined(BOOST_NO_CXX11_HDR_TUPLE) + namespace hash_detail { + template + inline typename boost::enable_if_c<(I == std::tuple_size::value), + void>::type + hash_combine_tuple(std::size_t&, T const&) + { + } + + template + inline typename boost::enable_if_c<(I < std::tuple_size::value), + void>::type + hash_combine_tuple(std::size_t& seed, T const& v) + { + boost::hash_combine(seed, std::get(v)); + boost::hash_detail::hash_combine_tuple(seed, v); + } + + template + inline std::size_t hash_tuple(T const& v) + { + std::size_t seed = 0; + boost::hash_detail::hash_combine_tuple<0>(seed, v); + return seed; + } + } + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + inline std::size_t hash_value(std::tuple const& v) + { + return boost::hash_detail::hash_tuple(v); + } +#else + + inline std::size_t hash_value(std::tuple<> const& v) + { + return boost::hash_detail::hash_tuple(v); + } + +# define BOOST_HASH_TUPLE_F(z, n, _) \ + template< \ + BOOST_PP_ENUM_PARAMS_Z(z, n, typename A) \ + > \ + inline std::size_t hash_value(std::tuple< \ + BOOST_PP_ENUM_PARAMS_Z(z, n, A) \ + > const& v) \ + { \ + return boost::hash_detail::hash_tuple(v); \ + } + + BOOST_PP_REPEAT_FROM_TO(1, 11, BOOST_HASH_TUPLE_F, _) +# undef BOOST_HASH_TUPLE_F +#endif + +#endif + +#if !defined(BOOST_NO_CXX11_SMART_PTR) + template + inline std::size_t hash_value(std::shared_ptr const& x) { + return boost::hash_value(x.get()); + } + + template + inline std::size_t hash_value(std::unique_ptr const& x) { + return boost::hash_value(x.get()); + } +#endif + // // call_hash_impl // diff --git a/3party/boost/boost/functional/hash/hash.hpp b/3party/boost/boost/functional/hash/hash.hpp index 51ec8608c8..c179fab69a 100644 --- a/3party/boost/boost/functional/hash/hash.hpp +++ b/3party/boost/boost/functional/hash/hash.hpp @@ -16,15 +16,11 @@ #include #include -#if defined(BOOST_HASH_NO_IMPLICIT_CASTS) -#include -#endif - #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) #include #endif -#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) +#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX) #include #endif @@ -37,38 +33,63 @@ namespace boost { -#if defined(BOOST_HASH_NO_IMPLICIT_CASTS) + namespace hash_detail + { + struct enable_hash_value { typedef std::size_t type; }; - // If you get a static assertion here, it's because hash_value - // isn't declared for your type. - template - std::size_t hash_value(T const&) { - BOOST_STATIC_ASSERT((T*) 0 && false); - return 0; - } + template struct basic_numbers {}; + template struct long_numbers {}; + template struct ulong_numbers {}; + template struct float_numbers {}; -#endif - - std::size_t hash_value(bool); - std::size_t hash_value(char); - std::size_t hash_value(unsigned char); - std::size_t hash_value(signed char); - std::size_t hash_value(short); - std::size_t hash_value(unsigned short); - std::size_t hash_value(int); - std::size_t hash_value(unsigned int); - std::size_t hash_value(long); - std::size_t hash_value(unsigned long); + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) - std::size_t hash_value(wchar_t); + template <> struct basic_numbers : + boost::hash_detail::enable_hash_value {}; #endif - + #if !defined(BOOST_NO_LONG_LONG) - std::size_t hash_value(boost::long_long_type); - std::size_t hash_value(boost::ulong_long_type); + template <> struct long_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct ulong_numbers : + boost::hash_detail::enable_hash_value {}; #endif + template <> struct float_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct float_numbers : + boost::hash_detail::enable_hash_value {}; + template <> struct float_numbers : + boost::hash_detail::enable_hash_value {}; + } + + template + typename boost::hash_detail::basic_numbers::type hash_value(T); + template + typename boost::hash_detail::long_numbers::type hash_value(T); + template + typename boost::hash_detail::ulong_numbers::type hash_value(T); + #if !BOOST_WORKAROUND(__DMC__, <= 0x848) template std::size_t hash_value(T* const&); #else @@ -83,15 +104,14 @@ namespace boost std::size_t hash_value(T (&x)[N]); #endif - std::size_t hash_value(float v); - std::size_t hash_value(double v); - std::size_t hash_value(long double v); - template std::size_t hash_value( std::basic_string, A> const&); -#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) + template + typename boost::hash_detail::float_numbers::type hash_value(T); + +#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX) std::size_t hash_value(std::type_index); #endif @@ -141,74 +161,23 @@ namespace boost } } - inline std::size_t hash_value(bool v) + template + typename boost::hash_detail::basic_numbers::type hash_value(T v) { return static_cast(v); } - inline std::size_t hash_value(char v) - { - return static_cast(v); - } - - inline std::size_t hash_value(unsigned char v) - { - return static_cast(v); - } - - inline std::size_t hash_value(signed char v) - { - return static_cast(v); - } - - inline std::size_t hash_value(short v) - { - return static_cast(v); - } - - inline std::size_t hash_value(unsigned short v) - { - return static_cast(v); - } - - inline std::size_t hash_value(int v) - { - return static_cast(v); - } - - inline std::size_t hash_value(unsigned int v) - { - return static_cast(v); - } - - inline std::size_t hash_value(long v) - { - return static_cast(v); - } - - inline std::size_t hash_value(unsigned long v) - { - return static_cast(v); - } - -#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) - inline std::size_t hash_value(wchar_t v) - { - return static_cast(v); - } -#endif - -#if !defined(BOOST_NO_LONG_LONG) - inline std::size_t hash_value(boost::long_long_type v) + template + typename boost::hash_detail::long_numbers::type hash_value(T v) { return hash_detail::hash_value_signed(v); } - inline std::size_t hash_value(boost::ulong_long_type v) + template + typename boost::hash_detail::ulong_numbers::type hash_value(T v) { return hash_detail::hash_value_unsigned(v); } -#endif // Implementation by Alberto Barbati and Dave Harris. #if !BOOST_WORKAROUND(__DMC__, <= 0x848) @@ -324,22 +293,13 @@ namespace boost return hash_range(v.begin(), v.end()); } - inline std::size_t hash_value(float v) + template + typename boost::hash_detail::float_numbers::type hash_value(T v) { return boost::hash_detail::float_hash_value(v); } - inline std::size_t hash_value(double v) - { - return boost::hash_detail::float_hash_value(v); - } - - inline std::size_t hash_value(long double v) - { - return boost::hash_detail::float_hash_value(v); - } - -#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) +#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX) inline std::size_t hash_value(std::type_index v) { return v.hash_code(); @@ -450,7 +410,7 @@ namespace boost BOOST_HASH_SPECIALIZE(boost::ulong_long_type) #endif -#if !defined(BOOST_NO_0X_HDR_TYPEINDEX) +#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX) BOOST_HASH_SPECIALIZE(std::type_index) #endif diff --git a/3party/boost/boost/functional/overloaded_function.hpp b/3party/boost/boost/functional/overloaded_function.hpp new file mode 100644 index 0000000000..83fe4b3849 --- /dev/null +++ b/3party/boost/boost/functional/overloaded_function.hpp @@ -0,0 +1,311 @@ + +// 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/functional/overloaded_function + +#ifndef DOXYGEN // Doxygen documentation only. + +#if !BOOST_PP_IS_ITERATING +# ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_HPP_ +# define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_HPP_ + +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +#define BOOST_FUNCTIONAL_f_type(z, n, unused) \ + BOOST_PP_CAT(F, n) + +#define BOOST_FUNCTIONAL_f_arg(z, n, unused) \ + BOOST_PP_CAT(f, n) + +#define BOOST_FUNCTIONAL_f_tparam(z, n, unused) \ + typename BOOST_FUNCTIONAL_f_type(z, n, ~) \ + +#define BOOST_FUNCTIONAL_f_tparam_dflt(z, n, is_tspec) \ + BOOST_FUNCTIONAL_f_tparam(z, n, ~) \ + /* overload requires at least 2 functors so F0 and F1 not optional */ \ + BOOST_PP_EXPR_IIF(BOOST_PP_AND(BOOST_PP_NOT(is_tspec), \ + BOOST_PP_GREATER(n, 1)), \ + = void \ + ) + +#define BOOST_FUNCTIONAL_f_arg_decl(z, n, unused) \ + BOOST_FUNCTIONAL_f_type(z, n, ~) /* no qualifier to deduce tparam */ \ + BOOST_FUNCTIONAL_f_arg(z, n, ~) + +#define BOOST_FUNCTIONAL_g_type(z, n, unused) \ + BOOST_PP_CAT(G, n) + +#define BOOST_FUNCTIONAL_g_arg(z, n, unused) \ + BOOST_PP_CAT(g, n) + +#define BOOST_FUNCTIONAL_g_tparam(z, n, unused) \ + typename BOOST_FUNCTIONAL_g_type(z, n, ~) + +#define BOOST_FUNCTIONAL_g_arg_decl(z, n, unused) \ + BOOST_FUNCTIONAL_g_type(z, n, ~) /* no qualifier to deduce tparam */ \ + BOOST_FUNCTIONAL_g_arg(z, n, ~) + +#define BOOST_FUNCTIONAL_base(z, n, unused) \ + ::boost::overloaded_function_detail::base< \ + BOOST_FUNCTIONAL_f_type(z, n, ~) \ + > + +#define BOOST_FUNCTIONAL_inherit(z, n, unused) \ + public BOOST_FUNCTIONAL_base(z, n, ~) + +#define BOOST_FUNCTIONAL_base_init(z, n, unused) \ + BOOST_FUNCTIONAL_base(z, n, ~)(BOOST_FUNCTIONAL_g_arg(z, n, ~)) + +#define BOOST_FUNCTIONAL_using_operator_call(z, n, unused) \ + using BOOST_FUNCTIONAL_base(z, n, ~)::operator(); + +#define BOOST_FUNCTIONAL_function_type(z, n, unused) \ + typename ::boost::overloaded_function_detail::function_type< \ + BOOST_FUNCTIONAL_f_type(z, n, ~) \ + >::type + +# define BOOST_PP_ITERATION_PARAMS_1 \ + /* at least 2 func to overload so start from 2 to MAX */ \ + /* (cannot iterate [0, MAX-2) because error on Sun) */ \ + (3, (2, BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX, \ + "boost/functional/overloaded_function.hpp")) +# include BOOST_PP_ITERATE() // Iterate over function arity. + +#undef BOOST_FUNCTIONAL_f_type +#undef BOOST_FUNCTIONAL_f_arg +#undef BOOST_FUNCTIONAL_f_tparam +#undef BOOST_FUNCTIONAL_f_arg_decl +#undef BOOST_FUNCTIONAL_f_tparam_dflt +#undef BOOST_FUNCTIONAL_g_type +#undef BOOST_FUNCTIONAL_g_arg +#undef BOOST_FUNCTIONAL_g_tparam +#undef BOOST_FUNCTIONAL_g_arg_decl +#undef BOOST_FUNCTIONAL_base +#undef BOOST_FUNCTIONAL_inherit +#undef BOOST_FUNCTIONAL_base_init +#undef BOOST_FUNCTIONAL_using_operator_call +#undef BOOST_FUNCTIONAL_function_type + +# endif // #include guard + +#elif BOOST_PP_ITERATION_DEPTH() == 1 +# define BOOST_FUNCTIONAL_overloads \ + /* iterate as OVERLOADS, OVERLOADS-1, OVERLOADS-2, ... */ \ + /* (add 2 because iteration started from 2 to MAX) */ \ + BOOST_PP_ADD(2, BOOST_PP_SUB( \ + BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX, \ + BOOST_PP_FRAME_ITERATION(1))) +# define BOOST_FUNCTIONAL_is_tspec \ + /* if template specialization */ \ + BOOST_PP_LESS(BOOST_FUNCTIONAL_overloads, \ + BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX) + +// For type-of emulation: This must be included at this pp iteration level. +# include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() + +namespace boost { + +template< + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_tparam_dflt, + BOOST_FUNCTIONAL_is_tspec) +> +class overloaded_function + // Template specialization. + BOOST_PP_EXPR_IIF(BOOST_PP_EXPAND(BOOST_FUNCTIONAL_is_tspec), <) + BOOST_PP_IIF(BOOST_FUNCTIONAL_is_tspec, + BOOST_PP_ENUM + , + BOOST_PP_TUPLE_EAT(3) + )(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_type, ~) + BOOST_PP_EXPR_IIF(BOOST_PP_EXPAND(BOOST_FUNCTIONAL_is_tspec), >) + // Bases (overloads >= 2 so always at least 2 bases). + : BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, + BOOST_FUNCTIONAL_inherit, ~) +{ +public: + template< + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_g_tparam, ~) + > /* implicit */ inline overloaded_function( + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, + BOOST_FUNCTIONAL_g_arg_decl, ~)) + // Overloads >= 2 so always at least 2 bases to initialize. + : BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, + BOOST_FUNCTIONAL_base_init, ~) + {} + + BOOST_PP_REPEAT(BOOST_FUNCTIONAL_overloads, + BOOST_FUNCTIONAL_using_operator_call, ~) +}; + +template< + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_tparam, ~) +> +overloaded_function< + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_function_type, ~) +> make_overloaded_function( + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_arg_decl, ~) +) { + return overloaded_function< + BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, + BOOST_FUNCTIONAL_function_type, ~) + >(BOOST_PP_ENUM(BOOST_FUNCTIONAL_overloads, BOOST_FUNCTIONAL_f_arg, ~)); +} + +} // namespace + +// For type-of emulation: Register overloaded function type (for _AUTO, etc). +BOOST_TYPEOF_REGISTER_TEMPLATE(boost::overloaded_function, + BOOST_FUNCTIONAL_overloads) + +# undef BOOST_FUNCTIONAL_overloads +# undef BOOST_FUNCTIONAL_is_tspec +#endif // iteration + +// DOCUMENTATION // + +#else // DOXYGEN + +/** @file +@brief Overload distinct function pointers, function references, and +monomorphic function objects into a single function object. +*/ + +namespace boost { + +/** +@brief Function object to overload functions with distinct signatures. + +This function object aggregates together calls to functions of all the +specified function types F1, F2, etc which must have distinct +function signatures from one another. + +@Params +@Param{Fi, +Each function type must be specified using the following syntax (which is +Boost.Function's preferred syntax): +@code + result_type (argument1_type\, argumgnet2_type\, ...) +@endcode +} +@EndParams + +In some cases, the @RefFunc{make_overloaded_function} function template can be +useful to construct an overloaded function object without explicitly +specifying the function types. + +At least two distinct function types must be specified (because there is +nothing to overload between one or zero functions). +The maximum number of functions to overload is given by the +@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX} +configuration macro. +The maximum number of function parameters for each of the specified function +types is given by the +@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX} +configuration macro. + +@See @RefSect{tutorial, Tutorial} section, @RefFunc{make_overloaded_function}, +@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX}, +@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX}, +Boost.Function. +*/ +template +class overloaded_function { +public: + /** + @brief Construct the overloaded function object. + + Any function pointer, function reference, and monomorphic function object + that can be converted to a boost::function function object can be + specified as parameter. + + @Note Unfortunately, it is not possible to support polymorphic function + objects (as explained here). + */ + overloaded_function(const boost::function&, + const boost::function&, ...); + + /** + @brief Call operator matching the signature of the function type specified + as 1st template parameter. + + This will in turn invoke the call operator of the 1st function passed to + the constructor. + */ + typename boost::function_traits::result_type operator()( + typename boost::function_traits::arg1_type, + typename boost::function_traits::arg2_type, + ...) const; + + /** + @brief Call operator matching the signature of the function type specified + as 2nd template parameter. + + This will in turn invoke the call operator of the 2nd function passed to + the constructor. + + @Note Similar call operators are present for all specified function types + F1, F2, etc (even if not exhaustively listed by this + documentation). + */ + typename boost::function_traits::result_type operator()( + typename boost::function_traits::arg1_type, + typename boost::function_traits::arg2_type, + ...) const; +}; + +/** +@brief Make an overloaded function object without explicitly specifying the +function types. + +This function template creates and returns an @RefClass{overloaded_function} +object that overloads all the specified functions f1, f2, etc. + +The function types are internally determined from the template parameter types +so they do not need to be explicitly specified. +Therefore, this function template usually has a more concise syntax when +compared with @RefClass{overloaded_function}. +This is especially useful when the explicit type of the returned +@RefClass{overloaded_function} object does not need to be known (e.g., when +used with Boost.Typeof's BOOST_AUTO, C++11 auto, or when the +overloaded function object is handled using a function template parameter, see +the @RefSect{tutorial, Tutorial} section). + +The maximum number of functions to overload is given by the +@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX} +configuration macro. + +@Note In this documentation, __function_type__ is a placeholder for a +symbol that is specific to the implementation of this library. + +@See @RefSect{tutorial, Tutorial} section, @RefClass{overloaded_function}, +@RefMacro{BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX}. +*/ +template +overloaded_function< + __function_type__, __function_type__, ... +> make_overloaded_function(F1 f1, F2 f2, ...); + +} // namespace + +#endif // DOXYGEN + diff --git a/3party/boost/boost/functional/overloaded_function/config.hpp b/3party/boost/boost/functional/overloaded_function/config.hpp new file mode 100644 index 0000000000..2f5d9e1323 --- /dev/null +++ b/3party/boost/boost/functional/overloaded_function/config.hpp @@ -0,0 +1,50 @@ + +// 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/functional/overloaded_function + +#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_HPP_ +#define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_HPP_ + +/** @file +@brief Change the compile-time configuration of this library. +*/ + +/** +@brief Specify the maximum number of arguments of the functions being +overloaded. + +If this macro is left undefined by the user, it has a default value of 5 +(increasing this number might increase compilation time). +When specified by the user, this macro must be a non-negative integer number. + +@See @RefSect{getting_started, Getting Started}, +@RefClass{boost::overloaded_function}. +*/ +#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX +# define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX 5 +#endif + +/** +@brief Specify the maximum number of functions that can be overloaded. + +If this macro is left undefined by the user, it has a default value of 5 +(increasing this number might increase compilation time). +When defined by the user, this macro must be an integer number greater or +equal than 2 (because at least two distinct functions need to be specified in +order to define an overload). + +@See @RefSect{getting_started, Getting Started}, +@RefClass{boost::overloaded_function}. +*/ +#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX +# define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX 5 +#endif +#if BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_OVERLOAD_MAX < 2 +# error "maximum overload macro cannot be less than 2" +#endif + +#endif // #include guard + diff --git a/3party/boost/boost/functional/overloaded_function/detail/base.hpp b/3party/boost/boost/functional/overloaded_function/detail/base.hpp new file mode 100644 index 0000000000..8fd9a0a2c9 --- /dev/null +++ b/3party/boost/boost/functional/overloaded_function/detail/base.hpp @@ -0,0 +1,86 @@ + +// 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/functional/overloaded_function + +#if !BOOST_PP_IS_ITERATING +# ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_BASE_HPP_ +# define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_BASE_HPP_ + +# include +# include +# include +# include +# include +# include + +#define BOOST_FUNCTIONAL_DETAIL_arg_type(z, n, unused) \ + BOOST_PP_CAT(A, n) + +#define BOOST_FUNCTIONAL_DETAIL_arg_name(z, n, unused) \ + BOOST_PP_CAT(a, n) + +#define BOOST_FUNCTIONAL_DETAIL_arg_tparam(z, n, unused) \ + typename BOOST_FUNCTIONAL_DETAIL_arg_type(z, n, unused) + +#define BOOST_FUNCTIONAL_DETAIL_arg(z, n, unused) \ + BOOST_FUNCTIONAL_DETAIL_arg_type(z, n, unused) \ + BOOST_FUNCTIONAL_DETAIL_arg_name(z, n, unused) + +#define BOOST_FUNCTIONAL_DETAIL_f \ + R (BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity, \ + BOOST_FUNCTIONAL_DETAIL_arg_type, ~)) + +// Do not use namespace ::detail because overloaded_function is already a class. +namespace boost { namespace overloaded_function_detail { + +template +class base {}; // Empty template cannot be used directly (only its spec). + +# define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (0, BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_CONFIG_ARITY_MAX, \ + "boost/functional/overloaded_function/detail/base.hpp")) +# include BOOST_PP_ITERATE() // Iterate over funciton arity. + +} } // namespace + +#undef BOOST_FUNCTIONAL_DETAIL_arg_type +#undef BOOST_FUNCTIONAL_DETAIL_arg_name +#undef BOOST_FUNCTIONAL_DETAIL_arg_tparam +#undef BOOST_FUNCTIONAL_DETAIL_arg +#undef BOOST_FUNCTIONAL_DETAIL_f + +# endif // #include guard + +#elif BOOST_PP_ITERATION_DEPTH() == 1 +# define BOOST_FUNCTIONAL_DETAIL_arity BOOST_PP_FRAME_ITERATION(1) + +template< + typename R + BOOST_PP_COMMA_IF(BOOST_FUNCTIONAL_DETAIL_arity) + BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity, + BOOST_FUNCTIONAL_DETAIL_arg_tparam, ~) +> +class base< BOOST_FUNCTIONAL_DETAIL_f > { +public: + /* implicit */ inline base( + // This requires specified type to be implicitly convertible to + // a boost::function<> functor. + boost::function< BOOST_FUNCTIONAL_DETAIL_f > const& f): f_(f) + {} + + inline R operator()(BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity, + BOOST_FUNCTIONAL_DETAIL_arg, ~)) const { + return f_(BOOST_PP_ENUM(BOOST_FUNCTIONAL_DETAIL_arity, + BOOST_FUNCTIONAL_DETAIL_arg_name, ~)); + } + +private: + boost::function< BOOST_FUNCTIONAL_DETAIL_f > const f_; +}; + +# undef BOOST_FUNCTIONAL_DETAIL_arity +#endif // iteration + diff --git a/3party/boost/boost/functional/overloaded_function/detail/function_type.hpp b/3party/boost/boost/functional/overloaded_function/detail/function_type.hpp new file mode 100644 index 0000000000..0c28607b88 --- /dev/null +++ b/3party/boost/boost/functional/overloaded_function/detail/function_type.hpp @@ -0,0 +1,85 @@ + +// 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/functional/overloaded_function + +#ifndef BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_FUNCTION_TYPE_HPP_ +#define BOOST_FUNCTIONAL_OVERLOADED_FUNCTION_DETAIL_FUNCTION_TYPE_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Do not use namespace ::detail because overloaded_function is already a class. +namespace boost { namespace overloaded_function_detail { + +// Requires: F is a monomorphic functor (i.e., has non-template `operator()`). +// Returns: F's function type `result_type (arg1_type, arg2_type, ...)`. +// It does not assume F typedef result_type, arg1_type, ... but needs typeof. +template +class functor_type { + // NOTE: clang does not accept extra parenthesis `&(...)`. + typedef BOOST_TYPEOF_TPL(&F::operator()) call_ptr; +public: + typedef + typename boost::function_types::function_type< + typename boost::mpl::push_front< + typename boost::mpl::pop_front< // Remove functor type (1st). + typename boost::function_types::parameter_types< + call_ptr>::type + >::type + , typename boost::function_types::result_type::type + >::type + >::type + type; +}; + +// NOTE: When using boost::function in Boost.Typeof emulation mode, the user +// has to register boost::functionN instead of boost::function in oder to +// do TYPEOF(F::operator()). That is confusing, so boost::function is handled +// separately so it does not require any Boost.Typeof registration at all. +template +struct functor_type< boost::function > { + typedef F type; +}; + +// Requires: F is a function type, pointer, reference, or monomorphic functor. +// Returns: F's function type `result_type (arg1_type, arg2_type, ...)`. +template +struct function_type { + typedef + typename boost::mpl::if_, + boost::mpl::identity + , + typename boost::mpl::if_, + boost::remove_pointer + , + typename boost::mpl::if_, + boost::remove_reference + , // Else, requires that F is a functor. + functor_type + >::type + >::type + >::type + ::type type; +}; + +} } // namespace + +#endif // #include guard + diff --git a/3party/boost/boost/fusion/adapted.hpp b/3party/boost/boost/fusion/adapted.hpp index bdd7b8ccfb..bcff7161b0 100644 --- a/3party/boost/boost/fusion/adapted.hpp +++ b/3party/boost/boost/fusion/adapted.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -16,4 +16,10 @@ #include #include +// The std_tuple_iterator adaptor only supports implementations +// using variadic templates +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) +#include +#endif + #endif diff --git a/3party/boost/boost/fusion/adapted/adt.hpp b/3party/boost/boost/fusion/adapted/adt.hpp index c9d9f279df..a8293caaf8 100644 --- a/3party/boost/boost/fusion/adapted/adt.hpp +++ b/3party/boost/boost/fusion/adapted/adt.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp b/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp index 0508a67397..454ac922e5 100644 --- a/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp +++ b/3party/boost/boost/fusion/adapted/adt/adapt_adt.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2001-2009 Joel de Guzman Copyright (c) 2009-2010 Hartmut Kaiser - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -49,7 +49,7 @@ (1)NAME_SEQ, \ struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0(0,0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ADT_C) #define BOOST_FUSION_ADAPT_ADT(NAME, ATTRIBUTES) \ @@ -58,7 +58,7 @@ (0)(NAME), \ struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0(0,0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ADT_C) #define BOOST_FUSION_ADAPT_ADT_AS_VIEW(NAME, ATTRIBUTES) \ @@ -67,7 +67,7 @@ (0)(NAME), \ struct_tag, \ 1, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0(0,0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ADT_C) #endif diff --git a/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp b/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp index b67ba2c5a6..cce1dfb081 100644 --- a/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp +++ b/3party/boost/boost/fusion/adapted/adt/adapt_assoc_adt.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2001-2009 Joel de Guzman Copyright (c) 2007 Dan Marsden - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -63,7 +63,8 @@ (1)NAME_SEQ, \ assoc_struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(0,0,0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ASSOC_ADT_C) #define BOOST_FUSION_ADAPT_ASSOC_ADT(NAME, ATTRIBUTES) \ @@ -72,7 +73,8 @@ (0)(NAME), \ assoc_struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(0,0,0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ASSOC_ADT_C) #define BOOST_FUSION_ADAPT_ASSOC_ADT_AS_VIEW(NAME, ATTRIBUTES) \ @@ -81,7 +83,8 @@ (0)(NAME), \ assoc_struct_tag, \ 1, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(0,0,0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ASSOC_ADT_C) #endif diff --git a/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp b/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp index 50c40cf34e..2f4db4dd09 100644 --- a/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp +++ b/3party/boost/boost/fusion/adapted/adt/detail/extension.hpp @@ -12,13 +12,28 @@ #include #include +#include +#include -namespace boost { namespace fusion { namespace detail -{ +namespace boost { namespace fusion +{ + namespace detail + { template struct get_identity : remove_const::type> {}; -}}} + } + + namespace extension + { + // Overload as_const() to unwrap adt_attribute_proxy. + template + typename adt_attribute_proxy::type as_const(const adt_attribute_proxy& proxy) + { + return proxy.get(); + } + } +}} #endif diff --git a/3party/boost/boost/fusion/adapted/array.hpp b/3party/boost/boost/fusion/adapted/array.hpp index cb82809037..b95081786f 100644 --- a/3party/boost/boost/fusion/adapted/array.hpp +++ b/3party/boost/boost/fusion/adapted/array.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/boost_array.hpp b/3party/boost/boost/fusion/adapted/boost_array.hpp index 835135b9b2..ed9fd9b3ad 100644 --- a/3party/boost/boost/fusion/adapted/boost_array.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp b/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp index 5453a6396c..1246144980 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/array_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp index 16557a114f..6df8858663 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp index 0798659ba7..c8bce9ffe7 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp index 35762a0306..8e92efd7c3 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/category_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp index 35b1fdbc71..38b5a82cb4 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp index 9301e81e6c..cdbe6c8382 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp index 6cb6b36ac7..cf63c6a667 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/is_view_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/size_impl.hpp index 87cafdacd1..c04ab93c6c 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_array/detail/value_at_impl.hpp index a35abc687f..9f80f73b39 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp b/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp index d38cc80471..f33c93fc70 100644 --- a/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp +++ b/3party/boost/boost/fusion/adapted/boost_array/tag_of.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/boost_tuple.hpp b/3party/boost/boost/fusion/adapted/boost_tuple.hpp index 2924df076a..6149478f3a 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp index 553429e38b..551f0fd900 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp index b594dfd814..8e2312500b 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp index ee9a89ebbe..010c442750 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp index 34f48b1e73..9b52c98a88 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp index 2fb27a7a2c..e54702bf74 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp index 43d731158e..c74fb4dfea 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp index 2927df7b9b..5d639d2b23 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp index 167a5035b3..1dad42030f 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp index d46d51e52b..4f5fc6a656 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp b/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp index 1183082d44..18356de2af 100644 --- a/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp +++ b/3party/boost/boost/fusion/adapted/boost_tuple/tag_of.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/mpl.hpp b/3party/boost/boost/fusion/adapted/mpl.hpp index f82578465b..739ff93826 100644 --- a/3party/boost/boost/fusion/adapted/mpl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -17,5 +17,6 @@ #include #include #include +#include #endif diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp index 6f3be1c639..99342d7b3c 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp index 1ec77d8b14..ef274ba0a6 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp index ad68fcc957..be43a56194 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/category_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp index 14e8dfa2f8..f2eb22a0d9 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/empty_impl.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_EMPTY_IMPL_31122005_1554) @@ -10,12 +10,15 @@ #include -namespace boost { namespace fusion +namespace boost { namespace fusion { struct mpl_sequence_tag; namespace extension { + template + struct empty_impl; + template <> struct empty_impl { diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp index e34669566a..613ab63cc0 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp index bfecbc73c8..b2b3253a8e 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/has_key_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp index bf9b349c09..2c6c5f988b 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp index 5ae48c909e..bd9b7a4211 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/is_view_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp index 628935173d..38168724d4 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp index 5f39e4eb42..5560b82717 100644 --- a/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp b/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp index 9c82028a3b..7caa8ea728 100644 --- a/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp +++ b/3party/boost/boost/fusion/adapted/mpl/mpl_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/adapted/std_pair.hpp b/3party/boost/boost/fusion/adapted/std_pair.hpp index 5792dd4450..4263e00c98 100644 --- a/3party/boost/boost/fusion/adapted/std_pair.hpp +++ b/3party/boost/boost/fusion/adapted/std_pair.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt @@ -11,12 +11,7 @@ #define BOOST_FUSION_ADAPTED_STD_PAIR_HPP #include - -namespace std -{ - template - struct pair; -} +#include BOOST_FUSION_ADAPT_TPL_STRUCT( (T1)(T2),(std::pair)(T1)(T2),(T1, first)(T2, second)) diff --git a/3party/boost/boost/fusion/adapted/std_tuple.hpp b/3party/boost/boost/fusion/adapted/std_tuple.hpp new file mode 100644 index 0000000000..a49b4807d4 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_BOOST_TUPLE_09242011_1744) +#define BOOST_FUSION_BOOST_TUPLE_09242011_1744 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp new file mode 100644 index 0000000000..400f366e94 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/at_impl.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_AT_IMPL_09242011_1744) +#define BOOST_FUSION_AT_IMPL_09242011_1744 + +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct at_impl; + + template <> + struct at_impl + { + template + struct apply + { + typedef typename remove_const::type seq_type; + typedef typename std::tuple_element::type element; + + typedef typename + mpl::if_< + is_const + , typename fusion::detail::cref_result::type + , typename fusion::detail::ref_result::type + >::type + type; + + static type + call(Sequence& seq) + { + return std::get(seq); + } + }; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp new file mode 100644 index 0000000000..8b219024b8 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/begin_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_BEGIN_IMPL_09242011_1744) +#define BOOST_FUSION_BEGIN_IMPL_09242011_1744 + +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct begin_impl; + + template <> + struct begin_impl + { + template + struct apply + { + typedef std_tuple_iterator type; + + static type + call(Sequence& v) + { + return type(v); + } + }; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp new file mode 100644 index 0000000000..96d567d5e9 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp @@ -0,0 +1,32 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_09272006_0726) +#define BOOST_FUSION_CATEGORY_OF_IMPL_09272006_0726 + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + struct random_access_traversal_tag; + + namespace extension + { + template + struct category_of_impl; + + template<> + struct category_of_impl + { + template + struct apply + { + typedef random_access_traversal_tag type; + }; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp new file mode 100644 index 0000000000..78782b7943 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/end_impl.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_END_IMPL_09242011_1744) +#define BOOST_FUSION_END_IMPL_09242011_1744 + +#include +#include +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct end_impl; + + template <> + struct end_impl + { + template + struct apply + { + typedef typename remove_const::type seq_type; + static int const size = std::tuple_size::value; + typedef std_tuple_iterator type; + + static type + call(Sequence& v) + { + return type(v); + } + }; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp new file mode 100644 index 0000000000..6da5bdc34d --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp @@ -0,0 +1,30 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_09242011_1744) +#define BOOST_FUSION_IS_SEQUENCE_IMPL_09242011_1744 + +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct is_sequence_impl; + + template<> + struct is_sequence_impl + { + template + struct apply : mpl::true_ {}; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp new file mode 100644 index 0000000000..9439431b5a --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp @@ -0,0 +1,30 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_IS_VIEW_IMPL_09242011_1744) +#define BOOST_FUSION_IS_VIEW_IMPL_09242011_1744 + +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct is_view_impl; + + template<> + struct is_view_impl + { + template + struct apply : mpl::false_ {}; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp new file mode 100644 index 0000000000..d8b10af1ef --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/size_impl.hpp @@ -0,0 +1,36 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SIZE_IMPL_09242011_1744) +#define BOOST_FUSION_SIZE_IMPL_09242011_1744 + +#include +#include +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct size_impl; + + template <> + struct size_impl + { + template + struct apply : + mpl::int_::type>::value + > + {}; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp new file mode 100644 index 0000000000..fa9656e7b2 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp @@ -0,0 +1,30 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VALUE_AT_IMPL_09242011_1744) +#define BOOST_FUSION_VALUE_AT_IMPL_09242011_1744 + +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + + namespace extension + { + template + struct value_at_impl; + + template <> + struct value_at_impl + { + template + struct apply : std::tuple_element {}; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp b/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp new file mode 100644 index 0000000000..082018a449 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp @@ -0,0 +1,107 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(FUSION_STD_TUPLE_ITERATOR_09112011_1905) +#define FUSION_STD_TUPLE_ITERATOR_09112011_1905 + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct random_access_traversal_tag; + + template + struct std_tuple_iterator_identity; + + template + struct std_tuple_iterator + : iterator_facade< + std_tuple_iterator + , random_access_traversal_tag> + { + typedef Tuple tuple_type; + static int const index = Index; + typedef std_tuple_iterator_identity< + typename add_const::type, Index> + identity; + + explicit std_tuple_iterator(Tuple& tuple) + : tuple(tuple) {} + + Tuple& tuple; + + template + struct value_of + : std::tuple_element::type> {}; + + template + struct deref + { + typedef typename value_of::type element; + typedef typename + mpl::if_< + is_const + , typename fusion::detail::cref_result::type + , typename fusion::detail::ref_result::type + >::type + type; + + static type + call(Iterator const& iter) + { + return std::get(iter.tuple); + } + }; + + template + struct advance + { + static int const index = Iterator::index; + typedef typename Iterator::tuple_type tuple_type; + typedef std_tuple_iterator type; + + static type + call(Iterator const& i) + { + return type(i.tuple); + } + }; + + template + struct next : advance> {}; + + template + struct prior : advance> {}; + + template + struct equal_to + : is_same {}; + + template + struct distance + { + typedef mpl::int_ type; + + static type + call(First const&, Last const&) + { + return type(); + } + }; + }; +}} + +#endif + + diff --git a/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp b/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp new file mode 100644 index 0000000000..6d7b4d6fb7 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/std_tuple/tag_of.hpp @@ -0,0 +1,46 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_TAG_OF_09112011_1842) +#define BOOST_FUSION_TAG_OF_09112011_1842 + +#include +#include + +namespace boost { namespace fusion +{ + struct std_tuple_tag; + struct fusion_sequence_tag; + + namespace traits + { + template + struct tag_of> + { + typedef std_tuple_tag type; + }; + } +}} + +namespace boost { namespace mpl +{ + template + struct sequence_tag; + + template + struct sequence_tag> + { + typedef fusion::fusion_sequence_tag type; + }; + + template + struct sequence_tag const> + { + typedef fusion::fusion_sequence_tag type; + }; +}} + +#endif diff --git a/3party/boost/boost/fusion/adapted/struct.hpp b/3party/boost/boost/fusion/adapted/struct.hpp index f184a0d3a1..e51b514b0a 100644 --- a/3party/boost/boost/fusion/adapted/struct.hpp +++ b/3party/boost/boost/fusion/adapted/struct.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt @@ -16,5 +16,6 @@ #include #include #include +#include #endif diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp index 865d9284bc..755bffd1c6 100644 --- a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp +++ b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2007 Dan Marsden - Copyright (c) 2009-2010 Christopher Schmidt + Copyright (c) 2009-2011 Christopher Schmidt 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) @@ -69,7 +69,8 @@ (1)NAME_SEQ, \ assoc_struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ASSOC_STRUCT_C) #define BOOST_FUSION_ADAPT_ASSOC_STRUCT(NAME, ATTRIBUTES) \ @@ -78,7 +79,8 @@ (0)(NAME), \ assoc_struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ASSOC_STRUCT_C) #define BOOST_FUSION_ADAPT_ASSOC_STRUCT_AS_VIEW(NAME, ATTRIBUTES) \ @@ -87,7 +89,8 @@ (0)(NAME), \ assoc_struct_tag, \ 1, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_ASSOC_STRUCT_C) #endif diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp index 996c9f4788..92c3aa3e30 100644 --- a/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp +++ b/3party/boost/boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -27,7 +27,8 @@ BOOST_FUSION_ADAPT_ASSOC_STRUCT_AS_VIEW( \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \ BOOST_PP_CAT( \ - BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_0 ATTRIBUTES,_END)) + BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_FILLER_0 ATTRIBUTES, \ + _END)) #define BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \ BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS( \ diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp index 066da8aa19..f20533c99e 100644 --- a/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp +++ b/3party/boost/boost/fusion/adapted/struct/adapt_struct.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 2001-2007 Joel de Guzman - Copyright (c) 2009-2010 Christopher Schmidt + Copyright (c) 2009-2011 Christopher Schmidt 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) @@ -46,7 +46,8 @@ (1)NAME_SEQ, \ struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + ((0,0)) BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_STRUCT_C) #define BOOST_FUSION_ADAPT_STRUCT(NAME, ATTRIBUTES) \ @@ -55,7 +56,7 @@ (0)(NAME), \ struct_tag, \ 0, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_STRUCT_C) #define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ATTRIBUTES) \ @@ -64,7 +65,7 @@ (0)(NAME), \ struct_tag, \ 1, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \ BOOST_FUSION_ADAPT_STRUCT_C) #endif diff --git a/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp b/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp index ef13be0232..17a3d8e3ca 100644 --- a/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp +++ b/3party/boost/boost/fusion/adapted/struct/adapt_struct_named.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2009-2010 Hartmut Kaiser - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -29,7 +29,8 @@ \ BOOST_FUSION_ADAPT_STRUCT_AS_VIEW( \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0 ATTRIBUTES,_END)) + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0 ATTRIBUTES,_END)) #define BOOST_FUSION_ADAPT_STRUCT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \ BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \ diff --git a/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp b/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp index d69ed461ec..9d264e4085 100644 --- a/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp +++ b/3party/boost/boost/fusion/adapted/struct/define_assoc_struct.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -18,7 +18,8 @@ TEMPLATE_PARAMS_SEQ, \ (0)NAMESPACE_SEQ, \ NAME, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \ 3) \ \ BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT( \ @@ -31,7 +32,8 @@ BOOST_FUSION_DEFINE_STRUCT_IMPL( \ (0)NAMESPACE_SEQ, \ NAME, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT( \ + BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \ 3) \ \ BOOST_FUSION_ADAPT_ASSOC_STRUCT( \ diff --git a/3party/boost/boost/fusion/adapted/struct/define_struct.hpp b/3party/boost/boost/fusion/adapted/struct/define_struct.hpp index 11a393b7b7..b733115ac0 100644 --- a/3party/boost/boost/fusion/adapted/struct/define_struct.hpp +++ b/3party/boost/boost/fusion/adapted/struct/define_struct.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -18,7 +18,7 @@ TEMPLATE_PARAMS_SEQ, \ (0)NAMESPACE_SEQ, \ NAME, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \ 2) \ \ BOOST_FUSION_ADAPT_TPL_STRUCT( \ @@ -31,7 +31,7 @@ BOOST_FUSION_DEFINE_STRUCT_IMPL( \ (0)NAMESPACE_SEQ, \ NAME, \ - BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \ 2) \ \ BOOST_FUSION_ADAPT_STRUCT( \ diff --git a/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp b/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp new file mode 100644 index 0000000000..9dc5b44cc6 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/struct/define_struct_inline.hpp @@ -0,0 +1,25 @@ +/*============================================================================= + Copyright (c) 2012 Nathan Ridge + + 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 BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_INLINE_HPP +#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_INLINE_HPP + +#include +#include + +#define BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES) \ + \ + BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE_IMPL( \ + TEMPLATE_PARAMS_SEQ, \ + NAME, \ + ATTRIBUTES) + +#define BOOST_FUSION_DEFINE_STRUCT_INLINE(NAME, ATTRIBUTES) \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_IMPL(NAME, ATTRIBUTES) \ + +#endif diff --git a/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp b/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp index 503fc2361c..1c8f040850 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/adapt_base.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2001-2009 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Copyright (c) 2009-2010 Christopher Schmidt + Copyright (c) 2009-2011 Christopher Schmidt 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) @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -185,18 +186,21 @@ namespace boost \ namespace extension \ { \ - BOOST_PP_SEQ_FOR_EACH_I_R( \ - 1, \ - BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL, \ - (ATTRIBUTES_CALLBACK,TEMPLATE_PARAMS_SEQ,NAME_SEQ), \ - ATTRIBUTES_SEQ) \ + BOOST_PP_IF( \ + BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \ + BOOST_PP_SEQ_FOR_EACH_I_R, \ + BOOST_PP_TUPLE_EAT(4))( \ + 1, \ + BOOST_FUSION_ADAPT_STRUCT_BASE_UNPACK_AND_CALL, \ + (ATTRIBUTES_CALLBACK,TEMPLATE_PARAMS_SEQ,NAME_SEQ), \ + BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ)) \ \ template< \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS( \ TEMPLATE_PARAMS_SEQ) \ > \ struct struct_size \ - : mpl::int_ \ + : mpl::int_ \ {}; \ \ template< \ diff --git a/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp index 99c63e9a34..68fd241a88 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp index 80321ee125..a7901fcad5 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/category_of_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/category_of_impl.hpp index 81350e6a8f..b98e824202 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/category_of_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/category_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp b/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp index 5f761463e9..53f1e5d646 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/define_struct.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2010-2011 Christopher Schmidt 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) @@ -201,7 +201,7 @@ >::param_type BOOST_PP_CAT(_,I) #define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N( \ - TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ \ NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \ 1, \ @@ -228,7 +228,7 @@ >::param_type BOOST_PP_CAT(_,I) #define BOOST_FUSION_DEFINE_STRUCT_CTOR_N( \ - NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ \ NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \ 1, \ @@ -242,15 +242,44 @@ ATTRIBUTES_SEQ) \ {} -#define BOOST_FUSION_DEFINE_STRUCT_CTOR(ATTRIBUTES_SEQ) \ +#define BOOST_FUSION_DEFINE_STRUCT_CTOR( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + \ BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \ BOOST_FUSION_DEFINE_STRUCT_CTOR_N, \ - BOOST_FUSION_DEFINE_STRUCT_CTOR_1) + BOOST_FUSION_DEFINE_STRUCT_CTOR_1)( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) -#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR(ATTRIBUTES_SEQ) \ +#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + \ BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \ BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N, \ - BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1) + BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1)( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) + +#define BOOST_FUSION_DEFINE_NONEMPTY_STRUCT_IMPL( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + \ + BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \ + NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) \ + \ + BOOST_FUSION_DEFINE_STRUCT_CTOR( \ + NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) + +#define BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + \ + template \ + NAME(Seq const&) \ + {} \ + \ + template \ + self_type& \ + operator=(Seq const& seq) \ + { \ + return *this; \ + } #define BOOST_FUSION_DEFINE_STRUCT_IMPL( \ NAMESPACE_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ @@ -261,15 +290,32 @@ { \ typedef NAME self_type; \ \ - BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \ - NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ - \ - BOOST_FUSION_DEFINE_STRUCT_CTOR(ATTRIBUTES_SEQ)( \ - NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \ + BOOST_FUSION_DEFINE_NONEMPTY_STRUCT_IMPL, \ + BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL)( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ }; \ \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ) +#define BOOST_FUSION_DEFINE_NONEMPTY_TPL_STRUCT_IMPL( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + \ + BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \ + NAME, BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), ATTRIBUTE_TUPEL_SIZE) \ + \ + BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR( \ + TEMPLATE_PARAMS_SEQ, \ + NAME, \ + BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ), \ + ATTRIBUTE_TUPEL_SIZE) + +#define BOOST_FUSION_DEFINE_EMPTY_TPL_STRUCT_IMPL( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + \ + BOOST_FUSION_DEFINE_EMPTY_STRUCT_IMPL( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) + #define BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL( \ TEMPLATE_PARAMS_SEQ, \ NAMESPACE_SEQ, \ @@ -287,11 +333,10 @@ { \ typedef NAME self_type; \ \ - BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \ - NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ - \ - BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR(ATTRIBUTES_SEQ)( \ - TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \ + BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \ + BOOST_FUSION_DEFINE_NONEMPTY_TPL_STRUCT_IMPL, \ + BOOST_FUSION_DEFINE_EMPTY_TPL_STRUCT_IMPL)( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)\ }; \ \ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ) diff --git a/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp b/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp new file mode 100644 index 0000000000..a7961ec311 --- /dev/null +++ b/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp @@ -0,0 +1,375 @@ +/*============================================================================= + Copyright (c) 2012 Nathan Ridge + + 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 BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEFINE_STRUCT_INLINE_HPP +#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEFINE_STRUCT_INLINE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BOOST_FUSION_MAKE_DEFAULT_INIT_LIST_ENTRY(R, DATA, N, ATTRIBUTE) \ + BOOST_PP_COMMA_IF(N) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)() + +#define BOOST_FUSION_MAKE_DEFAULT_INIT_LIST(ATTRIBUTES_SEQ) \ + : BOOST_PP_SEQ_FOR_EACH_I( \ + BOOST_FUSION_MAKE_DEFAULT_INIT_LIST_ENTRY, \ + ~, \ + ATTRIBUTES_SEQ) \ + +#define BOOST_FUSION_IGNORE_1(ARG1) +#define BOOST_FUSION_IGNORE_2(ARG1, ARG2) + +#define BOOST_FUSION_MAKE_COPY_CONSTRUCTOR(NAME, ATTRIBUTES_SEQ) \ + NAME(BOOST_PP_SEQ_FOR_EACH_I( \ + BOOST_FUSION_MAKE_CONST_REF_PARAM, \ + ~, \ + ATTRIBUTES_SEQ)) \ + : BOOST_PP_SEQ_FOR_EACH_I( \ + BOOST_FUSION_MAKE_INIT_LIST_ENTRY, \ + ~, \ + ATTRIBUTES_SEQ) \ + { \ + } \ + +#define BOOST_FUSION_MAKE_CONST_REF_PARAM(R, DATA, N, ATTRIBUTE) \ + BOOST_PP_COMMA_IF(N) \ + BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) const& \ + BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE) + +#define BOOST_FUSION_MAKE_INIT_LIST_ENTRY_I(NAME) NAME(NAME) + +#define BOOST_FUSION_MAKE_INIT_LIST_ENTRY(R, DATA, N, ATTRIBUTE) \ + BOOST_PP_COMMA_IF(N) \ + BOOST_FUSION_MAKE_INIT_LIST_ENTRY_I(BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)) + +// Note: all template parameter names need to be uglified, otherwise they might +// shadow a template parameter of the struct when used with +// BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE + +#define BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS(Z, N, NAME) \ + template \ + struct value_of > \ + : boost::mpl::identity< \ + typename boost_fusion_uglified_Sq::t##N##_type \ + > \ + { \ + }; + +#define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \ + SPEC_TYPE, CALL_ARG_TYPE, TYPE_QUAL, ATTRIBUTE, N) \ + \ + template \ + struct deref > \ + { \ + typedef typename boost_fusion_uglified_Sq::t##N##_type TYPE_QUAL& type; \ + static type call(CALL_ARG_TYPE, N> const& iter) \ + { \ + return iter.seq_.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \ + } \ + }; + +#define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS(R, NAME, N, ATTRIBUTE) \ + BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \ + BOOST_PP_CAT(NAME, _iterator) \ + struct value_at > \ + { \ + typedef typename boost_fusion_uglified_Sq::t##N##_type type; \ + }; + +#define BOOST_FUSION_MAKE_AT_SPECS(R, DATA, N, ATTRIBUTE) \ + template \ + struct at > \ + { \ + typedef typename boost::mpl::if_< \ + boost::is_const, \ + typename boost_fusion_uglified_Sq::t##N##_type const&, \ + typename boost_fusion_uglified_Sq::t##N##_type& \ + >::type type; \ + \ + static type call(boost_fusion_uglified_Sq& sq) \ + { \ + return sq. BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \ + } \ + }; + +#define BOOST_FUSION_MAKE_TYPEDEF(R, DATA, N, ATTRIBUTE) \ + typedef BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) t##N##_type; + +#define BOOST_FUSION_MAKE_DATA_MEMBER(R, DATA, N, ATTRIBUTE) \ + BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); + +#define BOOST_FUSION_DEFINE_STRUCT_INLINE_IMPL(NAME, ATTRIBUTES) \ + struct NAME : boost::fusion::sequence_facade< \ + NAME, \ + boost::fusion::random_access_traversal_tag \ + > \ + { \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS(NAME, ATTRIBUTES) \ + }; + +#define BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE_IMPL( \ + TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES) \ + \ + template < \ + BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL( \ + (0)TEMPLATE_PARAMS_SEQ) \ + > \ + struct NAME : boost::fusion::sequence_facade< \ + NAME< \ + BOOST_PP_SEQ_ENUM(TEMPLATE_PARAMS_SEQ) \ + >, \ + boost::fusion::random_access_traversal_tag \ + > \ + { \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS(NAME, ATTRIBUTES) \ + }; + +#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS(NAME, ATTRIBUTES) \ + BOOST_FUSION_DEFINE_STRUCT_MEMBERS_IMPL( \ + NAME, \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END)) + +#define BOOST_FUSION_DEFINE_STRUCT_MEMBERS_IMPL(NAME, ATTRIBUTES_SEQ) \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \ + NAME, \ + ATTRIBUTES_SEQ, \ + BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)) + +#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \ + \ + NAME() \ + BOOST_PP_IF( \ + BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ + BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \ + BOOST_FUSION_IGNORE_1) \ + (ATTRIBUTES_SEQ) \ + { \ + } \ + \ + BOOST_PP_IF( \ + BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ + BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \ + BOOST_FUSION_IGNORE_2) \ + (NAME, ATTRIBUTES_SEQ) \ + \ + template \ + NAME(const boost_fusion_uglified_Seq& rhs) \ + { \ + boost::fusion::copy(rhs, *this); \ + } \ + \ + template \ + NAME& operator=(const boost_fusion_uglified_Seq& rhs) \ + { \ + boost::fusion::copy(rhs, *this); \ + return *this; \ + } \ + \ + template \ + struct NAME##_iterator \ + : boost::fusion::iterator_facade< \ + NAME##_iterator, \ + boost::fusion::random_access_traversal_tag \ + > \ + { \ + typedef boost::mpl::int_ index; \ + typedef boost_fusion_uglified_Seq sequence_type; \ + \ + NAME##_iterator(boost_fusion_uglified_Seq& seq) : seq_(seq) {} \ + \ + boost_fusion_uglified_Seq& seq_; \ + \ + template struct value_of; \ + BOOST_PP_REPEAT( \ + ATTRIBUTES_SEQ_SIZE, \ + BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \ + NAME) \ + \ + template struct deref; \ + BOOST_PP_SEQ_FOR_EACH_I( \ + BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \ + NAME, \ + ATTRIBUTES_SEQ) \ + \ + template \ + struct next \ + { \ + typedef NAME##_iterator< \ + typename boost_fusion_uglified_It::sequence_type, \ + boost_fusion_uglified_It::index::value + 1 \ + > type; \ + \ + static type call(boost_fusion_uglified_It const& it) \ + { \ + return type(it.seq_); \ + } \ + }; \ + \ + template \ + struct prior \ + { \ + typedef NAME##_iterator< \ + typename boost_fusion_uglified_It::sequence_type, \ + boost_fusion_uglified_It::index::value - 1 \ + > type; \ + \ + static type call(boost_fusion_uglified_It const& it) \ + { \ + return type(it.seq_); \ + } \ + }; \ + \ + template < \ + typename boost_fusion_uglified_It1, \ + typename boost_fusion_uglified_It2 \ + > \ + struct distance \ + { \ + typedef typename boost::mpl::minus< \ + typename boost_fusion_uglified_It2::index, \ + typename boost_fusion_uglified_It1::index \ + >::type type; \ + \ + static type call(boost_fusion_uglified_It1 const& it1, \ + boost_fusion_uglified_It2 const& it2) \ + { \ + return type(); \ + } \ + }; \ + \ + template < \ + typename boost_fusion_uglified_It, \ + typename boost_fusion_uglified_M \ + > \ + struct advance \ + { \ + typedef NAME##_iterator< \ + typename boost_fusion_uglified_It::sequence_type, \ + boost_fusion_uglified_It::index::value \ + + boost_fusion_uglified_M::value \ + > type; \ + \ + static type call(boost_fusion_uglified_It const& it) \ + { \ + return type(it.seq_); \ + } \ + }; \ + }; \ + \ + template \ + struct begin \ + { \ + typedef NAME##_iterator type; \ + \ + static type call(boost_fusion_uglified_Sq& sq) \ + { \ + return type(sq); \ + } \ + }; \ + \ + template \ + struct end \ + { \ + typedef NAME##_iterator< \ + boost_fusion_uglified_Sq, \ + ATTRIBUTES_SEQ_SIZE \ + > type; \ + \ + static type call(boost_fusion_uglified_Sq& sq) \ + { \ + return type(sq); \ + } \ + }; \ + \ + template \ + struct size : boost::mpl::int_ \ + { \ + }; \ + \ + template \ + struct empty : boost::mpl::bool_ \ + { \ + }; \ + \ + template < \ + typename boost_fusion_uglified_Sq, \ + typename boost_fusion_uglified_N \ + > \ + struct value_at : value_at< \ + boost_fusion_uglified_Sq, \ + boost::mpl::int_ \ + > \ + { \ + }; \ + \ + BOOST_PP_REPEAT( \ + ATTRIBUTES_SEQ_SIZE, \ + BOOST_FUSION_MAKE_VALUE_AT_SPECS, \ + ~) \ + \ + template < \ + typename boost_fusion_uglified_Sq, \ + typename boost_fusion_uglified_N \ + > \ + struct at : at< \ + boost_fusion_uglified_Sq, \ + boost::mpl::int_ \ + > \ + { \ + }; \ + \ + BOOST_PP_SEQ_FOR_EACH_I(BOOST_FUSION_MAKE_AT_SPECS, ~, ATTRIBUTES_SEQ) \ + \ + BOOST_PP_SEQ_FOR_EACH_I(BOOST_FUSION_MAKE_TYPEDEF, ~, ATTRIBUTES_SEQ) \ + \ + BOOST_PP_SEQ_FOR_EACH_I( \ + BOOST_FUSION_MAKE_DATA_MEMBER, \ + ~, \ + ATTRIBUTES_SEQ) + +#endif diff --git a/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp index e4f92056bb..0d09092957 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp index 6f8adde5ca..c32222f8cf 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/is_sequence_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/is_view_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/is_view_impl.hpp index eae0b36403..71d284077c 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/is_view_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/is_view_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/size_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/size_impl.hpp index 43a5705744..baf411bd00 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/adapted/struct/detail/value_at_impl.hpp b/3party/boost/boost/fusion/adapted/struct/detail/value_at_impl.hpp index 08c82fc0c9..f820475324 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt diff --git a/3party/boost/boost/fusion/algorithm.hpp b/3party/boost/boost/fusion/algorithm.hpp index 74e5272326..0b085bf41a 100644 --- a/3party/boost/boost/fusion/algorithm.hpp +++ b/3party/boost/boost/fusion/algorithm.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp b/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp index 2720627c40..fd866468eb 100644 --- a/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp +++ b/3party/boost/boost/fusion/algorithm/auxiliary/copy.hpp @@ -11,8 +11,11 @@ #include #include #include +#include #include #include +#include +#include #if defined (BOOST_MSVC) # pragma warning(push) @@ -54,7 +57,15 @@ namespace boost { namespace fusion } template - inline void + inline + typename + enable_if_c< + type_traits::ice_and< + traits::is_sequence::value + , traits::is_sequence::value + >::value, + void + >::type copy(Seq1 const& src, Seq2& dest) { BOOST_STATIC_ASSERT( diff --git a/3party/boost/boost/fusion/algorithm/iteration.hpp b/3party/boost/boost/fusion/algorithm/iteration.hpp index c94d4786c6..16a331b358 100644 --- a/3party/boost/boost/fusion/algorithm/iteration.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp b/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp index aa52a99b83..4b676dea6a 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/accumulate.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,7 +7,10 @@ #if !defined(FUSION_ACCUMULATE_09172005_1032) #define FUSION_ACCUMULATE_09172005_1032 +#include #include +#include +#include namespace boost { namespace fusion { @@ -22,14 +25,24 @@ namespace boost { namespace fusion } template - inline typename result_of::accumulate::type + inline + typename + lazy_enable_if< + traits::is_sequence + , result_of::accumulate + >::type accumulate(Sequence& seq, State const& state, F f) { return fusion::fold(seq, state, f); } template - inline typename result_of::accumulate::type + inline + typename + lazy_enable_if< + traits::is_sequence + , result_of::accumulate + >::type accumulate(Sequence const& seq, State const& state, F f) { return fusion::fold(seq, state, f); diff --git a/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp new file mode 100644 index 0000000000..a4ca316c1e --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/accumulate_fwd.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED) +#define BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED + +#include +#include + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct accumulate; + } + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::accumulate + >::type + accumulate(Sequence& seq, State const& state, F f); + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::accumulate + >::type + accumulate(Sequence const& seq, State const& state, F f); +}} + +#endif + diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp index 56302fb8be..174c4b105c 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/fold.hpp @@ -1,34 +1,12 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt 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 BOOST_FUSION_ALGORITHM_ITERATION_DETAIL_FOLD_HPP -#define BOOST_FUSION_ALGORITHM_ITERATION_DETAIL_FOLD_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include - -#endif #ifdef BOOST_FUSION_REVERSE_FOLD # ifdef BOOST_FUSION_ITER_FOLD @@ -185,7 +163,7 @@ namespace boost { namespace fusion { template static Result - call(State const& state,It0 const& it0,F f) + call(State const& state,It0 const& it0, F) { return static_cast(state); } @@ -347,53 +325,73 @@ namespace boost { namespace fusion type; }; - template + template struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl) { typedef typename BOOST_PP_CAT( result_of_first_unrolled,BOOST_FUSION_FOLD_NAME)< StateRef - , BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM(It0) + , BOOST_FUSION_FOLD_IMPL_FIRST_IT_META_TRANSFORM( + typename result_of::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION::type + ) , F , SeqSize >::type type; static type - call(StateRef state, It0 const& it0, F f) + call(StateRef state, Seq& seq, F f) { - return BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)< - type - , SeqSize - >::call(state,BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM(it0),f); + typedef + BOOST_PP_CAT(unrolled_,BOOST_FUSION_FOLD_NAME)< + type + , SeqSize + > + unrolled_impl; + + return unrolled_impl::call( + state, + BOOST_FUSION_FOLD_IMPL_FIRST_IT_TRANSFORM( + fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq)), + f); } }; - template - struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<0,StateRef,It0,F> + template + struct BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)<0,StateRef,Seq,F> { typedef StateRef type; static StateRef - call(StateRef state, It0 const&, F) + call(StateRef state, Seq&, F) { return static_cast(state); } }; + + template + struct BOOST_PP_CAT(result_of_, BOOST_FUSION_FOLD_NAME) + : BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)< + result_of::size::value + , typename add_reference< + typename add_const::type + >::type + , Seq + , F + > + {}; } namespace result_of { template struct BOOST_FUSION_FOLD_NAME - : detail::BOOST_PP_CAT(BOOST_FUSION_FOLD_NAME,_impl)< - size::value - , typename add_reference< - typename add_const::type - >::type - , typename BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION::type + : detail::BOOST_PP_CAT(result_of_, BOOST_FUSION_FOLD_NAME)< + Seq + , State , F + , traits::is_segmented::type::value > {}; } @@ -404,11 +402,11 @@ namespace boost { namespace fusion , State const , F >::type - BOOST_FUSION_FOLD_NAME(Seq& seq,State const& state,F f) + BOOST_FUSION_FOLD_NAME(Seq& seq, State const& state, F f) { return result_of::BOOST_FUSION_FOLD_NAME::call( state, - fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq), + seq, f); } @@ -418,11 +416,39 @@ namespace boost { namespace fusion , State const , F >::type - BOOST_FUSION_FOLD_NAME(Seq const& seq,State const& state,F f) + BOOST_FUSION_FOLD_NAME(Seq const& seq, State const& state, F f) { return result_of::BOOST_FUSION_FOLD_NAME::call( state, - fusion::BOOST_FUSION_FOLD_IMPL_FIRST_IT_FUNCTION(seq), + seq, + f); + } + + template + inline typename result_of::BOOST_FUSION_FOLD_NAME< + Seq + , State const + , F + >::type + BOOST_FUSION_FOLD_NAME(Seq& seq, State& state, F f) + { + return result_of::BOOST_FUSION_FOLD_NAME::call( + state, + seq, + f); + } + + template + inline typename result_of::BOOST_FUSION_FOLD_NAME< + Seq const + , State const + , F + >::type + BOOST_FUSION_FOLD_NAME(Seq const& seq, State& state, F f) + { + return result_of::BOOST_FUSION_FOLD_NAME::call( + state, + seq, f); } }} diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp index a23517c8c7..66a1935076 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/for_each.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -13,6 +13,7 @@ #include #include #include +#include #include namespace boost { namespace fusion { @@ -36,7 +37,7 @@ namespace detail template inline void - for_each(Sequence& seq, F const& f, Tag) + for_each_dispatch(Sequence& seq, F const& f, Tag) { detail::for_each_linear( fusion::begin(seq) @@ -117,12 +118,19 @@ namespace detail template inline void - for_each(Sequence& seq, F const& f, random_access_traversal_tag) + for_each_dispatch(Sequence& seq, F const& f, random_access_traversal_tag) { typedef typename result_of::begin::type begin; typedef typename result_of::end::type end; for_each_unrolled::type::value>::call(fusion::begin(seq), f); } + + template + inline void + for_each(Sequence& seq, F const& f, mpl::false_) // unsegmented implementation + { + detail::for_each_dispatch(seq, f, typename traits::category_of::type()); + } }}} diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp new file mode 100644 index 0000000000..d368338a0b --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp @@ -0,0 +1,381 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2007 Dan Marsden + Copyright (c) 2009-2010 Christopher Schmidt + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + namespace detail + { + template + struct fold_lvalue_state + : boost::result_of< + F( + typename add_reference::type>::type, + typename fusion::result_of::deref::type) + > + {}; + template + struct unrolled_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::next< + It0 const + >::type + It1; + It1 it1 = fusion::next(it0); + typedef typename + result_of::next< + It1 + >::type + It2; + It2 it2 = fusion::next(it1); + typedef typename + result_of::next< + It2 + >::type + It3; + It3 it3 = fusion::next(it2); + typedef typename fold_lvalue_state::type State1; + State1 const state1=f(state,fusion::deref(it0)); + typedef typename fold_lvalue_state::type State2; + State2 const state2=f(state1,fusion::deref(it1)); + typedef typename fold_lvalue_state::type State3; + State3 const state3=f(state2,fusion::deref(it2)); + return unrolled_fold< + Result + , N-4 + >::call( + f(state3,fusion::deref(it3)), + fusion::next(it3), + f); + } + }; + template + struct unrolled_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::next< + It0 const + >::type + It1; + It1 it1 = fusion::next(it0); + typedef typename + result_of::next< + It1 + >::type + It2; + It2 it2 = fusion::next(it1); + typedef typename fold_lvalue_state::type State1; + State1 const state1=f(state,fusion::deref(it0)); + typedef typename fold_lvalue_state::type State2; + State2 const state2=f(state1,fusion::deref(it1)); + return f(state2,fusion::deref(it2)); + } + }; + template + struct unrolled_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename fold_lvalue_state::type State1; + State1 const state1=f(state,fusion::deref(it0)); + return f( + state1, + fusion::deref( fusion::next(it0))); + } + }; + template + struct unrolled_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + return f(state, + fusion::deref(it0)); + } + }; + template + struct unrolled_fold + { + template + static Result + call(State const& state,It0 const& it0, F) + { + return static_cast(state); + } + }; + template + struct result_of_unrolled_fold + { + typedef typename + fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::next< + It0 const + >::type + it1; + typedef typename + fold_lvalue_state< + rest1 + , it1 + , F + >::type + rest2; + typedef typename + result_of::next::type + it2; + typedef typename + fold_lvalue_state< + rest2 + , it2 + , F + >::type + rest3; + typedef typename + result_of::next::type + it3; + typedef typename + result_of_unrolled_fold< + typename fold_lvalue_state< + rest3 + , it3 + , F + >::type + , typename result_of::next< + it3 + >::type + , F + , N-4 + >::type + type; + }; + template + struct result_of_unrolled_fold< + StateRef + , It0 + , F + , 3 + > + { + typedef typename + fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::next< + It0 const + >::type + it1; + typedef typename + fold_lvalue_state< + typename fold_lvalue_state< + rest1 + , it1 + , F + >::type + , typename result_of::next< + it1 const + >::type const + , F + >::type + type; + }; + template + struct result_of_unrolled_fold< + StateRef + , It0 + , F + , 2 + > + : fold_lvalue_state< + typename fold_lvalue_state< + StateRef + , It0 const + , F + >::type + , typename result_of::next< + It0 const + >::type const + , F + > + {}; + template + struct result_of_unrolled_fold< + StateRef + , It0 + , F + , 1 + > + : fold_lvalue_state< + StateRef + , It0 const + , F + > + {}; + template + struct result_of_unrolled_fold< + StateRef + , It0 + , F + , 0 + > + { + typedef StateRef type; + }; + template + struct result_of_first_unrolledfold + { + typedef typename + result_of_unrolled_fold< + typename boost::result_of< + F( + StateRef, + typename fusion::result_of::deref< It0 const>::type + ) + >::type + , typename result_of::next< + It0 const + >::type + , F + , SeqSize-1 + >::type + type; + }; + template + struct fold_impl + { + typedef typename + result_of_first_unrolledfold< + StateRef + , typename result_of::begin::type + , F + , SeqSize + >::type + type; + static type + call(StateRef state, Seq& seq, F f) + { + typedef + unrolled_fold< + type + , SeqSize + > + unrolled_impl; + return unrolled_impl::call( + state, + fusion::begin(seq), + f); + } + }; + template + struct fold_impl<0,StateRef,Seq,F> + { + typedef StateRef type; + static StateRef + call(StateRef state, Seq&, F) + { + return static_cast(state); + } + }; + template + struct result_of_fold + : fold_impl< + result_of::size::value + , typename add_reference< + typename add_const::type + >::type + , Seq + , F + > + {}; + } + namespace result_of + { + template + struct fold + : detail::result_of_fold< + Seq + , State + , F + , traits::is_segmented::type::value + > + {}; + } + template + inline typename result_of::fold< + Seq + , State const + , F + >::type + fold(Seq& seq, State const& state, F f) + { + return result_of::fold::call( + state, + seq, + f); + } + template + inline typename result_of::fold< + Seq const + , State const + , F + >::type + fold(Seq const& seq, State const& state, F f) + { + return result_of::fold::call( + state, + seq, + f); + } + template + inline typename result_of::fold< + Seq + , State const + , F + >::type + fold(Seq& seq, State& state, F f) + { + return result_of::fold::call( + state, + seq, + f); + } + template + inline typename result_of::fold< + Seq const + , State const + , F + >::type + fold(Seq const& seq, State& state, F f) + { + return result_of::fold::call( + state, + seq, + f); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp new file mode 100644 index 0000000000..74f8a0577b --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp @@ -0,0 +1,380 @@ +/*============================================================================= + Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + namespace detail + { + template + struct iter_fold_lvalue_state + : boost::result_of< + F( + typename add_reference::type>::type, + It&) + > + {}; + template + struct unrolled_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::next< + It0 const + >::type + It1; + It1 it1 = fusion::next(it0); + typedef typename + result_of::next< + It1 + >::type + It2; + It2 it2 = fusion::next(it1); + typedef typename + result_of::next< + It2 + >::type + It3; + It3 it3 = fusion::next(it2); + typedef typename iter_fold_lvalue_state::type State1; + State1 const state1=f(state,it0); + typedef typename iter_fold_lvalue_state::type State2; + State2 const state2=f(state1,it1); + typedef typename iter_fold_lvalue_state::type State3; + State3 const state3=f(state2,it2); + return unrolled_iter_fold< + Result + , N-4 + >::call( + f(state3,it3), + fusion::next(it3), + f); + } + }; + template + struct unrolled_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::next< + It0 const + >::type + It1; + It1 it1 = fusion::next(it0); + typedef typename + result_of::next< + It1 + >::type + It2; + It2 it2 = fusion::next(it1); + typedef typename iter_fold_lvalue_state::type State1; + State1 const state1=f(state,it0); + typedef typename iter_fold_lvalue_state::type State2; + State2 const state2=f(state1,it1); + return f(state2,it2); + } + }; + template + struct unrolled_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename iter_fold_lvalue_state::type State1; + State1 const state1=f(state,it0); + return f( + state1, + fusion::next(it0)); + } + }; + template + struct unrolled_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + return f(state, + it0); + } + }; + template + struct unrolled_iter_fold + { + template + static Result + call(State const& state,It0 const& it0, F) + { + return static_cast(state); + } + }; + template + struct result_of_unrolled_iter_fold + { + typedef typename + iter_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::next< + It0 const + >::type + it1; + typedef typename + iter_fold_lvalue_state< + rest1 + , it1 + , F + >::type + rest2; + typedef typename + result_of::next::type + it2; + typedef typename + iter_fold_lvalue_state< + rest2 + , it2 + , F + >::type + rest3; + typedef typename + result_of::next::type + it3; + typedef typename + result_of_unrolled_iter_fold< + typename iter_fold_lvalue_state< + rest3 + , it3 + , F + >::type + , typename result_of::next< + it3 + >::type + , F + , N-4 + >::type + type; + }; + template + struct result_of_unrolled_iter_fold< + StateRef + , It0 + , F + , 3 + > + { + typedef typename + iter_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::next< + It0 const + >::type + it1; + typedef typename + iter_fold_lvalue_state< + typename iter_fold_lvalue_state< + rest1 + , it1 + , F + >::type + , typename result_of::next< + it1 const + >::type const + , F + >::type + type; + }; + template + struct result_of_unrolled_iter_fold< + StateRef + , It0 + , F + , 2 + > + : iter_fold_lvalue_state< + typename iter_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + , typename result_of::next< + It0 const + >::type const + , F + > + {}; + template + struct result_of_unrolled_iter_fold< + StateRef + , It0 + , F + , 1 + > + : iter_fold_lvalue_state< + StateRef + , It0 const + , F + > + {}; + template + struct result_of_unrolled_iter_fold< + StateRef + , It0 + , F + , 0 + > + { + typedef StateRef type; + }; + template + struct result_of_first_unrollediter_fold + { + typedef typename + result_of_unrolled_iter_fold< + typename boost::result_of< + F( + StateRef, + It0 const& + ) + >::type + , typename result_of::next< + It0 const + >::type + , F + , SeqSize-1 + >::type + type; + }; + template + struct iter_fold_impl + { + typedef typename + result_of_first_unrollediter_fold< + StateRef + , typename result_of::begin::type + , F + , SeqSize + >::type + type; + static type + call(StateRef state, Seq& seq, F f) + { + typedef + unrolled_iter_fold< + type + , SeqSize + > + unrolled_impl; + return unrolled_impl::call( + state, + fusion::begin(seq), + f); + } + }; + template + struct iter_fold_impl<0,StateRef,Seq,F> + { + typedef StateRef type; + static StateRef + call(StateRef state, Seq&, F) + { + return static_cast(state); + } + }; + template + struct result_of_iter_fold + : iter_fold_impl< + result_of::size::value + , typename add_reference< + typename add_const::type + >::type + , Seq + , F + > + {}; + } + namespace result_of + { + template + struct iter_fold + : detail::result_of_iter_fold< + Seq + , State + , F + , traits::is_segmented::type::value + > + {}; + } + template + inline typename result_of::iter_fold< + Seq + , State const + , F + >::type + iter_fold(Seq& seq, State const& state, F f) + { + return result_of::iter_fold::call( + state, + seq, + f); + } + template + inline typename result_of::iter_fold< + Seq const + , State const + , F + >::type + iter_fold(Seq const& seq, State const& state, F f) + { + return result_of::iter_fold::call( + state, + seq, + f); + } + template + inline typename result_of::iter_fold< + Seq + , State const + , F + >::type + iter_fold(Seq& seq, State& state, F f) + { + return result_of::iter_fold::call( + state, + seq, + f); + } + template + inline typename result_of::iter_fold< + Seq const + , State const + , F + >::type + iter_fold(Seq const& seq, State& state, F f) + { + return result_of::iter_fold::call( + state, + seq, + f); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp new file mode 100644 index 0000000000..71730abf07 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp @@ -0,0 +1,380 @@ +/*============================================================================= + Copyright (c) 2009-2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + namespace detail + { + template + struct reverse_fold_lvalue_state + : boost::result_of< + F( + typename add_reference::type>::type, + typename fusion::result_of::deref::type) + > + {}; + template + struct unrolled_reverse_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::prior< + It0 const + >::type + It1; + It1 it1 = fusion::prior(it0); + typedef typename + result_of::prior< + It1 + >::type + It2; + It2 it2 = fusion::prior(it1); + typedef typename + result_of::prior< + It2 + >::type + It3; + It3 it3 = fusion::prior(it2); + typedef typename reverse_fold_lvalue_state::type State1; + State1 const state1=f(state,fusion::deref(it0)); + typedef typename reverse_fold_lvalue_state::type State2; + State2 const state2=f(state1,fusion::deref(it1)); + typedef typename reverse_fold_lvalue_state::type State3; + State3 const state3=f(state2,fusion::deref(it2)); + return unrolled_reverse_fold< + Result + , N-4 + >::call( + f(state3,fusion::deref(it3)), + fusion::prior(it3), + f); + } + }; + template + struct unrolled_reverse_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::prior< + It0 const + >::type + It1; + It1 it1 = fusion::prior(it0); + typedef typename + result_of::prior< + It1 + >::type + It2; + It2 it2 = fusion::prior(it1); + typedef typename reverse_fold_lvalue_state::type State1; + State1 const state1=f(state,fusion::deref(it0)); + typedef typename reverse_fold_lvalue_state::type State2; + State2 const state2=f(state1,fusion::deref(it1)); + return f(state2,fusion::deref(it2)); + } + }; + template + struct unrolled_reverse_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename reverse_fold_lvalue_state::type State1; + State1 const state1=f(state,fusion::deref(it0)); + return f( + state1, + fusion::deref( fusion::prior(it0))); + } + }; + template + struct unrolled_reverse_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + return f(state, + fusion::deref(it0)); + } + }; + template + struct unrolled_reverse_fold + { + template + static Result + call(State const& state,It0 const& it0, F) + { + return static_cast(state); + } + }; + template + struct result_of_unrolled_reverse_fold + { + typedef typename + reverse_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::prior< + It0 const + >::type + it1; + typedef typename + reverse_fold_lvalue_state< + rest1 + , it1 + , F + >::type + rest2; + typedef typename + result_of::prior::type + it2; + typedef typename + reverse_fold_lvalue_state< + rest2 + , it2 + , F + >::type + rest3; + typedef typename + result_of::prior::type + it3; + typedef typename + result_of_unrolled_reverse_fold< + typename reverse_fold_lvalue_state< + rest3 + , it3 + , F + >::type + , typename result_of::prior< + it3 + >::type + , F + , N-4 + >::type + type; + }; + template + struct result_of_unrolled_reverse_fold< + StateRef + , It0 + , F + , 3 + > + { + typedef typename + reverse_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::prior< + It0 const + >::type + it1; + typedef typename + reverse_fold_lvalue_state< + typename reverse_fold_lvalue_state< + rest1 + , it1 + , F + >::type + , typename result_of::prior< + it1 const + >::type const + , F + >::type + type; + }; + template + struct result_of_unrolled_reverse_fold< + StateRef + , It0 + , F + , 2 + > + : reverse_fold_lvalue_state< + typename reverse_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + , typename result_of::prior< + It0 const + >::type const + , F + > + {}; + template + struct result_of_unrolled_reverse_fold< + StateRef + , It0 + , F + , 1 + > + : reverse_fold_lvalue_state< + StateRef + , It0 const + , F + > + {}; + template + struct result_of_unrolled_reverse_fold< + StateRef + , It0 + , F + , 0 + > + { + typedef StateRef type; + }; + template + struct result_of_first_unrolledreverse_fold + { + typedef typename + result_of_unrolled_reverse_fold< + typename boost::result_of< + F( + StateRef, + typename fusion::result_of::deref< It0 const>::type + ) + >::type + , typename result_of::prior< + It0 const + >::type + , F + , SeqSize-1 + >::type + type; + }; + template + struct reverse_fold_impl + { + typedef typename + result_of_first_unrolledreverse_fold< + StateRef + , typename fusion::result_of::prior< typename result_of::end::type >::type + , F + , SeqSize + >::type + type; + static type + call(StateRef state, Seq& seq, F f) + { + typedef + unrolled_reverse_fold< + type + , SeqSize + > + unrolled_impl; + return unrolled_impl::call( + state, + fusion::prior( fusion::end(seq)), + f); + } + }; + template + struct reverse_fold_impl<0,StateRef,Seq,F> + { + typedef StateRef type; + static StateRef + call(StateRef state, Seq&, F) + { + return static_cast(state); + } + }; + template + struct result_of_reverse_fold + : reverse_fold_impl< + result_of::size::value + , typename add_reference< + typename add_const::type + >::type + , Seq + , F + > + {}; + } + namespace result_of + { + template + struct reverse_fold + : detail::result_of_reverse_fold< + Seq + , State + , F + , traits::is_segmented::type::value + > + {}; + } + template + inline typename result_of::reverse_fold< + Seq + , State const + , F + >::type + reverse_fold(Seq& seq, State const& state, F f) + { + return result_of::reverse_fold::call( + state, + seq, + f); + } + template + inline typename result_of::reverse_fold< + Seq const + , State const + , F + >::type + reverse_fold(Seq const& seq, State const& state, F f) + { + return result_of::reverse_fold::call( + state, + seq, + f); + } + template + inline typename result_of::reverse_fold< + Seq + , State const + , F + >::type + reverse_fold(Seq& seq, State& state, F f) + { + return result_of::reverse_fold::call( + state, + seq, + f); + } + template + inline typename result_of::reverse_fold< + Seq const + , State const + , F + >::type + reverse_fold(Seq const& seq, State& state, F f) + { + return result_of::reverse_fold::call( + state, + seq, + f); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp new file mode 100644 index 0000000000..93b8c988dc --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp @@ -0,0 +1,380 @@ +/*============================================================================= + Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + namespace detail + { + template + struct reverse_iter_fold_lvalue_state + : boost::result_of< + F( + typename add_reference::type>::type, + It&) + > + {}; + template + struct unrolled_reverse_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::prior< + It0 const + >::type + It1; + It1 it1 = fusion::prior(it0); + typedef typename + result_of::prior< + It1 + >::type + It2; + It2 it2 = fusion::prior(it1); + typedef typename + result_of::prior< + It2 + >::type + It3; + It3 it3 = fusion::prior(it2); + typedef typename reverse_iter_fold_lvalue_state::type State1; + State1 const state1=f(state,it0); + typedef typename reverse_iter_fold_lvalue_state::type State2; + State2 const state2=f(state1,it1); + typedef typename reverse_iter_fold_lvalue_state::type State3; + State3 const state3=f(state2,it2); + return unrolled_reverse_iter_fold< + Result + , N-4 + >::call( + f(state3,it3), + fusion::prior(it3), + f); + } + }; + template + struct unrolled_reverse_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename + result_of::prior< + It0 const + >::type + It1; + It1 it1 = fusion::prior(it0); + typedef typename + result_of::prior< + It1 + >::type + It2; + It2 it2 = fusion::prior(it1); + typedef typename reverse_iter_fold_lvalue_state::type State1; + State1 const state1=f(state,it0); + typedef typename reverse_iter_fold_lvalue_state::type State2; + State2 const state2=f(state1,it1); + return f(state2,it2); + } + }; + template + struct unrolled_reverse_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + typedef typename reverse_iter_fold_lvalue_state::type State1; + State1 const state1=f(state,it0); + return f( + state1, + fusion::prior(it0)); + } + }; + template + struct unrolled_reverse_iter_fold + { + template + static Result + call(State const& state,It0 const& it0,F f) + { + return f(state, + it0); + } + }; + template + struct unrolled_reverse_iter_fold + { + template + static Result + call(State const& state,It0 const& it0, F) + { + return static_cast(state); + } + }; + template + struct result_of_unrolled_reverse_iter_fold + { + typedef typename + reverse_iter_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::prior< + It0 const + >::type + it1; + typedef typename + reverse_iter_fold_lvalue_state< + rest1 + , it1 + , F + >::type + rest2; + typedef typename + result_of::prior::type + it2; + typedef typename + reverse_iter_fold_lvalue_state< + rest2 + , it2 + , F + >::type + rest3; + typedef typename + result_of::prior::type + it3; + typedef typename + result_of_unrolled_reverse_iter_fold< + typename reverse_iter_fold_lvalue_state< + rest3 + , it3 + , F + >::type + , typename result_of::prior< + it3 + >::type + , F + , N-4 + >::type + type; + }; + template + struct result_of_unrolled_reverse_iter_fold< + StateRef + , It0 + , F + , 3 + > + { + typedef typename + reverse_iter_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + rest1; + typedef typename + result_of::prior< + It0 const + >::type + it1; + typedef typename + reverse_iter_fold_lvalue_state< + typename reverse_iter_fold_lvalue_state< + rest1 + , it1 + , F + >::type + , typename result_of::prior< + it1 const + >::type const + , F + >::type + type; + }; + template + struct result_of_unrolled_reverse_iter_fold< + StateRef + , It0 + , F + , 2 + > + : reverse_iter_fold_lvalue_state< + typename reverse_iter_fold_lvalue_state< + StateRef + , It0 const + , F + >::type + , typename result_of::prior< + It0 const + >::type const + , F + > + {}; + template + struct result_of_unrolled_reverse_iter_fold< + StateRef + , It0 + , F + , 1 + > + : reverse_iter_fold_lvalue_state< + StateRef + , It0 const + , F + > + {}; + template + struct result_of_unrolled_reverse_iter_fold< + StateRef + , It0 + , F + , 0 + > + { + typedef StateRef type; + }; + template + struct result_of_first_unrolledreverse_iter_fold + { + typedef typename + result_of_unrolled_reverse_iter_fold< + typename boost::result_of< + F( + StateRef, + It0 const& + ) + >::type + , typename result_of::prior< + It0 const + >::type + , F + , SeqSize-1 + >::type + type; + }; + template + struct reverse_iter_fold_impl + { + typedef typename + result_of_first_unrolledreverse_iter_fold< + StateRef + , typename fusion::result_of::prior< typename result_of::end::type >::type + , F + , SeqSize + >::type + type; + static type + call(StateRef state, Seq& seq, F f) + { + typedef + unrolled_reverse_iter_fold< + type + , SeqSize + > + unrolled_impl; + return unrolled_impl::call( + state, + fusion::prior( fusion::end(seq)), + f); + } + }; + template + struct reverse_iter_fold_impl<0,StateRef,Seq,F> + { + typedef StateRef type; + static StateRef + call(StateRef state, Seq&, F) + { + return static_cast(state); + } + }; + template + struct result_of_reverse_iter_fold + : reverse_iter_fold_impl< + result_of::size::value + , typename add_reference< + typename add_const::type + >::type + , Seq + , F + > + {}; + } + namespace result_of + { + template + struct reverse_iter_fold + : detail::result_of_reverse_iter_fold< + Seq + , State + , F + , traits::is_segmented::type::value + > + {}; + } + template + inline typename result_of::reverse_iter_fold< + Seq + , State const + , F + >::type + reverse_iter_fold(Seq& seq, State const& state, F f) + { + return result_of::reverse_iter_fold::call( + state, + seq, + f); + } + template + inline typename result_of::reverse_iter_fold< + Seq const + , State const + , F + >::type + reverse_iter_fold(Seq const& seq, State const& state, F f) + { + return result_of::reverse_iter_fold::call( + state, + seq, + f); + } + template + inline typename result_of::reverse_iter_fold< + Seq + , State const + , F + >::type + reverse_iter_fold(Seq& seq, State& state, F f) + { + return result_of::reverse_iter_fold::call( + state, + seq, + f); + } + template + inline typename result_of::reverse_iter_fold< + Seq const + , State const + , F + >::type + reverse_iter_fold(Seq const& seq, State& state, F f) + { + return result_of::reverse_iter_fold::call( + state, + seq, + f); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp new file mode 100644 index 0000000000..2371e1891e --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_fold.hpp @@ -0,0 +1,59 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_FOLD_S_HPP_INCLUDED) +#define BOOST_FUSION_FOLD_S_HPP_INCLUDED + +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + template + struct segmented_fold_fun + { + explicit segmented_fold_fun(Fun const& f) + : fun(f) + {} + + Fun const& fun; + + template + struct apply + { + typedef typename result_of::fold::type type; + typedef mpl::true_ continue_type; + + static type call(Sequence& seq, State const& state, Context const&, segmented_fold_fun const& fun) + { + return fusion::fold(seq, state, fun.fun); + } + }; + }; + + // The default implementation of this lives in detail/fold.hpp + template + struct result_of_fold; + + template + struct result_of_fold + { + typedef + typename result_of::segmented_fold_until< + Sequence, + State, + segmented_fold_fun + >::type + type; + + static type call(State& state, Sequence& seq, Fun fun) + { + return fusion::segmented_fold_until(seq, state, segmented_fold_fun(fun)); + } + }; +}}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp new file mode 100644 index 0000000000..f7ffb24d94 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp @@ -0,0 +1,48 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_FOR_EACH_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_FOR_EACH_HPP_INCLUDED + +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + template + struct segmented_for_each_fun + { + explicit segmented_for_each_fun(Fun const& f) + : fun(f) + {} + + Fun const& fun; + + template + struct apply + { + typedef void_ type; + typedef mpl::true_ continue_type; + + static type call(Sequence& seq, State const&, Context const&, segmented_for_each_fun const& fun) + { + fusion::for_each(seq, fun.fun); + return void_(); + } + }; + }; + + template + inline void + for_each(Sequence& seq, F const& f, mpl::true_) // segmented implementation + { + fusion::segmented_fold_until(seq, void_(), segmented_for_each_fun(f)); + } +}}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/ext_/for_each_s.hpp b/3party/boost/boost/fusion/algorithm/iteration/ext_/for_each_s.hpp deleted file mode 100644 index 9e571d0fe1..0000000000 --- a/3party/boost/boost/fusion/algorithm/iteration/ext_/for_each_s.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - 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) -==============================================================================*/ -#if !defined(FUSION_FOR_EACH_S_05022006_1027) -#define FUSION_FOR_EACH_S_05022006_1027 - -#include -#include -#include -#include -#include - -// fwd declarations -namespace boost { namespace fusion -{ - template - void - for_each_s(Sequence& seq, F const& f); - - template - void - for_each_s(Sequence const& seq, F const& f); -}} - -namespace boost { namespace fusion { namespace detail -{ - template - struct for_each_s_bind - { - explicit for_each_s_bind(F const &f) - : f_(f) - {} - - template - void operator ()(Sequence &seq) const - { - fusion::for_each_s(seq, this->f_); - } - - template - void operator ()(Sequence const &seq) const - { - fusion::for_each_s(seq, this->f_); - } - private: - F const &f_; - }; - - template - void for_each_s(Sequence &seq, F const &f, mpl::true_) - { - fusion::for_each_s(fusion::segments(seq), for_each_s_bind(f)); - } - - template - void for_each_s(Sequence &seq, F const &f, mpl::false_) - { - fusion::for_each(seq, f); - } -}}} - -namespace boost { namespace fusion -{ - namespace result_of - { - template - struct for_each_s - { - typedef void type; - }; - } - - template - inline void - for_each_s(Sequence& seq, F const& f) - { - detail::for_each_s(seq, f, traits::is_segmented()); - } - - template - inline void - for_each_s(Sequence const& seq, F const& f) - { - detail::for_each_s(seq, f, traits::is_segmented()); - } -}} - -#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/fold.hpp index 347fb4f1cd..813bb6b377 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/fold.hpp @@ -1,15 +1,63 @@ /*============================================================================= - Copyright (c) 2001-2007 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Copyright (c) 2009-2010 Christopher Schmidt 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 BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP #define BOOST_FUSION_ALGORITHM_ITERATION_FOLD_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/fold.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2007 Dan Marsden + Copyright (c) 2009-2010 Christopher Schmidt + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + #include +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#include + #endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp new file mode 100644 index 0000000000..edb43e012e --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/fold_fwd.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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 BOOST_FUSION_ALGORITHM_ITERATION_FOLD_FWD_HPP +#define BOOST_FUSION_ALGORITHM_ITERATION_FOLD_FWD_HPP + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct fold; + } + + template + typename result_of::fold< + Seq + , State const + , F + >::type + fold(Seq& seq, State const& state, F f); + + template + typename result_of::fold< + Seq const + , State const + , F + >::type + fold(Seq const& seq, State const& state, F f); + + template + typename result_of::fold< + Seq + , State const + , F + >::type + fold(Seq& seq, State& state, F f); + + template + typename result_of::fold< + Seq const + , State const + , F + >::type + fold(Seq const& seq, State& state, F f); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp b/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp index fffb0f0096..17cde34a4b 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/for_each.hpp @@ -9,11 +9,13 @@ #define BOOST_FUSION_FOR_EACH_20070527_0943 #include +#include +#include +#include +#include -#include - -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ namespace result_of { template @@ -23,20 +25,28 @@ namespace boost { namespace fusion { }; } - struct random_access_traversal_tag; - template - inline void + inline + typename + enable_if< + traits::is_sequence + , void + >::type for_each(Sequence& seq, F const& f) { - detail::for_each(seq, f, typename traits::category_of::type()); + detail::for_each(seq, f, typename traits::is_segmented::type()); } template - inline void + inline + typename + enable_if< + traits::is_sequence + , void + >::type for_each(Sequence const& seq, F const& f) { - detail::for_each(seq, f, typename traits::category_of::type()); + detail::for_each(seq, f, typename traits::is_segmented::type()); } }} diff --git a/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp new file mode 100644 index 0000000000..b757873e6e --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/for_each_fwd.hpp @@ -0,0 +1,40 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED) +#define BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED + +#include +#include + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct for_each; + } + + template + inline + typename + enable_if< + traits::is_sequence + , void + >::type + for_each(Sequence& seq, F const& f); + + template + inline + typename + enable_if< + traits::is_sequence + , void + >::type + for_each(Sequence const& seq, F const& f); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp index 59cbfd8c69..37c7cde40e 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/iter_fold.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -8,10 +9,56 @@ #ifndef BOOST_FUSION_ALGORITHM_ITERATION_ITER_FOLD_HPP #define BOOST_FUSION_ALGORITHM_ITERATION_ITER_FOLD_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #define BOOST_FUSION_ITER_FOLD +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/iter_fold.hpp") +#endif + +/*============================================================================= + Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + #include +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #undef BOOST_FUSION_ITER_FOLD #endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp new file mode 100644 index 0000000000..96ff387d27 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/iter_fold_fwd.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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 BOOST_FUSION_ALGORITHM_ITERATION_ITER_FOLD_FWD_HPP +#define BOOST_FUSION_ALGORITHM_ITERATION_ITER_FOLD_FWD_HPP + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct iter_fold; + } + + template + typename result_of::iter_fold< + Seq + , State const + , F + >::type + iter_fold(Seq& seq, State const& state, F f); + + template + typename result_of::iter_fold< + Seq const + , State const + , F + >::type + iter_fold(Seq const& seq, State const& state, F f); + + template + typename result_of::iter_fold< + Seq + , State const + , F + >::type + iter_fold(Seq& seq, State& state, F f); + + template + typename result_of::iter_fold< + Seq const + , State const + , F + >::type + iter_fold(Seq const& seq, State& state, F f); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp index bb09db5d7d..c8bdef51e1 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold.hpp @@ -1,5 +1,6 @@ /*============================================================================= Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -8,10 +9,56 @@ #ifndef BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_FOLD_HPP #define BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_FOLD_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #define BOOST_FUSION_REVERSE_FOLD +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/reverse_fold.hpp") +#endif + +/*============================================================================= + Copyright (c) 2009-2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + #include +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #undef BOOST_FUSION_REVERSE_FOLD #endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp new file mode 100644 index 0000000000..40546b538a --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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 BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_FOLD_FWD_HPP +#define BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_FOLD_FWD_HPP + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct reverse_fold; + } + + template + typename result_of::reverse_fold< + Seq + , State const + , F + >::type + reverse_fold(Seq& seq, State const& state, F f); + + template + typename result_of::reverse_fold< + Seq const + , State const + , F + >::type + reverse_fold(Seq const& seq, State const& state, F f); + + template + typename result_of::reverse_fold< + Seq + , State const + , F + >::type + reverse_fold(Seq& seq, State& state, F f); + + template + typename result_of::reverse_fold< + Seq const + , State const + , F + >::type + reverse_fold(Seq const& seq, State& state, F f); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp index 80079f4864..4c3d551f3c 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold.hpp @@ -1,18 +1,64 @@ /*============================================================================= Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman 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 BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_ITER_FOLD_HPP #define BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_ITER_FOLD_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #define BOOST_FUSION_REVERSE_FOLD #define BOOST_FUSION_ITER_FOLD +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/reverse_iter_fold.hpp") +#endif + +/*============================================================================= + Copyright (c) 2010 Christopher Schmidt + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + #include +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #undef BOOST_FUSION_REVERSE_FOLD #undef BOOST_FUSION_ITER_FOLD diff --git a/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp new file mode 100644 index 0000000000..a28b4eec76 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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 BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_ITER_FOLD_FWD_HPP +#define BOOST_FUSION_ALGORITHM_ITERATION_REVERSE_ITER_FOLD_FWD_HPP + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct reverse_iter_fold; + } + + template + typename result_of::reverse_iter_fold< + Seq + , State const + , F + >::type + reverse_iter_fold(Seq& seq, State const& state, F f); + + template + typename result_of::reverse_iter_fold< + Seq const + , State const + , F + >::type + reverse_iter_fold(Seq const& seq, State const& state, F f); + + template + typename result_of::reverse_iter_fold< + Seq + , State const + , F + >::type + reverse_iter_fold(Seq& seq, State& state, F f); + + template + typename result_of::reverse_iter_fold< + Seq const + , State const + , F + >::type + reverse_iter_fold(Seq const& seq, State& state, F f); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/query.hpp b/3party/boost/boost/fusion/algorithm/query.hpp index 488a62a842..b4f54e5f50 100644 --- a/3party/boost/boost/fusion/algorithm/query.hpp +++ b/3party/boost/boost/fusion/algorithm/query.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/query/all.hpp b/3party/boost/boost/fusion/algorithm/query/all.hpp index 9d78867c97..c6a47d8e25 100644 --- a/3party/boost/boost/fusion/algorithm/query/all.hpp +++ b/3party/boost/boost/fusion/algorithm/query/all.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/algorithm/query/any.hpp b/3party/boost/boost/fusion/algorithm/query/any.hpp index be4ef09964..8b1fca0696 100644 --- a/3party/boost/boost/fusion/algorithm/query/any.hpp +++ b/3party/boost/boost/fusion/algorithm/query/any.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Copyright (c) 2007 Dan Marsden diff --git a/3party/boost/boost/fusion/algorithm/query/count.hpp b/3party/boost/boost/fusion/algorithm/query/count.hpp index 27e3370e80..0488716327 100644 --- a/3party/boost/boost/fusion/algorithm/query/count.hpp +++ b/3party/boost/boost/fusion/algorithm/query/count.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -10,6 +10,8 @@ #include #include +#include +#include namespace boost { namespace fusion { @@ -23,7 +25,12 @@ namespace boost { namespace fusion } template - inline int + inline + typename + enable_if< + traits::is_sequence + , int + >::type count(Sequence const& seq, T const& x) { detail::count_compare f(x); diff --git a/3party/boost/boost/fusion/algorithm/query/count_if.hpp b/3party/boost/boost/fusion/algorithm/query/count_if.hpp index a080b3b24b..792979733a 100644 --- a/3party/boost/boost/fusion/algorithm/query/count_if.hpp +++ b/3party/boost/boost/fusion/algorithm/query/count_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -10,6 +10,8 @@ #include #include +#include +#include namespace boost { namespace fusion { @@ -23,7 +25,12 @@ namespace boost { namespace fusion } template - inline int + inline + typename + enable_if< + traits::is_sequence + , int + >::type count_if(Sequence const& seq, F f) { return detail::count_if( diff --git a/3party/boost/boost/fusion/algorithm/query/detail/all.hpp b/3party/boost/boost/fusion/algorithm/query/detail/all.hpp index c9284e8680..1465e20683 100644 --- a/3party/boost/boost/fusion/algorithm/query/detail/all.hpp +++ b/3party/boost/boost/fusion/algorithm/query/detail/all.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/algorithm/query/detail/any.hpp b/3party/boost/boost/fusion/algorithm/query/detail/any.hpp index 31bbaa5824..42409d5a13 100644 --- a/3party/boost/boost/fusion/algorithm/query/detail/any.hpp +++ b/3party/boost/boost/fusion/algorithm/query/detail/any.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Copyright (c) 2007 Dan Marsden diff --git a/3party/boost/boost/fusion/algorithm/query/detail/count.hpp b/3party/boost/boost/fusion/algorithm/query/detail/count.hpp index 6c4254c30e..ffc6086a0c 100644 --- a/3party/boost/boost/fusion/algorithm/query/detail/count.hpp +++ b/3party/boost/boost/fusion/algorithm/query/detail/count.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp b/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp index d270b5914c..7110071ddf 100644 --- a/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp +++ b/3party/boost/boost/fusion/algorithm/query/detail/count_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp b/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp index 5d2a74196f..f7bae4533c 100644 --- a/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp +++ b/3party/boost/boost/fusion/algorithm/query/detail/find_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Copyright (c) 2009 Christopher Schmidt @@ -9,19 +9,18 @@ #if !defined(FUSION_FIND_IF_05052005_1107) #define FUSION_FIND_IF_05052005_1107 -#include -#include -#include #include +#include #include +#include +#include +#include +#include #include #include #include -#include -#include +#include #include -#include -#include namespace boost { namespace fusion { struct random_access_traversal_tag; @@ -222,10 +221,31 @@ namespace detail template static type - call(Iterator const& iter) + iter_call(Iterator const& iter) { return choose_call(iter, typename traits::category_of::type()); } + + template + static type + call(Sequence& seq) + { + return iter_call(fusion::begin(seq)); + } + }; + + template + struct result_of_find_if + { + typedef + static_find_if< + typename result_of::begin::type + , typename result_of::end::type + , Pred + > + filter; + + typedef typename filter::type type; }; }}} diff --git a/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp new file mode 100644 index 0000000000..ead57834c6 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find.hpp @@ -0,0 +1,90 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_FIND_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_FIND_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + template + struct segmented_find_fun + { + template + struct apply + { + typedef + typename result_of::find::type + iterator_type; + + typedef + typename result_of::equal_to< + iterator_type + , typename result_of::end::type + >::type + continue_type; + + typedef + typename mpl::eval_if< + continue_type + , mpl::identity + , result_of::make_segmented_iterator< + iterator_type + , Context + > + >::type + type; + + static type call(Sequence& seq, State const&state, Context const& context, segmented_find_fun) + { + return call_impl(seq, state, context, continue_type()); + } + + static type call_impl(Sequence&, State const&state, Context const&, mpl::true_) + { + return state; + } + + static type call_impl(Sequence& seq, State const&, Context const& context, mpl::false_) + { + return fusion::make_segmented_iterator(fusion::find(seq), context); + } + }; + }; + + template + struct result_of_segmented_find + { + struct filter + { + typedef + typename result_of::segmented_fold_until< + Sequence + , typename result_of::end::type + , segmented_find_fun + >::type + type; + + static type call(Sequence& seq) + { + return fusion::segmented_fold_until( + seq + , fusion::end(seq) + , detail::segmented_find_fun()); + } + }; + + typedef typename filter::type type; + }; +}}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp new file mode 100644 index 0000000000..745edd2f7d --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/query/detail/segmented_find_if.hpp @@ -0,0 +1,90 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_FIND_IF_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_FIND_IF_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + template + struct segmented_find_if_fun + { + template + struct apply + { + typedef + typename result_of::find_if::type + iterator_type; + + typedef + typename result_of::equal_to< + iterator_type + , typename result_of::end::type + >::type + continue_type; + + typedef + typename mpl::eval_if< + continue_type + , mpl::identity + , result_of::make_segmented_iterator< + iterator_type + , Context + > + >::type + type; + + static type call(Sequence& seq, State const&state, Context const& context, segmented_find_if_fun) + { + return call_impl(seq, state, context, continue_type()); + } + + static type call_impl(Sequence&, State const&state, Context const&, mpl::true_) + { + return state; + } + + static type call_impl(Sequence& seq, State const&, Context const& context, mpl::false_) + { + return fusion::make_segmented_iterator(fusion::find_if(seq), context); + } + }; + }; + + template + struct result_of_segmented_find_if + { + struct filter + { + typedef + typename result_of::segmented_fold_until< + Sequence + , typename result_of::end::type + , segmented_find_if_fun + >::type + type; + + static type call(Sequence& seq) + { + return fusion::segmented_fold_until( + seq + , fusion::end(seq) + , segmented_find_if_fun()); + } + }; + + typedef typename filter::type type; + }; +}}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/query/ext_/find_if_s.hpp b/3party/boost/boost/fusion/algorithm/query/ext_/find_if_s.hpp deleted file mode 100644 index 0b1852a68d..0000000000 --- a/3party/boost/boost/fusion/algorithm/query/ext_/find_if_s.hpp +++ /dev/null @@ -1,222 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - 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) -==============================================================================*/ -#if !defined(FIND_IF_S_05152006_1027) -#define FIND_IF_S_05152006_1027 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// fwd declarations -namespace boost { namespace fusion -{ - namespace detail - { - template::value> - struct static_find_if_s_recurse; - } - - namespace result_of - { - template - struct find_if_s; - } -}} - -namespace boost { namespace fusion { namespace detail -{ - - template::value> - struct is_found - : mpl::not_::type> > - {}; - - template - struct is_found - : mpl::not_ > - {}; - - template< - typename SegmentedRange - , typename Where - , typename Sequence = typename remove_reference< - typename result_of::deref< - typename SegmentedRange::iterator_type - >::type - >::type - , bool IsSegmented = traits::is_segmented::value - > - struct as_segmented_cons - { - typedef cons< - SegmentedRange - , cons > - > type; - - static type call(SegmentedRange const &range, Where const &where) - { - return fusion::make_cons( - range - , fusion::make_cons( - segmented_range(*fusion::begin(range), where) - ) - ); - } - }; - - template< - typename SegmentedRange - , typename Where - , typename Sequence - > - struct as_segmented_cons - { - typedef cons type; - - static type call(SegmentedRange const &range, Where const &where) - { - return fusion::make_cons(range, where); - } - }; - - template< - typename SegmentedRange - , typename Pred - , bool IsEmpty = is_empty::value - > - struct static_find_if_s_seg - { - typedef typename SegmentedRange::iterator_type first; - typedef typename result_of::deref::type segment_ref; - typedef typename remove_reference::type segment; - typedef static_find_if_s_recurse where; - typedef range_next next; - typedef is_found is_found; - typedef as_segmented_cons found; - typedef static_find_if_s_seg not_found; - typedef typename mpl::eval_if::type type; - - static type call(SegmentedRange const &range) - { - return call_(range, is_found()); - } - - private: - static type call_(SegmentedRange const &range, mpl::true_) - { - return found::call(range, where::call(*range.where_)); - } - - static type call_(SegmentedRange const &range, mpl::false_) - { - return not_found::call(next::call(range)); - } - }; - - template< - typename SegmentedRange - , typename Pred - > - struct static_find_if_s_seg - { - typedef nil type; - - static type call(SegmentedRange const &) - { - return nil(); - } - }; - - template - struct static_find_if_s_recurse - { - typedef typename as_segmented_range::type range; - typedef static_find_if_s_seg find_if; - typedef typename find_if::type type; - - static type call(Sequence &seq) - { - return find_if::call(range(fusion::segments(seq))); - } - }; - - template - struct static_find_if_s_recurse - { - typedef typename result_of::find_if::type type; - - static type call(Sequence &seq) - { - return fusion::find_if(seq); - } - }; - - template::value> - struct static_find_if_s - : static_find_if_s_recurse - {}; - - template - struct static_find_if_s - { - typedef typename as_segmented_range::type range; - typedef static_find_if_s_recurse find_if; - typedef typename find_if::type found; - - typedef segmented_iterator::type> type; - - static type call(Sequence &seq) - { - return type(reverse_cons::call(find_if::call(seq))); - } - }; -}}} - -namespace boost { namespace fusion -{ - namespace result_of - { - template - struct find_if_s - { - typedef typename - detail::static_find_if_s< - Sequence - , Pred - >::type - type; - }; - } - - template - typename lazy_disable_if< - is_const - , result_of::find_if_s - >::type - find_if_s(Sequence& seq) - { - return detail::static_find_if_s::call(seq); - } - - template - typename result_of::find_if_s::type - find_if_s(Sequence const& seq) - { - return detail::static_find_if_s::call(seq); - } -}} - -#endif diff --git a/3party/boost/boost/fusion/algorithm/query/find.hpp b/3party/boost/boost/fusion/algorithm/query/find.hpp index 6beb900587..16def0899a 100644 --- a/3party/boost/boost/fusion/algorithm/query/find.hpp +++ b/3party/boost/boost/fusion/algorithm/query/find.hpp @@ -1,5 +1,6 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) @@ -7,13 +8,15 @@ #if !defined(FUSION_FIND_05052005_1107) #define FUSION_FIND_05052005_1107 +#include #include -#include -#include +#include #include #include #include +#include #include +#include #include #include #include @@ -22,17 +25,14 @@ namespace boost { namespace fusion { namespace result_of { - template < - typename Sequence - , typename T - > + template struct find - { - typedef - detail::static_find_if< - typename result_of::begin::type - , typename result_of::end::type - , is_same< + : mpl::if_< + traits::is_segmented + , detail::result_of_segmented_find + , detail::result_of_find_if< + Sequence, + is_same< typename mpl::if_< traits::is_associative , key_of @@ -41,10 +41,8 @@ namespace boost { namespace fusion , T > > - filter; - - typedef typename filter::type type; - }; + >::type + {}; } template @@ -56,7 +54,7 @@ namespace boost { namespace fusion find(Sequence& seq) { typedef typename result_of::find::filter filter; - return filter::call(fusion::begin(seq)); + return filter::call(seq); } template @@ -64,9 +62,8 @@ namespace boost { namespace fusion find(Sequence const& seq) { typedef typename result_of::find::filter filter; - return filter::call(fusion::begin(seq)); + return filter::call(seq); } }} #endif - diff --git a/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp b/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp new file mode 100644 index 0000000000..96d989a484 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/query/find_fwd.hpp @@ -0,0 +1,34 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_FIND_FWD_HPP_INCLUDED) +#define BOOST_FUSION_FIND_FWD_HPP_INCLUDED + +#include +#include + +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct find; + } + + template + inline typename + lazy_disable_if< + is_const + , result_of::find + >::type const + find(Sequence& seq); + + template + inline typename result_of::find::type const + find(Sequence const& seq); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/query/find_if.hpp b/3party/boost/boost/fusion/algorithm/query/find_if.hpp index 3950958c38..9dbd46b58c 100644 --- a/3party/boost/boost/fusion/algorithm/query/find_if.hpp +++ b/3party/boost/boost/fusion/algorithm/query/find_if.hpp @@ -1,5 +1,6 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) @@ -7,15 +8,17 @@ #if !defined(FUSION_FIND_IF_05052005_1108) #define FUSION_FIND_IF_05052005_1108 +#include #include -#include -#include +#include #include -#include -#include -#include +#include #include #include +#include +#include +#include +#include namespace boost { namespace fusion { @@ -23,20 +26,18 @@ namespace boost { namespace fusion { template struct find_if - { - typedef - detail::static_find_if< - typename result_of::begin::type - , typename result_of::end::type - , mpl::bind1< + : mpl::if_< + traits::is_segmented + , detail::result_of_segmented_find_if + , detail::result_of_find_if< + Sequence, + mpl::bind1< typename mpl::lambda::type - , mpl::bind1,mpl::_1> + , mpl::bind1, mpl::_1> > > - filter; - - typedef typename filter::type type; - }; + >::type + {}; } template @@ -48,7 +49,7 @@ namespace boost { namespace fusion find_if(Sequence& seq) { typedef typename result_of::find_if::filter filter; - return filter::call(fusion::begin(seq)); + return filter::call(seq); } template @@ -56,9 +57,8 @@ namespace boost { namespace fusion find_if(Sequence const& seq) { typedef typename result_of::find_if::filter filter; - return filter::call(fusion::begin(seq)); + return filter::call(seq); } }} #endif - diff --git a/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp b/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp new file mode 100644 index 0000000000..adb8f2de60 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/query/find_if_fwd.hpp @@ -0,0 +1,35 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_FIND_IF_FWD_HPP_INCLUDED) +#define BOOST_FUSION_FIND_IF_FWD_HPP_INCLUDED + +#include +#include + +// Forward declaration of find_if algorithm +namespace boost { namespace fusion +{ + namespace result_of + { + template + struct find_if; + } + + template + typename + lazy_disable_if< + is_const + , result_of::find_if + >::type + find_if(Sequence& seq); + + template + typename result_of::find_if::type const + find_if(Sequence const& seq); +}} + +#endif diff --git a/3party/boost/boost/fusion/algorithm/query/none.hpp b/3party/boost/boost/fusion/algorithm/query/none.hpp index f31f4c9cf7..4eaac17fa8 100644 --- a/3party/boost/boost/fusion/algorithm/query/none.hpp +++ b/3party/boost/boost/fusion/algorithm/query/none.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/algorithm/transformation.hpp b/3party/boost/boost/fusion/algorithm/transformation.hpp index 9221cd45c6..c2e152c20a 100644 --- a/3party/boost/boost/fusion/algorithm/transformation.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/clear.hpp b/3party/boost/boost/fusion/algorithm/transformation/clear.hpp index 992a76ee5e..946e45c842 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/clear.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/clear.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp new file mode 100644 index 0000000000..4a596229d6 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_ZIP_SEQUENCES <= 10 +#include +#elif FUSION_MAX_ZIP_SEQUENCES <= 20 +#include +#elif FUSION_MAX_ZIP_SEQUENCES <= 30 +#include +#elif FUSION_MAX_ZIP_SEQUENCES <= 40 +#include +#elif FUSION_MAX_ZIP_SEQUENCES <= 50 +#include +#else +#error "FUSION_MAX_ZIP_SEQUENCES out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp new file mode 100644 index 0000000000..706b667d99 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp @@ -0,0 +1,189 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2006 Dan Marsden + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template + struct zip; + } + namespace result_of + { + template< typename T0 , typename T1 > + struct zip< T0 , T1 > + { + typedef mpl::vector< T0 , T1 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1) + { + fusion::vector seqs( + t0 , t1); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 > + struct zip< T0 , T1 , T2 > + { + typedef mpl::vector< T0 , T1 , T2 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2) + { + fusion::vector seqs( + t0 , t1 , t2); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 > + struct zip< T0 , T1 , T2 , T3 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3) + { + fusion::vector seqs( + t0 , t1 , t2 , t3); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > + struct zip< T0 , T1 , T2 , T3 , T4 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9); + return typename result_of::zip::type( + seqs); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp new file mode 100644 index 0000000000..286a01200a --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp @@ -0,0 +1,379 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2006 Dan Marsden + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template + struct zip; + } + namespace result_of + { + template< typename T0 , typename T1 > + struct zip< T0 , T1 > + { + typedef mpl::vector< T0 , T1 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1) + { + fusion::vector seqs( + t0 , t1); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 > + struct zip< T0 , T1 , T2 > + { + typedef mpl::vector< T0 , T1 , T2 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2) + { + fusion::vector seqs( + t0 , t1 , t2); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 > + struct zip< T0 , T1 , T2 , T3 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3) + { + fusion::vector seqs( + t0 , t1 , t2 , t3); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > + struct zip< T0 , T1 , T2 , T3 , T4 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19); + return typename result_of::zip::type( + seqs); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp new file mode 100644 index 0000000000..13cc0a735c --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp @@ -0,0 +1,569 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2006 Dan Marsden + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template + struct zip; + } + namespace result_of + { + template< typename T0 , typename T1 > + struct zip< T0 , T1 > + { + typedef mpl::vector< T0 , T1 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1) + { + fusion::vector seqs( + t0 , t1); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 > + struct zip< T0 , T1 , T2 > + { + typedef mpl::vector< T0 , T1 , T2 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2) + { + fusion::vector seqs( + t0 , t1 , t2); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 > + struct zip< T0 , T1 , T2 , T3 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3) + { + fusion::vector seqs( + t0 , t1 , t2 , t3); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > + struct zip< T0 , T1 , T2 , T3 , T4 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29); + return typename result_of::zip::type( + seqs); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp new file mode 100644 index 0000000000..110ac89602 --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp @@ -0,0 +1,759 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2006 Dan Marsden + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template + struct zip; + } + namespace result_of + { + template< typename T0 , typename T1 > + struct zip< T0 , T1 > + { + typedef mpl::vector< T0 , T1 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1) + { + fusion::vector seqs( + t0 , t1); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 > + struct zip< T0 , T1 , T2 > + { + typedef mpl::vector< T0 , T1 , T2 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2) + { + fusion::vector seqs( + t0 , t1 , t2); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 > + struct zip< T0 , T1 , T2 , T3 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3) + { + fusion::vector seqs( + t0 , t1 , t2 , t3); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > + struct zip< T0 , T1 , T2 , T3 , T4 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39); + return typename result_of::zip::type( + seqs); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp new file mode 100644 index 0000000000..438f991e1b --- /dev/null +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp @@ -0,0 +1,949 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2006 Dan Marsden + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template + struct zip; + } + namespace result_of + { + template< typename T0 , typename T1 > + struct zip< T0 , T1 > + { + typedef mpl::vector< T0 , T1 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1) + { + fusion::vector seqs( + t0 , t1); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 > + struct zip< T0 , T1 , T2 > + { + typedef mpl::vector< T0 , T1 , T2 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2) + { + fusion::vector seqs( + t0 , t1 , t2); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 > + struct zip< T0 , T1 , T2 , T3 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3) + { + fusion::vector seqs( + t0 , t1 , t2 , t3); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 > + struct zip< T0 , T1 , T2 , T3 , T4 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47 , T48 const& t48) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48); + return typename result_of::zip::type( + seqs); + } + namespace result_of + { + template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49 > + struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 > + { + typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 > sequences; + typedef typename mpl::transform >::type ref_params; + typedef zip_view::type> type; + }; + } + template + inline typename result_of::zip::type + zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39 , T40 const& t40 , T41 const& t41 , T42 const& t42 , T43 const& t43 , T44 const& t44 , T45 const& t45 , T46 const& t46 , T47 const& t47 , T48 const& t48 , T49 const& t49) + { + fusion::vector seqs( + t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49); + return typename result_of::zip::type( + seqs); + } +}} diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp index 8005aad04f..18dab8cd65 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/replace.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp index fa6068aa27..d45ca39219 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/detail/replace_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/erase.hpp b/3party/boost/boost/fusion/algorithm/transformation/erase.hpp index d0405c307d..6ad737fd18 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/erase.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/erase.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -16,6 +16,9 @@ #include #include #include +#include +#include +#include namespace boost { namespace fusion { @@ -53,18 +56,38 @@ namespace boost { namespace fusion } }; + struct use_default; + + template + struct fusion_default_help + : mpl::if_< + is_same + , Default + , T + > + { + }; + template < typename Sequence , typename First - , typename Last = typename compute_erase_last::type> + , typename Last = use_default> struct erase { typedef typename result_of::begin::type seq_first_type; typedef typename result_of::end::type seq_last_type; BOOST_STATIC_ASSERT((!result_of::equal_to::value)); - typedef typename convert_iterator::type first_type; - typedef typename convert_iterator::type last_type; + typedef First FirstType; + typedef typename + fusion_default_help< + Last + , typename compute_erase_last::type + >::type + LastType; + + typedef typename convert_iterator::type first_type; + typedef typename convert_iterator::type last_type; typedef iterator_range left_type; typedef iterator_range right_type; typedef joint_view type; @@ -72,7 +95,11 @@ namespace boost { namespace fusion } template - typename result_of::erase::type + typename + lazy_enable_if< + traits::is_sequence + , typename result_of::erase + >::type erase(Sequence const& seq, First const& first) { typedef result_of::erase result_of; diff --git a/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp b/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp index 03128695ea..383f4f800d 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/erase_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/filter.hpp b/3party/boost/boost/fusion/algorithm/transformation/filter.hpp index 52bf6af3fc..fa347c7b58 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/filter.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/filter.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp index d13113b1e5..d989d30858 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/filter_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/insert.hpp b/3party/boost/boost/fusion/algorithm/transformation/insert.hpp index 1702bc19a2..2052fc01aa 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/insert.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/insert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -16,6 +16,8 @@ #include #include #include +#include +#include namespace boost { namespace fusion { @@ -38,8 +40,12 @@ namespace boost { namespace fusion } template - inline typename result_of::insert< - Sequence const, Position, T>::type + inline + typename + lazy_enable_if< + traits::is_sequence + , result_of::insert + >::type insert(Sequence const& seq, Position const& pos, T const& x) { typedef result_of::insert< diff --git a/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp b/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp index 1915c413e9..f70a78ecbc 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/insert_range.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/join.hpp b/3party/boost/boost/fusion/algorithm/transformation/join.hpp index 4ed78b5fbd..f0cf2e4ebd 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/join.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/join.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp b/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp index 6eb743fd7f..6059c555e8 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/pop_back.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_POP_BACK_09172005_1038) @@ -10,22 +10,138 @@ #include #include #include -#include +#include +#include +#include +#include +#include +#include namespace boost { namespace fusion { + template + struct pop_back_iterator + : iterator_adapter< + pop_back_iterator + , Iterator_> + { + typedef iterator_adapter< + pop_back_iterator + , Iterator_> + base_type; + + static bool const is_last = IsLast; + + pop_back_iterator(Iterator_ const& iterator_base) + : base_type(iterator_base) {} + + template + struct make + { + typedef pop_back_iterator type; + + static type + call(BaseIterator const& i) + { + return type(i); + } + }; + + template + struct equal_to_helper + : mpl::identity + {}; + + template + struct equal_to_helper + : result_of::next< + typename I::iterator_base_type> + {}; + + template + struct equal_to + : result_of::equal_to< + typename equal_to_helper::type + , typename equal_to_helper::type + > + {}; + + template + struct distance + : mpl::minus< + typename result_of::distance< + typename First::iterator_base_type + , typename Last::iterator_base_type + >::type + , mpl::int_<(Last::is_last?1:0)> + >::type + {}; + + + template + struct prior_impl + { + typedef typename Iterator::iterator_base_type base_type; + + typedef typename + result_of::prior::type + base_prior; + + typedef pop_back_iterator type; + + static type + call(Iterator const& i) + { + return type(fusion::prior(i.iterator_base)); + } + }; + + template + struct prior_impl + { + // If this is the last iterator, we'll have to double back + typedef typename Iterator::iterator_base_type base_type; + + typedef typename + result_of::prior< + typename result_of::prior::type + >::type + base_prior; + + typedef pop_back_iterator type; + + static type + call(Iterator const& i) + { + return type(fusion::prior( + fusion::prior(i.iterator_base))); + } + }; + + template + struct prior : prior_impl + {}; + }; + namespace result_of { template struct pop_back { - typedef - iterator_range< - typename begin::type - , typename prior< - typename end::type - >::type - > + BOOST_MPL_ASSERT_NOT((result_of::empty)); + + typedef pop_back_iterator< + typename begin::type, false> + begin_type; + + typedef pop_back_iterator< + typename end::type, true> + end_type; + + typedef + iterator_range type; }; } @@ -34,8 +150,15 @@ namespace boost { namespace fusion inline typename result_of::pop_back::type pop_back(Sequence const& seq) { - typedef typename result_of::pop_back::type result; - return result(fusion::begin(seq), fusion::prior(fusion::end(seq))); + typedef result_of::pop_back comp; + typedef typename comp::begin_type begin_type; + typedef typename comp::end_type end_type; + typedef typename comp::type result; + + return result( + begin_type(fusion::begin(seq)) + , end_type(fusion::end(seq)) + ); } }} diff --git a/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp b/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp index aed524d3f3..75e392c26e 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/pop_front.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp b/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp index 4fadc79c5a..9afe538ab2 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/push_back.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -10,6 +10,8 @@ #include #include #include +#include +#include namespace boost { namespace fusion { @@ -24,7 +26,12 @@ namespace boost { namespace fusion } template - inline typename result_of::push_back::type + inline + typename + lazy_enable_if< + traits::is_sequence + , result_of::push_back + >::type push_back(Sequence const& seq, T const& x) { typedef typename result_of::push_back push_back; diff --git a/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp b/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp index 10f9fc104e..abe7faadea 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/push_front.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -10,6 +10,8 @@ #include #include #include +#include +#include namespace boost { namespace fusion { @@ -24,7 +26,12 @@ namespace boost { namespace fusion } template - inline typename result_of::push_front::type + inline + typename + lazy_enable_if< + traits::is_sequence + , result_of::push_front + >::type push_front(Sequence const& seq, T const& x) { typedef typename result_of::push_front push_front; diff --git a/3party/boost/boost/fusion/algorithm/transformation/remove.hpp b/3party/boost/boost/fusion/algorithm/transformation/remove.hpp index 01718d323b..ce4b0febdb 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/remove.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/remove.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp index ab13694d1c..e7b01b45c1 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/remove_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/replace.hpp b/3party/boost/boost/fusion/algorithm/transformation/replace.hpp index 780f1a4584..a92e6e3738 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/replace.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/replace.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -9,6 +9,8 @@ #include #include +#include +#include namespace boost { namespace fusion { @@ -22,7 +24,12 @@ namespace boost { namespace fusion } template - inline typename result_of::replace::type + inline + typename + enable_if< + traits::is_sequence + , typename result_of::replace::type + >::type replace(Sequence const& seq, T const& old_value, T const& new_value) { typedef typename result_of::replace::type result; diff --git a/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp b/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp index 90db568360..39b9009a79 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/replace_if.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -24,7 +25,12 @@ namespace boost { namespace fusion } template - inline typename result_of::replace_if::type + inline + typename + enable_if< + traits::is_sequence + , typename result_of::replace_if::type + >::type replace_if(Sequence const& seq, F pred, T const& new_value) { typedef typename result_of::replace_if::type result; diff --git a/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp b/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp index b95461c89b..923b90fc6a 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/reverse.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -8,6 +8,8 @@ #define FUSION_REVERSE_07212005_1230 #include +#include +#include namespace boost { namespace fusion { @@ -21,7 +23,12 @@ namespace boost { namespace fusion } template - inline reverse_view + inline + typename + enable_if< + traits::is_sequence + , reverse_view + >::type reverse(Sequence const& view) { return reverse_view(view); diff --git a/3party/boost/boost/fusion/algorithm/transformation/transform.hpp b/3party/boost/boost/fusion/algorithm/transformation/transform.hpp index 681319bc95..85e85611a1 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/transform.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/transform.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/algorithm/transformation/zip.hpp b/3party/boost/boost/fusion/algorithm/transformation/zip.hpp index ff6e6b1afc..610c60467d 100644 --- a/3party/boost/boost/fusion/algorithm/transformation/zip.hpp +++ b/3party/boost/boost/fusion/algorithm/transformation/zip.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -28,10 +29,33 @@ #define FUSION_MAX_ZIP_SEQUENCES 10 #endif -namespace boost { namespace fusion { +#define FUSION_MAX_ZIP_SEQUENCES_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_ZIP_SEQUENCES)) +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/zip" FUSION_MAX_ZIP_SEQUENCES_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2006 Dan Marsden + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ struct void_; - + namespace result_of { template @@ -45,6 +69,12 @@ namespace boost { namespace fusion { }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else diff --git a/3party/boost/boost/fusion/container.hpp b/3party/boost/boost/fusion/container.hpp index 1398197dcf..8bd65074e6 100644 --- a/3party/boost/boost/fusion/container.hpp +++ b/3party/boost/boost/fusion/container.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/deque.hpp b/3party/boost/boost/fusion/container/deque.hpp index bb29ce2f2d..0ee058a382 100644 --- a/3party/boost/boost/fusion/container/deque.hpp +++ b/3party/boost/boost/fusion/container/deque.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp b/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp index 28d5cecaef..738e05bbdb 100644 --- a/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp +++ b/3party/boost/boost/fusion/container/deque/back_extended_deque.hpp @@ -1,36 +1,47 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_BACK_EXTENDED_DEQUE_26112006_2209) #define BOOST_FUSION_BACK_EXTENDED_DEQUE_26112006_2209 -#include #include -#include + #include #include +#include -#include -#include - -namespace boost { namespace fusion { - template +namespace boost { namespace fusion +{ + template struct back_extended_deque - : detail::keyed_element, - sequence_base > + : detail::keyed_element + , sequence_base > { typedef detail::keyed_element base; typedef typename Deque::next_down next_down; - typedef mpl::int_ >::value> next_up; - typedef mpl::plus::type, mpl::int_<1> > size; + typedef mpl::int_<(Deque::next_up::value + 1)> next_up; + typedef mpl::int_<(result_of::size::value + 1)> size; - back_extended_deque(Deque const& deque, typename add_reference::type>::type t) - : base(t, deque) + template + back_extended_deque(Deque const& deque, Arg const& val) + : base(val, deque) {} + +#if defined(BOOST_NO_RVALUE_REFERENCES) + template + back_extended_deque(Deque const& deque, Arg& val) + : base(val, deque) + {} +#else + template + back_extended_deque(Deque const& deque, Arg&& val) + : base(std::forward(val), deque) + {} +#endif }; }} diff --git a/3party/boost/boost/fusion/container/deque/convert.hpp b/3party/boost/boost/fusion/container/deque/convert.hpp index 0f3a75e2a7..1910cb84fc 100644 --- a/3party/boost/boost/fusion/container/deque/convert.hpp +++ b/3party/boost/boost/fusion/container/deque/convert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -21,7 +21,9 @@ namespace boost { namespace fusion template struct as_deque { - typedef typename detail::as_deque::value> gen; + typedef typename + detail::as_deque::value> + gen; typedef typename gen:: template apply::type>::type type; diff --git a/3party/boost/boost/fusion/container/deque/deque.hpp b/3party/boost/boost/fusion/container/deque/deque.hpp index c26a226cf4..215981e422 100644 --- a/3party/boost/boost/fusion/container/deque/deque.hpp +++ b/3party/boost/boost/fusion/container/deque/deque.hpp @@ -1,27 +1,34 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_26112006_1649) #define BOOST_FUSION_DEQUE_26112006_1649 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +/////////////////////////////////////////////////////////////////////////////// +// With no decltype and variadics, we will use the C++03 version +/////////////////////////////////////////////////////////////////////////////// +#if (defined(BOOST_NO_DECLTYPE) \ + || defined(BOOST_NO_VARIADIC_TEMPLATES) \ + || defined(BOOST_NO_RVALUE_REFERENCES)) +# include +#else +# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE) +# define BOOST_FUSION_HAS_CPP11_DEQUE +# endif + +/////////////////////////////////////////////////////////////////////////////// +// C++11 interface +/////////////////////////////////////////////////////////////////////////////// +#include +#include +#include +#include #include #include #include @@ -29,67 +36,67 @@ #include #include #include -#include -#include -#include +#include #include +#include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct deque_tag; - template - struct deque - : - detail::deque_keyed_values::type, - sequence_base > + template + struct deque : detail::nil_keyed_element + { + }; + + template + struct deque + : detail::deque_keyed_values::type + , sequence_base> { typedef deque_tag fusion_tag; typedef bidirectional_traversal_tag category; - typedef typename detail::deque_keyed_values::type base; - typedef typename detail::deque_initial_size::type size; + typedef typename detail::deque_keyed_values::type base; + typedef mpl::int_<(sizeof ...(Tail) + 1)> size; typedef mpl::int_ next_up; - typedef mpl::int_< - mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::int_::type::value> next_down; typedef mpl::false_ is_view; -#include - deque() - {} + {} - explicit deque(typename add_reference::type>::type t0) - : base(t0, detail::nil_keyed_element()) - {} + template + deque(deque const& seq) + : base(seq) + {} - template - deque(deque const& seq) - : base(seq) - {} + explicit deque(typename detail::call_param::type head + , typename detail::call_param::type... tail) + : base(detail::deque_keyed_values::call(head, tail...)) + {} - template - deque(Sequence const& seq, typename disable_if >::type* /*dummy*/ = 0) - : base(base::from_iterator(fusion::begin(seq))) - {} + template + explicit deque(Sequence const& seq + , typename disable_if >::type* /*dummy*/ = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} - template - deque& - operator=(deque const& rhs) + template + deque& operator=(deque const& rhs) { base::operator=(rhs); return *this; } template - deque& - operator=(T const& rhs) + deque& operator=(T const& rhs) { base::operator=(rhs); return *this; } - }; }} #endif +#endif diff --git a/3party/boost/boost/fusion/container/deque/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/deque_fwd.hpp index 415bb2f2ee..19ca8f8f19 100644 --- a/3party/boost/boost/fusion/container/deque/deque_fwd.hpp +++ b/3party/boost/boost/fusion/container/deque/deque_fwd.hpp @@ -1,24 +1,35 @@ /*============================================================================= - Copyright (c) 2005-2007 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2007 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_DEQUE_FORWARD_02092007_0749) #define FUSION_DEQUE_FORWARD_02092007_0749 -#include -#include +#include +/////////////////////////////////////////////////////////////////////////////// +// With no decltype and variadics, we will use the C++03 version +/////////////////////////////////////////////////////////////////////////////// +#if (defined(BOOST_NO_DECLTYPE) \ + || defined(BOOST_NO_VARIADIC_TEMPLATES) \ + || defined(BOOST_NO_RVALUE_REFERENCES)) +# include +#else +# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE) +# define BOOST_FUSION_HAS_CPP11_DEQUE +# endif + +/////////////////////////////////////////////////////////////////////////////// +// C++11 interface +/////////////////////////////////////////////////////////////////////////////// namespace boost { namespace fusion { - struct void_; - - template< - BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( - FUSION_MAX_DEQUE_SIZE, typename T, void_)> + template struct deque; }} #endif +#endif diff --git a/3party/boost/boost/fusion/container/deque/deque_iterator.hpp b/3party/boost/boost/fusion/container/deque/deque_iterator.hpp index 7a2fcf459f..d3e5f31eb7 100644 --- a/3party/boost/boost/fusion/container/deque/deque_iterator.hpp +++ b/3party/boost/boost/fusion/container/deque/deque_iterator.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_ITERATOR_26112006_2154) @@ -12,13 +12,13 @@ #include #include #include -#include +#include namespace boost { namespace fusion { struct bidirectional_traversal_tag; - template + template struct deque_iterator : iterator_facade, bidirectional_traversal_tag> { @@ -84,7 +84,7 @@ namespace boost { namespace fusion { typedef typename mpl::minus< typename I2::index, typename I1::index - >::type + >::type type; static type diff --git a/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp index e48b7910d3..906f4fb657 100644 --- a/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/as_deque.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -25,7 +25,7 @@ namespace boost { namespace fusion { namespace detail { template struct as_deque; - + template <> struct as_deque<0> { @@ -34,7 +34,7 @@ namespace boost { namespace fusion { namespace detail { typedef deque<> type; }; - + template static typename apply::type call(Iterator) @@ -42,7 +42,30 @@ namespace boost { namespace fusion { namespace detail return deque<>(); } }; +}}} +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { namespace detail +{ #define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \ typedef typename fusion::result_of::next::type \ BOOST_PP_CAT(I, BOOST_PP_INC(n)); @@ -65,6 +88,12 @@ namespace boost { namespace fusion { namespace detail }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// @@ -85,7 +114,7 @@ namespace boost { namespace fusion { namespace detail BOOST_PP_REPEAT(N, BOOST_FUSION_VALUE_OF_ITERATOR, _) typedef deque type; }; - + template static typename apply::type call(Iterator const& i0) diff --git a/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp index 3dc7cde99f..0684dcf19e 100644 --- a/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/at_impl.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_AT_IMPL_09122006_2017) @@ -19,15 +19,15 @@ #include #include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct deque_tag; - namespace extension + namespace extension { template struct at_impl; - + template<> struct at_impl { @@ -37,15 +37,21 @@ namespace boost { namespace fusion { typedef typename Sequence::next_up next_up; typedef typename Sequence::next_down next_down; BOOST_MPL_ASSERT_RELATION(next_down::value, !=, next_up::value); - - typedef mpl::plus > offset; - typedef mpl::int_::value> adjusted_index; - typedef typename detail::keyed_element_value_at::type element_type; - typedef typename add_reference< - typename mpl::eval_if< - is_const, - add_const, - mpl::identity >::type>::type type; + + static int const offset = next_down::value + 1; + typedef mpl::int_<(N::value + offset)> adjusted_index; + typedef typename + detail::keyed_element_value_at::type + element_type; + + typedef typename + add_reference< + typename mpl::eval_if< + is_const, + add_const, + mpl::identity >::type + >::type + type; static type call(Sequence& seq) { diff --git a/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp index 13b50143da..1447868a33 100644 --- a/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/begin_impl.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_BEGIN_IMPL_09122006_2034) @@ -13,27 +13,29 @@ #include #include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct deque_tag; - namespace extension + namespace extension { template struct begin_impl; - + template<> struct begin_impl { template struct apply { - typedef typename mpl::if_< - mpl::equal_to, - deque_iterator, - deque_iterator< - Sequence, mpl::plus >::value> >::type type; - + typedef typename + mpl::if_c< + (Sequence::next_down::value == Sequence::next_up::value) + , deque_iterator + , deque_iterator + >::type + type; + static type call(Sequence& seq) { return type(seq); diff --git a/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp index ac310a19f7..1401ef1ac8 100644 --- a/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/convert_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -28,7 +28,7 @@ namespace boost { namespace fusion template struct apply { - typedef typename detail::as_deque::value> gen; + typedef detail::as_deque::value> gen; typedef typename gen:: template apply::type>::type type; diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03_deque.hpp new file mode 100644 index 0000000000..5804d89006 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/cpp03_deque.hpp @@ -0,0 +1,125 @@ +/*============================================================================= + Copyright (c) 2005-2012 Joel de Guzman + Copyright (c) 2005-2006 Dan Marsden + + 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) +==============================================================================*/ +#if !defined(BOOST_CPP03_FUSION_DEQUE_26112006_1649) +#define BOOST_CPP03_FUSION_DEQUE_26112006_1649 + +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { + + struct deque_tag; + + template + struct deque + : + detail::deque_keyed_values::type, + sequence_base > + { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef typename detail::deque_keyed_values::type base; + typedef typename detail::deque_initial_size::type size; + typedef mpl::int_ next_up; + typedef mpl::int_< + mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::false_ is_view; + +#include + + deque() + {} + + explicit deque(typename add_reference::type>::type t0) + : base(t0, detail::nil_keyed_element()) + {} + + template + deque(deque const& seq) + : base(seq) + {} + + template + deque(Sequence const& seq, typename disable_if >::type* /*dummy*/ = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + + template + deque& + operator=(deque const& rhs) + { + base::operator=(rhs); + return *this; + } + + template + deque& + operator=(T const& rhs) + { + base::operator=(rhs); + return *this; + } + + }; +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp new file mode 100644 index 0000000000..3a74447b17 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp @@ -0,0 +1,54 @@ +/*============================================================================= + Copyright (c) 2005-2012 Joel de Guzman + Copyright (c) 2005-2007 Dan Marsden + + 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) +==============================================================================*/ +#if !defined(FUSION_CPP03_DEQUE_FORWARD_02092007_0749) +#define FUSION_CPP03_DEQUE_FORWARD_02092007_0749 + +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" +#endif + +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ + struct void_; + + template< + BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( + FUSION_MAX_DEQUE_SIZE, typename T, void_)> + struct deque; +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp similarity index 62% rename from 3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp rename to 3party/boost/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp index 11b229b2bc..2fee47009b 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp @@ -1,13 +1,17 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330) #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330 +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" +#endif + #include #include @@ -24,12 +28,33 @@ #define FUSION_VOID(z, n, _) void_ -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct void_; +}} -namespace detail { +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp") +#endif +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { namespace detail +{ template struct keyed_element; @@ -44,18 +69,18 @@ namespace detail { typedef nil_keyed_element type; static type call() - { - return type(); - } + { + return type(); + } }; - + template struct deque_keyed_values_impl { typedef mpl::int_ >::value> next_index; typedef typename deque_keyed_values_impl< - next_index, + next_index, BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail; typedef keyed_element type; @@ -70,6 +95,12 @@ namespace detail { }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #undef FUSION_VOID #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp new file mode 100644 index 0000000000..43ed5360a2 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp @@ -0,0 +1,56 @@ +/*============================================================================= + Copyright (c) 2005-2012 Joel de Guzman + Copyright (c) 2005-2006 Dan Marsden + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901) +#define BOOST_FUSION_DEQUE_DETAIL_CPP11_DEQUE_KEYED_VALUES_07042012_1901 + +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + template + struct keyed_element; + + template + struct deque_keyed_values_impl; + + template + struct deque_keyed_values_impl + { + typedef mpl::int_<(N::value + 1)> next_index; + typedef typename deque_keyed_values_impl::type tail; + typedef keyed_element type; + + static type call( + typename detail::call_param::type head + , typename detail::call_param::type... tail) + { + return type( + head + , deque_keyed_values_impl::call(tail...) + ); + } + }; + + struct nil_keyed_element; + + template + struct deque_keyed_values_impl + { + typedef nil_keyed_element type; + static type call() { return type(); } + }; + + template + struct deque_keyed_values + : deque_keyed_values_impl, Elements...> {}; +}}} + +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp index 813c049153..b76916ebd8 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp @@ -1,14 +1,18 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_PP_IS_ITERATING) #if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212) #define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212 +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" +#endif + #include #include #include diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp index 8fa56292c9..edb3c176cc 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp @@ -1,13 +1,17 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139) #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139 +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" +#endif + #include #include #include @@ -15,12 +19,33 @@ #include #include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct void_; +}} -namespace detail { +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_initial_size" FUSION_MAX_DEQUE_SIZE_STR ".hpp") +#endif +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { namespace detail +{ template struct deque_initial_size { @@ -30,4 +55,10 @@ namespace detail { }; }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp index 0a39add6ca..f95960bcfc 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp @@ -1,14 +1,18 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_PP_IS_ITERATING) #if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211) #define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211 +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" +#endif + #include #include #include @@ -23,16 +27,16 @@ #define N BOOST_PP_ITERATION() -static type call(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference::type>::type t)) -{ - return type(t0, - deque_keyed_values_impl< - next_index -#if N > 1 - , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T) -#endif - >::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t))); -} + static type call(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference::type>::type t)) + { + return type(t0, + deque_keyed_values_impl< + next_index + #if N > 1 + , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T) + #endif + >::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t))); + } #undef N #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp index 96a1b17da6..8037689abf 100644 --- a/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/end_impl.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_END_IMPL_09122006_2034) @@ -13,27 +13,29 @@ #include #include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct deque_tag; - namespace extension + namespace extension { template struct end_impl; - + template<> struct end_impl { template struct apply { - typedef typename mpl::if_< - mpl::equal_to, - deque_iterator, - deque_iterator< - Sequence, Sequence::next_up::value> >::type type; - + typedef typename + mpl::if_c< + (Sequence::next_down::value == Sequence::next_up::value) + , deque_iterator + , deque_iterator + >::type + type; + static type call(Sequence& seq) { return type(seq); diff --git a/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp index ff88ed6f2c..b4718be41a 100644 --- a/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/is_sequence_impl.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2010 Christopher Schmidt - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ @@ -14,18 +14,16 @@ namespace boost { namespace fusion { struct deque_tag; - namespace extension + namespace extension { template struct is_sequence_impl; - + template<> struct is_sequence_impl { template - struct apply - : mpl::true_ - {}; + struct apply : mpl::true_ {}; }; } }} diff --git a/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp b/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp index 177f68ac34..d1b219dee7 100644 --- a/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp @@ -1,47 +1,45 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_DETAIL_KEYED_ELEMENT_26112006_1330) #define BOOST_FUSION_DEQUE_DETAIL_KEYED_ELEMENT_26112006_1330 -#include -#include - +#include #include #include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct fusion_sequence_tag; +}} -namespace detail { - +namespace boost { namespace fusion { namespace detail +{ struct nil_keyed_element { typedef fusion_sequence_tag tag; void get(); template - static nil_keyed_element + static nil_keyed_element from_iterator(It const&) { return nil_keyed_element(); } }; - template - struct keyed_element - : Rest + template + struct keyed_element : Rest { typedef Rest base; typedef fusion_sequence_tag tag; using Rest::get; - template + template static keyed_element from_iterator(It const& it) { @@ -49,9 +47,9 @@ namespace detail { *it, base::from_iterator(fusion::next(it))); } - template + template keyed_element(keyed_element const& rhs) - : Rest(rhs.get_base()), value_(rhs.value_) + : Rest(rhs.get_base()), value_(rhs.value_) {} Rest const get_base() const @@ -59,17 +57,17 @@ namespace detail { return *this; } - typename add_reference::type>::type get(Key) const + typename cref_result::type get(Key) const { return value_; } - typename add_reference::type get(Key) + typename ref_result::type get(Key) { return value_; } - keyed_element(typename add_reference::type>::type value, Rest const& rest) + keyed_element(typename call_param::type value, Rest const& rest) : Rest(rest), value_(value) {} @@ -97,7 +95,7 @@ namespace detail { template struct keyed_element_value_at - : keyed_element_value_at + : keyed_element_value_at {}; template @@ -105,7 +103,6 @@ namespace detail { { typedef Value type; }; - }}} #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp new file mode 100644 index 0000000000..f383bea28b --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp new file mode 100644 index 0000000000..709ecf4973 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp @@ -0,0 +1,211 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_deque<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_deque<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_deque<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_deque<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_deque<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_deque<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_deque<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_deque<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_deque<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_deque<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp new file mode 100644 index 0000000000..7363f42984 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp @@ -0,0 +1,411 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_deque<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_deque<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_deque<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_deque<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_deque<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_deque<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_deque<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_deque<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_deque<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_deque<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_deque<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_deque<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_deque<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_deque<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_deque<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_deque<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_deque<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_deque<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_deque<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_deque<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp new file mode 100644 index 0000000000..f0c72b0b8b --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp @@ -0,0 +1,611 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_deque<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_deque<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_deque<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_deque<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_deque<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_deque<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_deque<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_deque<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_deque<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_deque<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_deque<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_deque<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_deque<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_deque<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_deque<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_deque<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_deque<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_deque<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_deque<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_deque<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_deque<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_deque<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_deque<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_deque<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_deque<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_deque<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_deque<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_deque<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_deque<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_deque<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp new file mode 100644 index 0000000000..720db73f40 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp @@ -0,0 +1,811 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_deque<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_deque<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_deque<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_deque<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_deque<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_deque<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_deque<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_deque<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_deque<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_deque<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_deque<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_deque<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_deque<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_deque<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_deque<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_deque<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_deque<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_deque<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_deque<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_deque<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_deque<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_deque<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_deque<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_deque<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_deque<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_deque<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_deque<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_deque<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_deque<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_deque<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_deque<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_deque<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_deque<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_deque<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_deque<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_deque<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_deque<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_deque<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_deque<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_deque<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp new file mode 100644 index 0000000000..e328927e38 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp @@ -0,0 +1,1011 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_deque<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_deque<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_deque<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_deque<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_deque<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_deque<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_deque<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_deque<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_deque<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_deque<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_deque<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_deque<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_deque<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_deque<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_deque<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_deque<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_deque<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_deque<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_deque<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_deque<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_deque<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_deque<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_deque<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_deque<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_deque<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_deque<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_deque<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_deque<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_deque<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_deque<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_deque<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_deque<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_deque<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_deque<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_deque<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_deque<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_deque<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_deque<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_deque<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_deque<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; + template <> + struct as_deque<41> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); + } + }; + template <> + struct as_deque<42> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); + } + }; + template <> + struct as_deque<43> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); + } + }; + template <> + struct as_deque<44> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); + } + }; + template <> + struct as_deque<45> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); + } + }; + template <> + struct as_deque<46> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); + } + }; + template <> + struct as_deque<47> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); + } + }; + template <> + struct as_deque<48> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); + } + }; + template <> + struct as_deque<49> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); + } + }; + template <> + struct as_deque<50> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; typedef typename fusion::result_of::next::type I50; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; typedef typename fusion::result_of::value_of::type T49; + typedef deque type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp new file mode 100644 index 0000000000..404d20b748 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp new file mode 100644 index 0000000000..b981e927dc --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10.hpp @@ -0,0 +1,80 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { + struct deque_tag; + template + struct deque + : + detail::deque_keyed_values::type, + sequence_base > + { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef typename detail::deque_keyed_values::type base; + typedef typename detail::deque_initial_size::type size; + typedef mpl::int_ next_up; + typedef mpl::int_< + mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::false_ is_view; +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + : base(detail::deque_keyed_values::call(t0 , t1)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + : base(detail::deque_keyed_values::call(t0 , t1 , t2)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)) +{} + deque() + {} + explicit deque(typename add_reference::type>::type t0) + : base(t0, detail::nil_keyed_element()) + {} + template + deque(deque const& seq) + : base(seq) + {} + template + deque(Sequence const& seq, typename disable_if >::type* = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + template + deque& + operator=(deque const& rhs) + { + base::operator=(rhs); + return *this; + } + template + deque& + operator=(T const& rhs) + { + base::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp new file mode 100644 index 0000000000..4752e96436 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template< + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_> + struct deque; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp new file mode 100644 index 0000000000..f70524ae87 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20.hpp @@ -0,0 +1,110 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { + struct deque_tag; + template + struct deque + : + detail::deque_keyed_values::type, + sequence_base > + { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef typename detail::deque_keyed_values::type base; + typedef typename detail::deque_initial_size::type size; + typedef mpl::int_ next_up; + typedef mpl::int_< + mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::false_ is_view; +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + : base(detail::deque_keyed_values::call(t0 , t1)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + : base(detail::deque_keyed_values::call(t0 , t1 , t2)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)) +{} + deque() + {} + explicit deque(typename add_reference::type>::type t0) + : base(t0, detail::nil_keyed_element()) + {} + template + deque(deque const& seq) + : base(seq) + {} + template + deque(Sequence const& seq, typename disable_if >::type* = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + template + deque& + operator=(deque const& rhs) + { + base::operator=(rhs); + return *this; + } + template + deque& + operator=(T const& rhs) + { + base::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp new file mode 100644 index 0000000000..c53618811b --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template< + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_> + struct deque; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp new file mode 100644 index 0000000000..fd1e7ccdf8 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30.hpp @@ -0,0 +1,140 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { + struct deque_tag; + template + struct deque + : + detail::deque_keyed_values::type, + sequence_base > + { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef typename detail::deque_keyed_values::type base; + typedef typename detail::deque_initial_size::type size; + typedef mpl::int_ next_up; + typedef mpl::int_< + mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::false_ is_view; +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + : base(detail::deque_keyed_values::call(t0 , t1)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + : base(detail::deque_keyed_values::call(t0 , t1 , t2)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29)) +{} + deque() + {} + explicit deque(typename add_reference::type>::type t0) + : base(t0, detail::nil_keyed_element()) + {} + template + deque(deque const& seq) + : base(seq) + {} + template + deque(Sequence const& seq, typename disable_if >::type* = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + template + deque& + operator=(deque const& rhs) + { + base::operator=(rhs); + return *this; + } + template + deque& + operator=(T const& rhs) + { + base::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp new file mode 100644 index 0000000000..d7abffcb8b --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template< + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_> + struct deque; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp new file mode 100644 index 0000000000..5343685acc --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40.hpp @@ -0,0 +1,170 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { + struct deque_tag; + template + struct deque + : + detail::deque_keyed_values::type, + sequence_base > + { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef typename detail::deque_keyed_values::type base; + typedef typename detail::deque_initial_size::type size; + typedef mpl::int_ next_up; + typedef mpl::int_< + mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::false_ is_view; +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + : base(detail::deque_keyed_values::call(t0 , t1)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + : base(detail::deque_keyed_values::call(t0 , t1 , t2)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39)) +{} + deque() + {} + explicit deque(typename add_reference::type>::type t0) + : base(t0, detail::nil_keyed_element()) + {} + template + deque(deque const& seq) + : base(seq) + {} + template + deque(Sequence const& seq, typename disable_if >::type* = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + template + deque& + operator=(deque const& rhs) + { + base::operator=(rhs); + return *this; + } + template + deque& + operator=(T const& rhs) + { + base::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp new file mode 100644 index 0000000000..72f2b9c24c --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template< + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_> + struct deque; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp new file mode 100644 index 0000000000..fc7d6b164f --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50.hpp @@ -0,0 +1,200 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { + struct deque_tag; + template + struct deque + : + detail::deque_keyed_values::type, + sequence_base > + { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef typename detail::deque_keyed_values::type base; + typedef typename detail::deque_initial_size::type size; + typedef mpl::int_ next_up; + typedef mpl::int_< + mpl::if_ >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down; + typedef mpl::false_ is_view; +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + : base(detail::deque_keyed_values::call(t0 , t1)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + : base(detail::deque_keyed_values::call(t0 , t1 , t2)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46 , typename add_reference::type>::type t47) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46 , typename add_reference::type>::type t47 , typename add_reference::type>::type t48) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48)) +{} +deque(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46 , typename add_reference::type>::type t47 , typename add_reference::type>::type t48 , typename add_reference::type>::type t49) + : base(detail::deque_keyed_values::call(t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49)) +{} + deque() + {} + explicit deque(typename add_reference::type>::type t0) + : base(t0, detail::nil_keyed_element()) + {} + template + deque(deque const& seq) + : base(seq) + {} + template + deque(Sequence const& seq, typename disable_if >::type* = 0) + : base(base::from_iterator(fusion::begin(seq))) + {} + template + deque& + operator=(deque const& rhs) + { + base::operator=(rhs); + return *this; + } + template + deque& + operator=(T const& rhs) + { + base::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp new file mode 100644 index 0000000000..d46a2c7585 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template< + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_> + struct deque; +}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp new file mode 100644 index 0000000000..a0b75b7c4d --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp new file mode 100644 index 0000000000..a26dfdb26c --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp new file mode 100644 index 0000000000..5bf08d560b --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct deque_initial_size + { + typedef mpl::vector args; + typedef typename mpl::find::type first_void; + typedef typename mpl::distance::type, first_void>::type type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp new file mode 100644 index 0000000000..a48c33ac44 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct deque_initial_size + { + typedef mpl::vector args; + typedef typename mpl::find::type first_void; + typedef typename mpl::distance::type, first_void>::type type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp new file mode 100644 index 0000000000..53e805201f --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct deque_initial_size + { + typedef mpl::vector args; + typedef typename mpl::find::type first_void; + typedef typename mpl::distance::type, first_void>::type type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp new file mode 100644 index 0000000000..3a613b8f7f --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct deque_initial_size + { + typedef mpl::vector args; + typedef typename mpl::find::type first_void; + typedef typename mpl::distance::type, first_void>::type type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp new file mode 100644 index 0000000000..2a31a72bd0 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct deque_initial_size + { + typedef mpl::vector args; + typedef typename mpl::find::type first_void; + typedef typename mpl::distance::type, first_void>::type type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp new file mode 100644 index 0000000000..2460dda59d --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp new file mode 100644 index 0000000000..904c48c62d --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp @@ -0,0 +1,117 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct keyed_element; + struct nil_keyed_element; + template + struct deque_keyed_values_impl; + template + struct deque_keyed_values_impl + { + typedef nil_keyed_element type; + static type call() + { + return type(); + } + }; + template + struct deque_keyed_values_impl + { + typedef mpl::int_ >::value> next_index; + typedef typename deque_keyed_values_impl< + next_index, + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type tail; + typedef keyed_element type; + static type call(typename add_reference::type>::type t0) + { + return type(t0, + deque_keyed_values_impl< + next_index + >::call()); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 + >::call(t1)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 + >::call(t1 , t2)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 + >::call(t1 , t2 , t3)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 + >::call(t1 , t2 , t3 , t4)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 + >::call(t1 , t2 , t3 , t4 , t5)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 + >::call(t1 , t2 , t3 , t4 , t5 , t6)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)); + } + }; + template + struct deque_keyed_values + : deque_keyed_values_impl, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> + {}; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp new file mode 100644 index 0000000000..391b2809a7 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp @@ -0,0 +1,197 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct keyed_element; + struct nil_keyed_element; + template + struct deque_keyed_values_impl; + template + struct deque_keyed_values_impl + { + typedef nil_keyed_element type; + static type call() + { + return type(); + } + }; + template + struct deque_keyed_values_impl + { + typedef mpl::int_ >::value> next_index; + typedef typename deque_keyed_values_impl< + next_index, + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type tail; + typedef keyed_element type; + static type call(typename add_reference::type>::type t0) + { + return type(t0, + deque_keyed_values_impl< + next_index + >::call()); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 + >::call(t1)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 + >::call(t1 , t2)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 + >::call(t1 , t2 , t3)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 + >::call(t1 , t2 , t3 , t4)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 + >::call(t1 , t2 , t3 , t4 , t5)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 + >::call(t1 , t2 , t3 , t4 , t5 , t6)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)); + } + }; + template + struct deque_keyed_values + : deque_keyed_values_impl, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> + {}; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp new file mode 100644 index 0000000000..9ae6bf6110 --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp @@ -0,0 +1,277 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct keyed_element; + struct nil_keyed_element; + template + struct deque_keyed_values_impl; + template + struct deque_keyed_values_impl + { + typedef nil_keyed_element type; + static type call() + { + return type(); + } + }; + template + struct deque_keyed_values_impl + { + typedef mpl::int_ >::value> next_index; + typedef typename deque_keyed_values_impl< + next_index, + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type tail; + typedef keyed_element type; + static type call(typename add_reference::type>::type t0) + { + return type(t0, + deque_keyed_values_impl< + next_index + >::call()); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 + >::call(t1)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 + >::call(t1 , t2)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 + >::call(t1 , t2 , t3)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 + >::call(t1 , t2 , t3 , t4)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 + >::call(t1 , t2 , t3 , t4 , t5)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 + >::call(t1 , t2 , t3 , t4 , t5 , t6)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29)); + } + }; + template + struct deque_keyed_values + : deque_keyed_values_impl, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> + {}; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp new file mode 100644 index 0000000000..8b427aee1a --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp @@ -0,0 +1,357 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct keyed_element; + struct nil_keyed_element; + template + struct deque_keyed_values_impl; + template + struct deque_keyed_values_impl + { + typedef nil_keyed_element type; + static type call() + { + return type(); + } + }; + template + struct deque_keyed_values_impl + { + typedef mpl::int_ >::value> next_index; + typedef typename deque_keyed_values_impl< + next_index, + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type tail; + typedef keyed_element type; + static type call(typename add_reference::type>::type t0) + { + return type(t0, + deque_keyed_values_impl< + next_index + >::call()); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 + >::call(t1)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 + >::call(t1 , t2)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 + >::call(t1 , t2 , t3)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 + >::call(t1 , t2 , t3 , t4)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 + >::call(t1 , t2 , t3 , t4 , t5)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 + >::call(t1 , t2 , t3 , t4 , t5 , t6)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39)); + } + }; + template + struct deque_keyed_values + : deque_keyed_values_impl, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> + {}; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp new file mode 100644 index 0000000000..730ee2f12b --- /dev/null +++ b/3party/boost/boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp @@ -0,0 +1,437 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct keyed_element; + struct nil_keyed_element; + template + struct deque_keyed_values_impl; + template + struct deque_keyed_values_impl + { + typedef nil_keyed_element type; + static type call() + { + return type(); + } + }; + template + struct deque_keyed_values_impl + { + typedef mpl::int_ >::value> next_index; + typedef typename deque_keyed_values_impl< + next_index, + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type tail; + typedef keyed_element type; + static type call(typename add_reference::type>::type t0) + { + return type(t0, + deque_keyed_values_impl< + next_index + >::call()); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 + >::call(t1)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 + >::call(t1 , t2)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 + >::call(t1 , t2 , t3)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 + >::call(t1 , t2 , t3 , t4)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 + >::call(t1 , t2 , t3 , t4 , t5)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 + >::call(t1 , t2 , t3 , t4 , t5 , t6)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46 , typename add_reference::type>::type t47) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46 , typename add_reference::type>::type t47 , typename add_reference::type>::type t48) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48)); + } + static type call(typename add_reference::type>::type t0 , typename add_reference::type>::type t1 , typename add_reference::type>::type t2 , typename add_reference::type>::type t3 , typename add_reference::type>::type t4 , typename add_reference::type>::type t5 , typename add_reference::type>::type t6 , typename add_reference::type>::type t7 , typename add_reference::type>::type t8 , typename add_reference::type>::type t9 , typename add_reference::type>::type t10 , typename add_reference::type>::type t11 , typename add_reference::type>::type t12 , typename add_reference::type>::type t13 , typename add_reference::type>::type t14 , typename add_reference::type>::type t15 , typename add_reference::type>::type t16 , typename add_reference::type>::type t17 , typename add_reference::type>::type t18 , typename add_reference::type>::type t19 , typename add_reference::type>::type t20 , typename add_reference::type>::type t21 , typename add_reference::type>::type t22 , typename add_reference::type>::type t23 , typename add_reference::type>::type t24 , typename add_reference::type>::type t25 , typename add_reference::type>::type t26 , typename add_reference::type>::type t27 , typename add_reference::type>::type t28 , typename add_reference::type>::type t29 , typename add_reference::type>::type t30 , typename add_reference::type>::type t31 , typename add_reference::type>::type t32 , typename add_reference::type>::type t33 , typename add_reference::type>::type t34 , typename add_reference::type>::type t35 , typename add_reference::type>::type t36 , typename add_reference::type>::type t37 , typename add_reference::type>::type t38 , typename add_reference::type>::type t39 , typename add_reference::type>::type t40 , typename add_reference::type>::type t41 , typename add_reference::type>::type t42 , typename add_reference::type>::type t43 , typename add_reference::type>::type t44 , typename add_reference::type>::type t45 , typename add_reference::type>::type t46 , typename add_reference::type>::type t47 , typename add_reference::type>::type t48 , typename add_reference::type>::type t49) + { + return type(t0, + deque_keyed_values_impl< + next_index + , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49 + >::call(t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24 , t25 , t26 , t27 , t28 , t29 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39 , t40 , t41 , t42 , t43 , t44 , t45 , t46 , t47 , t48 , t49)); + } + }; + template + struct deque_keyed_values + : deque_keyed_values_impl, T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> + {}; +}}} diff --git a/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp index ec0351de63..cba31a3e0a 100644 --- a/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/value_at_impl.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_VALUE_AT_IMPL_08122006_0756) @@ -13,15 +13,15 @@ #include #include -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct deque_tag; - namespace extension + namespace extension { template struct value_at_impl; - + template<> struct value_at_impl { @@ -31,10 +31,12 @@ namespace boost { namespace fusion { typedef typename Sequence::next_up next_up; typedef typename Sequence::next_down next_down; BOOST_MPL_ASSERT_RELATION(next_down::value, !=, next_up::value); - - typedef mpl::plus > offset; - typedef mpl::int_::value> adjusted_index; - typedef typename detail::keyed_element_value_at::type type; + + static int const offset = next_down::value + 1; + typedef mpl::int_<(N::value + offset)> adjusted_index; + typedef typename + detail::keyed_element_value_at::type + type; }; }; } diff --git a/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp b/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp index 156e66a475..2f3654ede2 100644 --- a/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp +++ b/3party/boost/boost/fusion/container/deque/front_extended_deque.hpp @@ -1,38 +1,46 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_FRONT_EXTENDED_DEQUE_26112006_2209) #define BOOST_FUSION_FRONT_EXTENDED_DEQUE_26112006_2209 -#include #include -#include -#include -#include - -#include -#include - #include +#include +#include -namespace boost { namespace fusion { - template +namespace boost { namespace fusion +{ + template struct front_extended_deque - : detail::keyed_element, - sequence_base > + : detail::keyed_element + , sequence_base > { typedef detail::keyed_element base; - typedef mpl::int_ >::value> next_down; + typedef mpl::int_<(Deque::next_down::value - 1)> next_down; typedef typename Deque::next_up next_up; - typedef mpl::plus::type, mpl::int_<1> > size; + typedef mpl::int_<(result_of::size::value + 1)> size; - front_extended_deque(Deque const& deque, typename add_reference::type>::type t) - : base(t, deque) + template + front_extended_deque(Deque const& deque, Arg const& val) + : base(val, deque) {} + +#if defined(BOOST_NO_RVALUE_REFERENCES) + template + front_extended_deque(Deque const& deque, Arg& val) + : base(val, deque) + {} +#else + template + front_extended_deque(Deque const& deque, Arg&& val) + : base(std::forward(val), deque) + {} +#endif }; }} diff --git a/3party/boost/boost/fusion/container/deque/limits.hpp b/3party/boost/boost/fusion/container/deque/limits.hpp index 2262f17cfc..2a7d219de6 100644 --- a/3party/boost/boost/fusion/container/deque/limits.hpp +++ b/3party/boost/boost/fusion/container/deque/limits.hpp @@ -1,15 +1,32 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737) #define BOOST_FUSION_DEQUE_LIMITS_26112006_1737 -#if !defined(FUSION_MAX_DEQUE_SIZE) -#define FUSION_MAX_DEQUE_SIZE 10 +#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#error "C++03 only! This file should not have been included" #endif +#include + +#if !defined(FUSION_MAX_DEQUE_SIZE) +# define FUSION_MAX_DEQUE_SIZE FUSION_MAX_VECTOR_SIZE +#else +# if FUSION_MAX_DEQUE_SIZE < 3 +# undef FUSION_MAX_DEQUE_SIZE +# if (FUSION_MAX_VECTOR_SIZE > 10) +# define FUSION_MAX_DEQUE_SIZE 10 +# else +# define FUSION_MAX_DEQUE_SIZE FUSION_MAX_VECTOR_SIZE +# endif +# endif +#endif + +#define FUSION_MAX_DEQUE_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_DEQUE_SIZE)) + #endif diff --git a/3party/boost/boost/fusion/container/ext_/tree.hpp b/3party/boost/boost/fusion/container/ext_/tree.hpp deleted file mode 100644 index cd8c5dcd3f..0000000000 --- a/3party/boost/boost/fusion/container/ext_/tree.hpp +++ /dev/null @@ -1,130 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - Use, modification and distribution is subject to 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 FUSION_BINARY_TREE_EAN_05032006_1027 -#define FUSION_BINARY_TREE_EAN_05032006_1027 - -#include -#include -#include -#include -#include -#include -#include -#include // for nil -#include -#include -#include -#include -#include - -namespace boost { namespace fusion -{ - struct tree_tag; - - namespace detail - { - template - struct reference : add_reference {}; - - template - struct reference : reference::type, false> {}; - - template - struct reference : reference {}; - } - - template - struct tree - : sequence_base > - { - typedef Data data_type; - typedef Left left_type; - typedef Right right_type; - typedef tree_tag fusion_tag; - typedef forward_traversal_tag category; - typedef mpl::false_ is_view; - - typedef typename mpl::if_< - traits::is_sequence - , Data - , single_view - >::type data_view; - - explicit tree( - typename fusion::detail::call_param::type data_ - , typename fusion::detail::call_param::type left_ = Left() - , typename fusion::detail::call_param::type right_ = Right() - ) - : segments(left_, data_view(data_), right_) - {} - - typedef vector3 segments_type; - segments_type segments; - }; - - template - tree make_tree(Data const &data) - { - return tree(data); - } - - template - tree make_tree(Data const &data, Left const &left, Right const &right) - { - return tree(data, left, right); - } - - namespace extension - { - template<> - struct is_segmented_impl - { - template - struct apply : mpl::true_ {}; - }; - - template<> - struct segments_impl - { - template - struct apply - { - typedef typename mpl::if_< - is_const - , typename Sequence::segments_type const & - , typename Sequence::segments_type & - >::type type; - - static type call(Sequence &seq) - { - return seq.segments; - } - }; - }; - - template<> - struct begin_impl - { - template - struct apply - : segmented_begin - {}; - }; - - template<> - struct end_impl - { - template - struct apply - : segmented_end - {}; - }; - } -}} - -#endif diff --git a/3party/boost/boost/fusion/container/generation.hpp b/3party/boost/boost/fusion/container/generation.hpp index 7d92bb2f05..49d45757a5 100644 --- a/3party/boost/boost/fusion/container/generation.hpp +++ b/3party/boost/boost/fusion/container/generation.hpp @@ -1,18 +1,21 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_GENERATION_10022005_0615) #define FUSION_SEQUENCE_GENERATION_10022005_0615 +#include +#include #include #include #include #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/fusion/container/generation/cons_tie.hpp b/3party/boost/boost/fusion/container/generation/cons_tie.hpp index 88ce0aa49e..4459e0c37a 100644 --- a/3party/boost/boost/fusion/container/generation/cons_tie.hpp +++ b/3party/boost/boost/fusion/container/generation/cons_tie.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/generation/deque_tie.hpp b/3party/boost/boost/fusion/container/generation/deque_tie.hpp index c5d26c9796..ea0afb92c9 100644 --- a/3party/boost/boost/fusion/container/generation/deque_tie.hpp +++ b/3party/boost/boost/fusion/container/generation/deque_tie.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -17,10 +17,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque_tie" FUSION_MAX_DEQUE_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -36,11 +56,17 @@ namespace boost { namespace fusion #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE) #include BOOST_PP_ITERATE() - + #undef BOOST_FUSION_REF }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp new file mode 100644 index 0000000000..7df3c52f0f --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp new file mode 100644 index 0000000000..0fa5e8017a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp @@ -0,0 +1,170 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct deque_tie; + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0) + { + return deque( + _0); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1) + { + return deque( + _0 , _1); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return deque( + _0 , _1 , _2); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return deque( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return deque( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp new file mode 100644 index 0000000000..5002a2899d --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp @@ -0,0 +1,320 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct deque_tie; + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0) + { + return deque( + _0); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1) + { + return deque( + _0 , _1); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return deque( + _0 , _1 , _2); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return deque( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return deque( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp new file mode 100644 index 0000000000..5d59f65743 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp @@ -0,0 +1,470 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct deque_tie; + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0) + { + return deque( + _0); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1) + { + return deque( + _0 , _1); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return deque( + _0 , _1 , _2); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return deque( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return deque( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp new file mode 100644 index 0000000000..7701834a78 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp @@ -0,0 +1,620 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct deque_tie; + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0) + { + return deque( + _0); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1) + { + return deque( + _0 , _1); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return deque( + _0 , _1 , _2); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return deque( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return deque( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp new file mode 100644 index 0000000000..ccc36c89b7 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp @@ -0,0 +1,770 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct deque_tie; + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0) + { + return deque( + _0); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1) + { + return deque( + _0 , _1); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return deque( + _0 , _1 , _2); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return deque( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return deque( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct deque_tie + { + typedef deque type; + }; + } + template + inline deque + deque_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49) + { + return deque( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie.hpp new file mode 100644 index 0000000000..22d3e45af1 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_LIST_SIZE <= 10 +#include +#elif FUSION_MAX_LIST_SIZE <= 20 +#include +#elif FUSION_MAX_LIST_SIZE <= 30 +#include +#elif FUSION_MAX_LIST_SIZE <= 40 +#include +#elif FUSION_MAX_LIST_SIZE <= 50 +#include +#else +#error "FUSION_MAX_LIST_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp new file mode 100644 index 0000000000..c68e7396b0 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp @@ -0,0 +1,170 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct list_tie; + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0) + { + return list( + _0); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1) + { + return list( + _0 , _1); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return list( + _0 , _1 , _2); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return list( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return list( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp new file mode 100644 index 0000000000..bef1cbb4c8 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp @@ -0,0 +1,320 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct list_tie; + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0) + { + return list( + _0); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1) + { + return list( + _0 , _1); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return list( + _0 , _1 , _2); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return list( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return list( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp new file mode 100644 index 0000000000..d7d72361b7 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp @@ -0,0 +1,470 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct list_tie; + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0) + { + return list( + _0); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1) + { + return list( + _0 , _1); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return list( + _0 , _1 , _2); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return list( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return list( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp new file mode 100644 index 0000000000..159e7c3e69 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp @@ -0,0 +1,620 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct list_tie; + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0) + { + return list( + _0); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1) + { + return list( + _0 , _1); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return list( + _0 , _1 , _2); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return list( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return list( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp new file mode 100644 index 0000000000..1890ba6aed --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp @@ -0,0 +1,770 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct list_tie; + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0) + { + return list( + _0); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1) + { + return list( + _0 , _1); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return list( + _0 , _1 , _2); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return list( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return list( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct list_tie + { + typedef list type; + }; + } + template + inline list + list_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49) + { + return list( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque.hpp new file mode 100644 index 0000000000..64cd623ac1 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_DEQUE_SIZE <= 10 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 20 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 30 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 40 +#include +#elif FUSION_MAX_DEQUE_SIZE <= 50 +#include +#else +#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp new file mode 100644 index 0000000000..336061aad0 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp @@ -0,0 +1,180 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct make_deque; + template <> + struct make_deque<> + { + typedef deque<> type; + }; + } + inline deque<> + make_deque() + { + return deque<>(); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type> type; + }; + } + template + inline deque::type> + make_deque(T0 const& _0) + { + return deque::type>( + _0); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1) + { + return deque::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp new file mode 100644 index 0000000000..f2568cda0f --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp @@ -0,0 +1,330 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct make_deque; + template <> + struct make_deque<> + { + typedef deque<> type; + }; + } + inline deque<> + make_deque() + { + return deque<>(); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type> type; + }; + } + template + inline deque::type> + make_deque(T0 const& _0) + { + return deque::type>( + _0); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1) + { + return deque::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp new file mode 100644 index 0000000000..e403f52693 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp @@ -0,0 +1,480 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct make_deque; + template <> + struct make_deque<> + { + typedef deque<> type; + }; + } + inline deque<> + make_deque() + { + return deque<>(); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type> type; + }; + } + template + inline deque::type> + make_deque(T0 const& _0) + { + return deque::type>( + _0); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1) + { + return deque::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp new file mode 100644 index 0000000000..0033770b1d --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp @@ -0,0 +1,630 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct make_deque; + template <> + struct make_deque<> + { + typedef deque<> type; + }; + } + inline deque<> + make_deque() + { + return deque<>(); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type> type; + }; + } + template + inline deque::type> + make_deque(T0 const& _0) + { + return deque::type>( + _0); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1) + { + return deque::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp new file mode 100644 index 0000000000..4bb5e1bb10 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp @@ -0,0 +1,780 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct make_deque; + template <> + struct make_deque<> + { + typedef deque<> type; + }; + } + inline deque<> + make_deque() + { + return deque<>(); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type> type; + }; + } + template + inline deque::type> + make_deque(T0 const& _0) + { + return deque::type>( + _0); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1) + { + return deque::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct make_deque + { + typedef deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_deque(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) + { + return deque::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list.hpp new file mode 100644 index 0000000000..9940ffbbe6 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_LIST_SIZE <= 10 +#include +#elif FUSION_MAX_LIST_SIZE <= 20 +#include +#elif FUSION_MAX_LIST_SIZE <= 30 +#include +#elif FUSION_MAX_LIST_SIZE <= 40 +#include +#elif FUSION_MAX_LIST_SIZE <= 50 +#include +#else +#error "FUSION_MAX_LIST_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp new file mode 100644 index 0000000000..f12580708e --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list10.hpp @@ -0,0 +1,180 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct make_list; + template <> + struct make_list<> + { + typedef list<> type; + }; + } + inline list<> + make_list() + { + return list<>(); + } + namespace result_of + { + template + struct make_list + { + typedef list::type> type; + }; + } + template + inline list::type> + make_list(T0 const& _0) + { + return list::type>( + _0); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1) + { + return list::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp new file mode 100644 index 0000000000..7abf884359 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list20.hpp @@ -0,0 +1,330 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct make_list; + template <> + struct make_list<> + { + typedef list<> type; + }; + } + inline list<> + make_list() + { + return list<>(); + } + namespace result_of + { + template + struct make_list + { + typedef list::type> type; + }; + } + template + inline list::type> + make_list(T0 const& _0) + { + return list::type>( + _0); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1) + { + return list::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp new file mode 100644 index 0000000000..b751d295dd --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list30.hpp @@ -0,0 +1,480 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct make_list; + template <> + struct make_list<> + { + typedef list<> type; + }; + } + inline list<> + make_list() + { + return list<>(); + } + namespace result_of + { + template + struct make_list + { + typedef list::type> type; + }; + } + template + inline list::type> + make_list(T0 const& _0) + { + return list::type>( + _0); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1) + { + return list::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp new file mode 100644 index 0000000000..0a737fda68 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list40.hpp @@ -0,0 +1,630 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct make_list; + template <> + struct make_list<> + { + typedef list<> type; + }; + } + inline list<> + make_list() + { + return list<>(); + } + namespace result_of + { + template + struct make_list + { + typedef list::type> type; + }; + } + template + inline list::type> + make_list(T0 const& _0) + { + return list::type>( + _0); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1) + { + return list::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp new file mode 100644 index 0000000000..b49a9bfcb1 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_list50.hpp @@ -0,0 +1,780 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct make_list; + template <> + struct make_list<> + { + typedef list<> type; + }; + } + inline list<> + make_list() + { + return list<>(); + } + namespace result_of + { + template + struct make_list + { + typedef list::type> type; + }; + } + template + inline list::type> + make_list(T0 const& _0) + { + return list::type>( + _0); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1) + { + return list::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct make_list + { + typedef list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_list(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) + { + return list::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map.hpp new file mode 100644 index 0000000000..d3068b927a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_MAP_SIZE <= 10 +#include +#elif FUSION_MAX_MAP_SIZE <= 20 +#include +#elif FUSION_MAX_MAP_SIZE <= 30 +#include +#elif FUSION_MAX_MAP_SIZE <= 40 +#include +#elif FUSION_MAX_MAP_SIZE <= 50 +#include +#else +#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp new file mode 100644 index 0000000000..7032f862ba --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map10.hpp @@ -0,0 +1,241 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ + , typename Extra = void_ + > + struct make_map; + template <> + struct make_map<> + { + typedef map<> type; + }; + } + inline map<> + make_map() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct make_map + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + make_map(D0 const& _0) + { + return map::type> >( + fusion::make_pair(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp new file mode 100644 index 0000000000..59054b1dc5 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map20.hpp @@ -0,0 +1,451 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ + , typename Extra = void_ + > + struct make_map; + template <> + struct make_map<> + { + typedef map<> type; + }; + } + inline map<> + make_map() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct make_map + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + make_map(D0 const& _0) + { + return map::type> >( + fusion::make_pair(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp new file mode 100644 index 0000000000..de495b5f1d --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map30.hpp @@ -0,0 +1,661 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ , typename K20 = void_ , typename K21 = void_ , typename K22 = void_ , typename K23 = void_ , typename K24 = void_ , typename K25 = void_ , typename K26 = void_ , typename K27 = void_ , typename K28 = void_ , typename K29 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ , typename D20 = void_ , typename D21 = void_ , typename D22 = void_ , typename D23 = void_ , typename D24 = void_ , typename D25 = void_ , typename D26 = void_ , typename D27 = void_ , typename D28 = void_ , typename D29 = void_ + , typename Extra = void_ + > + struct make_map; + template <> + struct make_map<> + { + typedef map<> type; + }; + } + inline map<> + make_map() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct make_map + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + make_map(D0 const& _0) + { + return map::type> >( + fusion::make_pair(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp new file mode 100644 index 0000000000..94920d156a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map40.hpp @@ -0,0 +1,871 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ , typename K20 = void_ , typename K21 = void_ , typename K22 = void_ , typename K23 = void_ , typename K24 = void_ , typename K25 = void_ , typename K26 = void_ , typename K27 = void_ , typename K28 = void_ , typename K29 = void_ , typename K30 = void_ , typename K31 = void_ , typename K32 = void_ , typename K33 = void_ , typename K34 = void_ , typename K35 = void_ , typename K36 = void_ , typename K37 = void_ , typename K38 = void_ , typename K39 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ , typename D20 = void_ , typename D21 = void_ , typename D22 = void_ , typename D23 = void_ , typename D24 = void_ , typename D25 = void_ , typename D26 = void_ , typename D27 = void_ , typename D28 = void_ , typename D29 = void_ , typename D30 = void_ , typename D31 = void_ , typename D32 = void_ , typename D33 = void_ , typename D34 = void_ , typename D35 = void_ , typename D36 = void_ , typename D37 = void_ , typename D38 = void_ , typename D39 = void_ + , typename Extra = void_ + > + struct make_map; + template <> + struct make_map<> + { + typedef map<> type; + }; + } + inline map<> + make_map() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct make_map + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + make_map(D0 const& _0) + { + return map::type> >( + fusion::make_pair(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp new file mode 100644 index 0000000000..16dbcf75dd --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_map50.hpp @@ -0,0 +1,1081 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ , typename K20 = void_ , typename K21 = void_ , typename K22 = void_ , typename K23 = void_ , typename K24 = void_ , typename K25 = void_ , typename K26 = void_ , typename K27 = void_ , typename K28 = void_ , typename K29 = void_ , typename K30 = void_ , typename K31 = void_ , typename K32 = void_ , typename K33 = void_ , typename K34 = void_ , typename K35 = void_ , typename K36 = void_ , typename K37 = void_ , typename K38 = void_ , typename K39 = void_ , typename K40 = void_ , typename K41 = void_ , typename K42 = void_ , typename K43 = void_ , typename K44 = void_ , typename K45 = void_ , typename K46 = void_ , typename K47 = void_ , typename K48 = void_ , typename K49 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ , typename D20 = void_ , typename D21 = void_ , typename D22 = void_ , typename D23 = void_ , typename D24 = void_ , typename D25 = void_ , typename D26 = void_ , typename D27 = void_ , typename D28 = void_ , typename D29 = void_ , typename D30 = void_ , typename D31 = void_ , typename D32 = void_ , typename D33 = void_ , typename D34 = void_ , typename D35 = void_ , typename D36 = void_ , typename D37 = void_ , typename D38 = void_ , typename D39 = void_ , typename D40 = void_ , typename D41 = void_ , typename D42 = void_ , typename D43 = void_ , typename D44 = void_ , typename D45 = void_ , typename D46 = void_ , typename D47 = void_ , typename D48 = void_ , typename D49 = void_ + , typename Extra = void_ + > + struct make_map; + template <> + struct make_map<> + { + typedef map<> type; + }; + } + inline map<> + make_map() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct make_map + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + make_map(D0 const& _0) + { + return map::type> >( + fusion::make_pair(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43) , fusion::make_pair(_44)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43) , fusion::make_pair(_44) , fusion::make_pair(_45)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43) , fusion::make_pair(_44) , fusion::make_pair(_45) , fusion::make_pair(_46)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46 , D47 const& _47) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43) , fusion::make_pair(_44) , fusion::make_pair(_45) , fusion::make_pair(_46) , fusion::make_pair(_47)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> , fusion::pair< K48 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> , fusion::pair< K48 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46 , D47 const& _47 , D48 const& _48) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> , fusion::pair< K48 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43) , fusion::make_pair(_44) , fusion::make_pair(_45) , fusion::make_pair(_46) , fusion::make_pair(_47) , fusion::make_pair(_48)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49 + > + struct make_map + { + typedef map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> , fusion::pair< K48 , typename detail::as_fusion_element::type> , fusion::pair< K49 , typename detail::as_fusion_element::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49 + > + inline map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> , fusion::pair< K48 , typename detail::as_fusion_element::type> , fusion::pair< K49 , typename detail::as_fusion_element::type> > + make_map(D0 const& _0 , D1 const& _1 , D2 const& _2 , D3 const& _3 , D4 const& _4 , D5 const& _5 , D6 const& _6 , D7 const& _7 , D8 const& _8 , D9 const& _9 , D10 const& _10 , D11 const& _11 , D12 const& _12 , D13 const& _13 , D14 const& _14 , D15 const& _15 , D16 const& _16 , D17 const& _17 , D18 const& _18 , D19 const& _19 , D20 const& _20 , D21 const& _21 , D22 const& _22 , D23 const& _23 , D24 const& _24 , D25 const& _25 , D26 const& _26 , D27 const& _27 , D28 const& _28 , D29 const& _29 , D30 const& _30 , D31 const& _31 , D32 const& _32 , D33 const& _33 , D34 const& _34 , D35 const& _35 , D36 const& _36 , D37 const& _37 , D38 const& _38 , D39 const& _39 , D40 const& _40 , D41 const& _41 , D42 const& _42 , D43 const& _43 , D44 const& _44 , D45 const& _45 , D46 const& _46 , D47 const& _47 , D48 const& _48 , D49 const& _49) + { + return map::type> , fusion::pair< K1 , typename detail::as_fusion_element::type> , fusion::pair< K2 , typename detail::as_fusion_element::type> , fusion::pair< K3 , typename detail::as_fusion_element::type> , fusion::pair< K4 , typename detail::as_fusion_element::type> , fusion::pair< K5 , typename detail::as_fusion_element::type> , fusion::pair< K6 , typename detail::as_fusion_element::type> , fusion::pair< K7 , typename detail::as_fusion_element::type> , fusion::pair< K8 , typename detail::as_fusion_element::type> , fusion::pair< K9 , typename detail::as_fusion_element::type> , fusion::pair< K10 , typename detail::as_fusion_element::type> , fusion::pair< K11 , typename detail::as_fusion_element::type> , fusion::pair< K12 , typename detail::as_fusion_element::type> , fusion::pair< K13 , typename detail::as_fusion_element::type> , fusion::pair< K14 , typename detail::as_fusion_element::type> , fusion::pair< K15 , typename detail::as_fusion_element::type> , fusion::pair< K16 , typename detail::as_fusion_element::type> , fusion::pair< K17 , typename detail::as_fusion_element::type> , fusion::pair< K18 , typename detail::as_fusion_element::type> , fusion::pair< K19 , typename detail::as_fusion_element::type> , fusion::pair< K20 , typename detail::as_fusion_element::type> , fusion::pair< K21 , typename detail::as_fusion_element::type> , fusion::pair< K22 , typename detail::as_fusion_element::type> , fusion::pair< K23 , typename detail::as_fusion_element::type> , fusion::pair< K24 , typename detail::as_fusion_element::type> , fusion::pair< K25 , typename detail::as_fusion_element::type> , fusion::pair< K26 , typename detail::as_fusion_element::type> , fusion::pair< K27 , typename detail::as_fusion_element::type> , fusion::pair< K28 , typename detail::as_fusion_element::type> , fusion::pair< K29 , typename detail::as_fusion_element::type> , fusion::pair< K30 , typename detail::as_fusion_element::type> , fusion::pair< K31 , typename detail::as_fusion_element::type> , fusion::pair< K32 , typename detail::as_fusion_element::type> , fusion::pair< K33 , typename detail::as_fusion_element::type> , fusion::pair< K34 , typename detail::as_fusion_element::type> , fusion::pair< K35 , typename detail::as_fusion_element::type> , fusion::pair< K36 , typename detail::as_fusion_element::type> , fusion::pair< K37 , typename detail::as_fusion_element::type> , fusion::pair< K38 , typename detail::as_fusion_element::type> , fusion::pair< K39 , typename detail::as_fusion_element::type> , fusion::pair< K40 , typename detail::as_fusion_element::type> , fusion::pair< K41 , typename detail::as_fusion_element::type> , fusion::pair< K42 , typename detail::as_fusion_element::type> , fusion::pair< K43 , typename detail::as_fusion_element::type> , fusion::pair< K44 , typename detail::as_fusion_element::type> , fusion::pair< K45 , typename detail::as_fusion_element::type> , fusion::pair< K46 , typename detail::as_fusion_element::type> , fusion::pair< K47 , typename detail::as_fusion_element::type> , fusion::pair< K48 , typename detail::as_fusion_element::type> , fusion::pair< K49 , typename detail::as_fusion_element::type> >( + fusion::make_pair(_0) , fusion::make_pair(_1) , fusion::make_pair(_2) , fusion::make_pair(_3) , fusion::make_pair(_4) , fusion::make_pair(_5) , fusion::make_pair(_6) , fusion::make_pair(_7) , fusion::make_pair(_8) , fusion::make_pair(_9) , fusion::make_pair(_10) , fusion::make_pair(_11) , fusion::make_pair(_12) , fusion::make_pair(_13) , fusion::make_pair(_14) , fusion::make_pair(_15) , fusion::make_pair(_16) , fusion::make_pair(_17) , fusion::make_pair(_18) , fusion::make_pair(_19) , fusion::make_pair(_20) , fusion::make_pair(_21) , fusion::make_pair(_22) , fusion::make_pair(_23) , fusion::make_pair(_24) , fusion::make_pair(_25) , fusion::make_pair(_26) , fusion::make_pair(_27) , fusion::make_pair(_28) , fusion::make_pair(_29) , fusion::make_pair(_30) , fusion::make_pair(_31) , fusion::make_pair(_32) , fusion::make_pair(_33) , fusion::make_pair(_34) , fusion::make_pair(_35) , fusion::make_pair(_36) , fusion::make_pair(_37) , fusion::make_pair(_38) , fusion::make_pair(_39) , fusion::make_pair(_40) , fusion::make_pair(_41) , fusion::make_pair(_42) , fusion::make_pair(_43) , fusion::make_pair(_44) , fusion::make_pair(_45) , fusion::make_pair(_46) , fusion::make_pair(_47) , fusion::make_pair(_48) , fusion::make_pair(_49)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set.hpp new file mode 100644 index 0000000000..1a6937132d --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_SET_SIZE <= 10 +#include +#elif FUSION_MAX_SET_SIZE <= 20 +#include +#elif FUSION_MAX_SET_SIZE <= 30 +#include +#elif FUSION_MAX_SET_SIZE <= 40 +#include +#elif FUSION_MAX_SET_SIZE <= 50 +#include +#else +#error "FUSION_MAX_SET_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp new file mode 100644 index 0000000000..77c7b7f2fb --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set10.hpp @@ -0,0 +1,180 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct make_set; + template <> + struct make_set<> + { + typedef set<> type; + }; + } + inline set<> + make_set() + { + return set<>(); + } + namespace result_of + { + template + struct make_set + { + typedef set::type> type; + }; + } + template + inline set::type> + make_set(T0 const& _0) + { + return set::type>( + _0); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1) + { + return set::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp new file mode 100644 index 0000000000..e8c6c8d38f --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set20.hpp @@ -0,0 +1,330 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct make_set; + template <> + struct make_set<> + { + typedef set<> type; + }; + } + inline set<> + make_set() + { + return set<>(); + } + namespace result_of + { + template + struct make_set + { + typedef set::type> type; + }; + } + template + inline set::type> + make_set(T0 const& _0) + { + return set::type>( + _0); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1) + { + return set::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp new file mode 100644 index 0000000000..5afcc4e94a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set30.hpp @@ -0,0 +1,480 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct make_set; + template <> + struct make_set<> + { + typedef set<> type; + }; + } + inline set<> + make_set() + { + return set<>(); + } + namespace result_of + { + template + struct make_set + { + typedef set::type> type; + }; + } + template + inline set::type> + make_set(T0 const& _0) + { + return set::type>( + _0); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1) + { + return set::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp new file mode 100644 index 0000000000..1329452bfd --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set40.hpp @@ -0,0 +1,630 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct make_set; + template <> + struct make_set<> + { + typedef set<> type; + }; + } + inline set<> + make_set() + { + return set<>(); + } + namespace result_of + { + template + struct make_set + { + typedef set::type> type; + }; + } + template + inline set::type> + make_set(T0 const& _0) + { + return set::type>( + _0); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1) + { + return set::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp new file mode 100644 index 0000000000..b5cb4ace55 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_set50.hpp @@ -0,0 +1,780 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct make_set; + template <> + struct make_set<> + { + typedef set<> type; + }; + } + inline set<> + make_set() + { + return set<>(); + } + namespace result_of + { + template + struct make_set + { + typedef set::type> type; + }; + } + template + inline set::type> + make_set(T0 const& _0) + { + return set::type>( + _0); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1) + { + return set::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct make_set + { + typedef set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_set(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) + { + return set::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector.hpp new file mode 100644 index 0000000000..43e3db4d93 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp new file mode 100644 index 0000000000..51e2665f8a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp @@ -0,0 +1,180 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct make_vector; + template <> + struct make_vector<> + { + typedef vector0<> type; + }; + } + inline vector0<> + make_vector() + { + return vector0<>(); + } + namespace result_of + { + template + struct make_vector + { + typedef vector1::type> type; + }; + } + template + inline vector1::type> + make_vector(T0 const& _0) + { + return vector1::type>( + _0); + } + namespace result_of + { + template + struct make_vector + { + typedef vector2::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector2::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1) + { + return vector2::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_vector + { + typedef vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_vector + { + typedef vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_vector + { + typedef vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_vector + { + typedef vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_vector + { + typedef vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_vector + { + typedef vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_vector + { + typedef vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_vector + { + typedef vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp new file mode 100644 index 0000000000..745a7f1193 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp @@ -0,0 +1,330 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct make_vector; + template <> + struct make_vector<> + { + typedef vector0<> type; + }; + } + inline vector0<> + make_vector() + { + return vector0<>(); + } + namespace result_of + { + template + struct make_vector + { + typedef vector1::type> type; + }; + } + template + inline vector1::type> + make_vector(T0 const& _0) + { + return vector1::type>( + _0); + } + namespace result_of + { + template + struct make_vector + { + typedef vector2::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector2::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1) + { + return vector2::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_vector + { + typedef vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_vector + { + typedef vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_vector + { + typedef vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_vector + { + typedef vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_vector + { + typedef vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_vector + { + typedef vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_vector + { + typedef vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_vector + { + typedef vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_vector + { + typedef vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_vector + { + typedef vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_vector + { + typedef vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_vector + { + typedef vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_vector + { + typedef vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_vector + { + typedef vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_vector + { + typedef vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_vector + { + typedef vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_vector + { + typedef vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_vector + { + typedef vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp new file mode 100644 index 0000000000..c663ff198a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp @@ -0,0 +1,480 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct make_vector; + template <> + struct make_vector<> + { + typedef vector0<> type; + }; + } + inline vector0<> + make_vector() + { + return vector0<>(); + } + namespace result_of + { + template + struct make_vector + { + typedef vector1::type> type; + }; + } + template + inline vector1::type> + make_vector(T0 const& _0) + { + return vector1::type>( + _0); + } + namespace result_of + { + template + struct make_vector + { + typedef vector2::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector2::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1) + { + return vector2::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_vector + { + typedef vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_vector + { + typedef vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_vector + { + typedef vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_vector + { + typedef vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_vector + { + typedef vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_vector + { + typedef vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_vector + { + typedef vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_vector + { + typedef vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_vector + { + typedef vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_vector + { + typedef vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_vector + { + typedef vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_vector + { + typedef vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_vector + { + typedef vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_vector + { + typedef vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_vector + { + typedef vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_vector + { + typedef vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_vector + { + typedef vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_vector + { + typedef vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_vector + { + typedef vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_vector + { + typedef vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_vector + { + typedef vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_vector + { + typedef vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_vector + { + typedef vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_vector + { + typedef vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_vector + { + typedef vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_vector + { + typedef vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_vector + { + typedef vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_vector + { + typedef vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp new file mode 100644 index 0000000000..dc18e461c6 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp @@ -0,0 +1,630 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct make_vector; + template <> + struct make_vector<> + { + typedef vector0<> type; + }; + } + inline vector0<> + make_vector() + { + return vector0<>(); + } + namespace result_of + { + template + struct make_vector + { + typedef vector1::type> type; + }; + } + template + inline vector1::type> + make_vector(T0 const& _0) + { + return vector1::type>( + _0); + } + namespace result_of + { + template + struct make_vector + { + typedef vector2::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector2::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1) + { + return vector2::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_vector + { + typedef vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_vector + { + typedef vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_vector + { + typedef vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_vector + { + typedef vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_vector + { + typedef vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_vector + { + typedef vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_vector + { + typedef vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_vector + { + typedef vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_vector + { + typedef vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_vector + { + typedef vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_vector + { + typedef vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_vector + { + typedef vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_vector + { + typedef vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_vector + { + typedef vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_vector + { + typedef vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_vector + { + typedef vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_vector + { + typedef vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_vector + { + typedef vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_vector + { + typedef vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_vector + { + typedef vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_vector + { + typedef vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_vector + { + typedef vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_vector + { + typedef vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_vector + { + typedef vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_vector + { + typedef vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_vector + { + typedef vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_vector + { + typedef vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_vector + { + typedef vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_vector + { + typedef vector31::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector31::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return vector31::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_vector + { + typedef vector32::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector32::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return vector32::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_vector + { + typedef vector33::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector33::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return vector33::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_vector + { + typedef vector34::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector34::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return vector34::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_vector + { + typedef vector35::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector35::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return vector35::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_vector + { + typedef vector36::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector36::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return vector36::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_vector + { + typedef vector37::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector37::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return vector37::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_vector + { + typedef vector38::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector38::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return vector38::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_vector + { + typedef vector39::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector39::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return vector39::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_vector + { + typedef vector40::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector40::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return vector40::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp new file mode 100644 index 0000000000..3210541f65 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp @@ -0,0 +1,780 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct make_vector; + template <> + struct make_vector<> + { + typedef vector0<> type; + }; + } + inline vector0<> + make_vector() + { + return vector0<>(); + } + namespace result_of + { + template + struct make_vector + { + typedef vector1::type> type; + }; + } + template + inline vector1::type> + make_vector(T0 const& _0) + { + return vector1::type>( + _0); + } + namespace result_of + { + template + struct make_vector + { + typedef vector2::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector2::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1) + { + return vector2::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + namespace result_of + { + template + struct make_vector + { + typedef vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return vector3::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + namespace result_of + { + template + struct make_vector + { + typedef vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return vector4::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct make_vector + { + typedef vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return vector5::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct make_vector + { + typedef vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return vector6::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct make_vector + { + typedef vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return vector7::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct make_vector + { + typedef vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return vector8::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct make_vector + { + typedef vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return vector9::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct make_vector + { + typedef vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return vector10::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct make_vector + { + typedef vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return vector11::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct make_vector + { + typedef vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return vector12::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct make_vector + { + typedef vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return vector13::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct make_vector + { + typedef vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return vector14::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct make_vector + { + typedef vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return vector15::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct make_vector + { + typedef vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return vector16::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct make_vector + { + typedef vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return vector17::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct make_vector + { + typedef vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return vector18::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct make_vector + { + typedef vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return vector19::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct make_vector + { + typedef vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return vector20::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct make_vector + { + typedef vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return vector21::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct make_vector + { + typedef vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return vector22::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct make_vector + { + typedef vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return vector23::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct make_vector + { + typedef vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return vector24::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct make_vector + { + typedef vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return vector25::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct make_vector + { + typedef vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return vector26::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct make_vector + { + typedef vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return vector27::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct make_vector + { + typedef vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return vector28::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct make_vector + { + typedef vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return vector29::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct make_vector + { + typedef vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return vector30::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct make_vector + { + typedef vector31::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector31::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return vector31::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct make_vector + { + typedef vector32::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector32::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return vector32::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct make_vector + { + typedef vector33::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector33::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return vector33::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct make_vector + { + typedef vector34::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector34::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return vector34::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct make_vector + { + typedef vector35::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector35::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return vector35::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct make_vector + { + typedef vector36::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector36::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return vector36::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct make_vector + { + typedef vector37::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector37::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return vector37::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct make_vector + { + typedef vector38::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector38::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return vector38::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct make_vector + { + typedef vector39::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector39::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return vector39::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct make_vector + { + typedef vector40::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector40::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return vector40::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct make_vector + { + typedef vector41::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector41::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) + { + return vector41::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct make_vector + { + typedef vector42::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector42::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) + { + return vector42::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct make_vector + { + typedef vector43::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector43::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) + { + return vector43::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct make_vector + { + typedef vector44::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector44::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) + { + return vector44::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct make_vector + { + typedef vector45::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector45::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) + { + return vector45::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct make_vector + { + typedef vector46::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector46::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) + { + return vector46::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct make_vector + { + typedef vector47::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector47::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) + { + return vector47::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct make_vector + { + typedef vector48::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector48::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) + { + return vector48::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct make_vector + { + typedef vector49::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector49::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) + { + return vector49::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct make_vector + { + typedef vector50::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> type; + }; + } + template + inline vector50::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_vector(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) + { + return vector50::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie.hpp new file mode 100644 index 0000000000..d7480c2806 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_MAP_SIZE <= 10 +#include +#elif FUSION_MAX_MAP_SIZE <= 20 +#include +#elif FUSION_MAX_MAP_SIZE <= 30 +#include +#elif FUSION_MAX_MAP_SIZE <= 40 +#include +#elif FUSION_MAX_MAP_SIZE <= 50 +#include +#else +#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp new file mode 100644 index 0000000000..01b17a5abc --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp @@ -0,0 +1,241 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ + , typename Extra = void_ + > + struct map_tie; + template <> + struct map_tie<> + { + typedef map<> type; + }; + } + inline map<> + map_tie() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct map_tie + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + map_tie(D0 & _0) + { + return map::type> >( + fusion::pair_tie(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp new file mode 100644 index 0000000000..b40ba7de1a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp @@ -0,0 +1,451 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ + , typename Extra = void_ + > + struct map_tie; + template <> + struct map_tie<> + { + typedef map<> type; + }; + } + inline map<> + map_tie() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct map_tie + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + map_tie(D0 & _0) + { + return map::type> >( + fusion::pair_tie(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp new file mode 100644 index 0000000000..d7eb6dcaf8 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp @@ -0,0 +1,661 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ , typename K20 = void_ , typename K21 = void_ , typename K22 = void_ , typename K23 = void_ , typename K24 = void_ , typename K25 = void_ , typename K26 = void_ , typename K27 = void_ , typename K28 = void_ , typename K29 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ , typename D20 = void_ , typename D21 = void_ , typename D22 = void_ , typename D23 = void_ , typename D24 = void_ , typename D25 = void_ , typename D26 = void_ , typename D27 = void_ , typename D28 = void_ , typename D29 = void_ + , typename Extra = void_ + > + struct map_tie; + template <> + struct map_tie<> + { + typedef map<> type; + }; + } + inline map<> + map_tie() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct map_tie + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + map_tie(D0 & _0) + { + return map::type> >( + fusion::pair_tie(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp new file mode 100644 index 0000000000..fdda20a4eb --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp @@ -0,0 +1,871 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ , typename K20 = void_ , typename K21 = void_ , typename K22 = void_ , typename K23 = void_ , typename K24 = void_ , typename K25 = void_ , typename K26 = void_ , typename K27 = void_ , typename K28 = void_ , typename K29 = void_ , typename K30 = void_ , typename K31 = void_ , typename K32 = void_ , typename K33 = void_ , typename K34 = void_ , typename K35 = void_ , typename K36 = void_ , typename K37 = void_ , typename K38 = void_ , typename K39 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ , typename D20 = void_ , typename D21 = void_ , typename D22 = void_ , typename D23 = void_ , typename D24 = void_ , typename D25 = void_ , typename D26 = void_ , typename D27 = void_ , typename D28 = void_ , typename D29 = void_ , typename D30 = void_ , typename D31 = void_ , typename D32 = void_ , typename D33 = void_ , typename D34 = void_ , typename D35 = void_ , typename D36 = void_ , typename D37 = void_ , typename D38 = void_ , typename D39 = void_ + , typename Extra = void_ + > + struct map_tie; + template <> + struct map_tie<> + { + typedef map<> type; + }; + } + inline map<> + map_tie() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct map_tie + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + map_tie(D0 & _0) + { + return map::type> >( + fusion::pair_tie(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp new file mode 100644 index 0000000000..5e26932c33 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp @@ -0,0 +1,1081 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename K0 = void_ , typename K1 = void_ , typename K2 = void_ , typename K3 = void_ , typename K4 = void_ , typename K5 = void_ , typename K6 = void_ , typename K7 = void_ , typename K8 = void_ , typename K9 = void_ , typename K10 = void_ , typename K11 = void_ , typename K12 = void_ , typename K13 = void_ , typename K14 = void_ , typename K15 = void_ , typename K16 = void_ , typename K17 = void_ , typename K18 = void_ , typename K19 = void_ , typename K20 = void_ , typename K21 = void_ , typename K22 = void_ , typename K23 = void_ , typename K24 = void_ , typename K25 = void_ , typename K26 = void_ , typename K27 = void_ , typename K28 = void_ , typename K29 = void_ , typename K30 = void_ , typename K31 = void_ , typename K32 = void_ , typename K33 = void_ , typename K34 = void_ , typename K35 = void_ , typename K36 = void_ , typename K37 = void_ , typename K38 = void_ , typename K39 = void_ , typename K40 = void_ , typename K41 = void_ , typename K42 = void_ , typename K43 = void_ , typename K44 = void_ , typename K45 = void_ , typename K46 = void_ , typename K47 = void_ , typename K48 = void_ , typename K49 = void_ + , typename D0 = void_ , typename D1 = void_ , typename D2 = void_ , typename D3 = void_ , typename D4 = void_ , typename D5 = void_ , typename D6 = void_ , typename D7 = void_ , typename D8 = void_ , typename D9 = void_ , typename D10 = void_ , typename D11 = void_ , typename D12 = void_ , typename D13 = void_ , typename D14 = void_ , typename D15 = void_ , typename D16 = void_ , typename D17 = void_ , typename D18 = void_ , typename D19 = void_ , typename D20 = void_ , typename D21 = void_ , typename D22 = void_ , typename D23 = void_ , typename D24 = void_ , typename D25 = void_ , typename D26 = void_ , typename D27 = void_ , typename D28 = void_ , typename D29 = void_ , typename D30 = void_ , typename D31 = void_ , typename D32 = void_ , typename D33 = void_ , typename D34 = void_ , typename D35 = void_ , typename D36 = void_ , typename D37 = void_ , typename D38 = void_ , typename D39 = void_ , typename D40 = void_ , typename D41 = void_ , typename D42 = void_ , typename D43 = void_ , typename D44 = void_ , typename D45 = void_ , typename D46 = void_ , typename D47 = void_ , typename D48 = void_ , typename D49 = void_ + , typename Extra = void_ + > + struct map_tie; + template <> + struct map_tie<> + { + typedef map<> type; + }; + } + inline map<> + map_tie() + { + return map<>(); + } + namespace result_of + { + template < + typename K0 + , typename D0 + > + struct map_tie + { + typedef map::type> > type; + }; + } + template < + typename K0 + , typename D0 + > + inline map::type> > + map_tie(D0 & _0) + { + return map::type> >( + fusion::pair_tie(_0)); + } + namespace result_of + { + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 + , typename D0 , typename D1 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 + , typename D0 , typename D1 , typename D2 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 + , typename D0 , typename D1 , typename D2 , typename D3 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43) , fusion::pair_tie(_44)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43) , fusion::pair_tie(_44) , fusion::pair_tie(_45)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43) , fusion::pair_tie(_44) , fusion::pair_tie(_45) , fusion::pair_tie(_46)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46 , D47 & _47) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43) , fusion::pair_tie(_44) , fusion::pair_tie(_45) , fusion::pair_tie(_46) , fusion::pair_tie(_47)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> , fusion::pair< K48 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> , fusion::pair< K48 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46 , D47 & _47 , D48 & _48) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> , fusion::pair< K48 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43) , fusion::pair_tie(_44) , fusion::pair_tie(_45) , fusion::pair_tie(_46) , fusion::pair_tie(_47) , fusion::pair_tie(_48)); + } + namespace result_of + { + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49 + > + struct map_tie + { + typedef map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> , fusion::pair< K48 , typename add_reference::type> , fusion::pair< K49 , typename add_reference::type> > type; + }; + } + template < + typename K0 , typename K1 , typename K2 , typename K3 , typename K4 , typename K5 , typename K6 , typename K7 , typename K8 , typename K9 , typename K10 , typename K11 , typename K12 , typename K13 , typename K14 , typename K15 , typename K16 , typename K17 , typename K18 , typename K19 , typename K20 , typename K21 , typename K22 , typename K23 , typename K24 , typename K25 , typename K26 , typename K27 , typename K28 , typename K29 , typename K30 , typename K31 , typename K32 , typename K33 , typename K34 , typename K35 , typename K36 , typename K37 , typename K38 , typename K39 , typename K40 , typename K41 , typename K42 , typename K43 , typename K44 , typename K45 , typename K46 , typename K47 , typename K48 , typename K49 + , typename D0 , typename D1 , typename D2 , typename D3 , typename D4 , typename D5 , typename D6 , typename D7 , typename D8 , typename D9 , typename D10 , typename D11 , typename D12 , typename D13 , typename D14 , typename D15 , typename D16 , typename D17 , typename D18 , typename D19 , typename D20 , typename D21 , typename D22 , typename D23 , typename D24 , typename D25 , typename D26 , typename D27 , typename D28 , typename D29 , typename D30 , typename D31 , typename D32 , typename D33 , typename D34 , typename D35 , typename D36 , typename D37 , typename D38 , typename D39 , typename D40 , typename D41 , typename D42 , typename D43 , typename D44 , typename D45 , typename D46 , typename D47 , typename D48 , typename D49 + > + inline map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> , fusion::pair< K48 , typename add_reference::type> , fusion::pair< K49 , typename add_reference::type> > + map_tie(D0 & _0 , D1 & _1 , D2 & _2 , D3 & _3 , D4 & _4 , D5 & _5 , D6 & _6 , D7 & _7 , D8 & _8 , D9 & _9 , D10 & _10 , D11 & _11 , D12 & _12 , D13 & _13 , D14 & _14 , D15 & _15 , D16 & _16 , D17 & _17 , D18 & _18 , D19 & _19 , D20 & _20 , D21 & _21 , D22 & _22 , D23 & _23 , D24 & _24 , D25 & _25 , D26 & _26 , D27 & _27 , D28 & _28 , D29 & _29 , D30 & _30 , D31 & _31 , D32 & _32 , D33 & _33 , D34 & _34 , D35 & _35 , D36 & _36 , D37 & _37 , D38 & _38 , D39 & _39 , D40 & _40 , D41 & _41 , D42 & _42 , D43 & _43 , D44 & _44 , D45 & _45 , D46 & _46 , D47 & _47 , D48 & _48 , D49 & _49) + { + return map::type> , fusion::pair< K1 , typename add_reference::type> , fusion::pair< K2 , typename add_reference::type> , fusion::pair< K3 , typename add_reference::type> , fusion::pair< K4 , typename add_reference::type> , fusion::pair< K5 , typename add_reference::type> , fusion::pair< K6 , typename add_reference::type> , fusion::pair< K7 , typename add_reference::type> , fusion::pair< K8 , typename add_reference::type> , fusion::pair< K9 , typename add_reference::type> , fusion::pair< K10 , typename add_reference::type> , fusion::pair< K11 , typename add_reference::type> , fusion::pair< K12 , typename add_reference::type> , fusion::pair< K13 , typename add_reference::type> , fusion::pair< K14 , typename add_reference::type> , fusion::pair< K15 , typename add_reference::type> , fusion::pair< K16 , typename add_reference::type> , fusion::pair< K17 , typename add_reference::type> , fusion::pair< K18 , typename add_reference::type> , fusion::pair< K19 , typename add_reference::type> , fusion::pair< K20 , typename add_reference::type> , fusion::pair< K21 , typename add_reference::type> , fusion::pair< K22 , typename add_reference::type> , fusion::pair< K23 , typename add_reference::type> , fusion::pair< K24 , typename add_reference::type> , fusion::pair< K25 , typename add_reference::type> , fusion::pair< K26 , typename add_reference::type> , fusion::pair< K27 , typename add_reference::type> , fusion::pair< K28 , typename add_reference::type> , fusion::pair< K29 , typename add_reference::type> , fusion::pair< K30 , typename add_reference::type> , fusion::pair< K31 , typename add_reference::type> , fusion::pair< K32 , typename add_reference::type> , fusion::pair< K33 , typename add_reference::type> , fusion::pair< K34 , typename add_reference::type> , fusion::pair< K35 , typename add_reference::type> , fusion::pair< K36 , typename add_reference::type> , fusion::pair< K37 , typename add_reference::type> , fusion::pair< K38 , typename add_reference::type> , fusion::pair< K39 , typename add_reference::type> , fusion::pair< K40 , typename add_reference::type> , fusion::pair< K41 , typename add_reference::type> , fusion::pair< K42 , typename add_reference::type> , fusion::pair< K43 , typename add_reference::type> , fusion::pair< K44 , typename add_reference::type> , fusion::pair< K45 , typename add_reference::type> , fusion::pair< K46 , typename add_reference::type> , fusion::pair< K47 , typename add_reference::type> , fusion::pair< K48 , typename add_reference::type> , fusion::pair< K49 , typename add_reference::type> >( + fusion::pair_tie(_0) , fusion::pair_tie(_1) , fusion::pair_tie(_2) , fusion::pair_tie(_3) , fusion::pair_tie(_4) , fusion::pair_tie(_5) , fusion::pair_tie(_6) , fusion::pair_tie(_7) , fusion::pair_tie(_8) , fusion::pair_tie(_9) , fusion::pair_tie(_10) , fusion::pair_tie(_11) , fusion::pair_tie(_12) , fusion::pair_tie(_13) , fusion::pair_tie(_14) , fusion::pair_tie(_15) , fusion::pair_tie(_16) , fusion::pair_tie(_17) , fusion::pair_tie(_18) , fusion::pair_tie(_19) , fusion::pair_tie(_20) , fusion::pair_tie(_21) , fusion::pair_tie(_22) , fusion::pair_tie(_23) , fusion::pair_tie(_24) , fusion::pair_tie(_25) , fusion::pair_tie(_26) , fusion::pair_tie(_27) , fusion::pair_tie(_28) , fusion::pair_tie(_29) , fusion::pair_tie(_30) , fusion::pair_tie(_31) , fusion::pair_tie(_32) , fusion::pair_tie(_33) , fusion::pair_tie(_34) , fusion::pair_tie(_35) , fusion::pair_tie(_36) , fusion::pair_tie(_37) , fusion::pair_tie(_38) , fusion::pair_tie(_39) , fusion::pair_tie(_40) , fusion::pair_tie(_41) , fusion::pair_tie(_42) , fusion::pair_tie(_43) , fusion::pair_tie(_44) , fusion::pair_tie(_45) , fusion::pair_tie(_46) , fusion::pair_tie(_47) , fusion::pair_tie(_48) , fusion::pair_tie(_49)); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp new file mode 100644 index 0000000000..2db73200a3 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp new file mode 100644 index 0000000000..9e463b5a77 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp @@ -0,0 +1,170 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + , typename Extra = void_ + > + struct vector_tie; + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0) + { + return vector( + _0); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1) + { + return vector( + _0 , _1); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return vector( + _0 , _1 , _2); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return vector( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return vector( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp new file mode 100644 index 0000000000..20d6a5b9ac --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp @@ -0,0 +1,320 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + , typename Extra = void_ + > + struct vector_tie; + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0) + { + return vector( + _0); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1) + { + return vector( + _0 , _1); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return vector( + _0 , _1 , _2); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return vector( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return vector( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp new file mode 100644 index 0000000000..dbfcd55300 --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp @@ -0,0 +1,470 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + , typename Extra = void_ + > + struct vector_tie; + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0) + { + return vector( + _0); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1) + { + return vector( + _0 , _1); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return vector( + _0 , _1 , _2); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return vector( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return vector( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp new file mode 100644 index 0000000000..ff3ec3575a --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp @@ -0,0 +1,620 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + , typename Extra = void_ + > + struct vector_tie; + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0) + { + return vector( + _0); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1) + { + return vector( + _0 , _1); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return vector( + _0 , _1 , _2); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return vector( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return vector( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp new file mode 100644 index 0000000000..60814c395c --- /dev/null +++ b/3party/boost/boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp @@ -0,0 +1,770 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + namespace result_of + { + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + , typename Extra = void_ + > + struct vector_tie; + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0) + { + return vector( + _0); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1) + { + return vector( + _0 , _1); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return vector( + _0 , _1 , _2); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return vector( + _0 , _1 , _2 , _3); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return vector( + _0 , _1 , _2 , _3 , _4); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + namespace result_of + { + template + struct vector_tie + { + typedef vector type; + }; + } + template + inline vector + vector_tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49) + { + return vector( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/container/generation/ignore.hpp b/3party/boost/boost/fusion/container/generation/ignore.hpp index 6a416c6b5c..8e1b00c947 100644 --- a/3party/boost/boost/fusion/container/generation/ignore.hpp +++ b/3party/boost/boost/fusion/container/generation/ignore.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2001 Doug Gregor Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/generation/list_tie.hpp b/3party/boost/boost/fusion/container/generation/list_tie.hpp index 44691e029f..2a663908c5 100644 --- a/3party/boost/boost/fusion/container/generation/list_tie.hpp +++ b/3party/boost/boost/fusion/container/generation/list_tie.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -16,10 +16,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/list_tie" FUSION_MAX_LIST_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -36,11 +56,17 @@ namespace boost { namespace fusion #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_LIST_SIZE) #include BOOST_PP_ITERATE() - + #undef BOOST_FUSION_REF }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/make_cons.hpp b/3party/boost/boost/fusion/container/generation/make_cons.hpp index 47a2f461a7..dcb606dc9d 100644 --- a/3party/boost/boost/fusion/container/generation/make_cons.hpp +++ b/3party/boost/boost/fusion/container/generation/make_cons.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/generation/make_deque.hpp b/3party/boost/boost/fusion/container/generation/make_deque.hpp index 90d146e99a..fdc7dce73f 100644 --- a/3party/boost/boost/fusion/container/generation/make_deque.hpp +++ b/3party/boost/boost/fusion/container/generation/make_deque.hpp @@ -1,14 +1,14 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -23,10 +23,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_deque" FUSION_MAX_DEQUE_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -35,14 +55,14 @@ namespace boost { namespace fusion , typename Extra = void_ > struct make_deque; - + template <> struct make_deque<> { typedef deque<> type; }; } - + inline deque<> make_deque() { @@ -60,6 +80,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/make_list.hpp b/3party/boost/boost/fusion/container/generation/make_list.hpp index b4cfd0126e..1270839ef6 100644 --- a/3party/boost/boost/fusion/container/generation/make_list.hpp +++ b/3party/boost/boost/fusion/container/generation/make_list.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -16,10 +16,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_list" FUSION_MAX_LIST_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -28,14 +48,14 @@ namespace boost { namespace fusion , typename Extra = void_ > struct make_list; - + template <> struct make_list<> { typedef list<> type; }; } - + inline list<> make_list() { @@ -53,6 +73,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/make_map.hpp b/3party/boost/boost/fusion/container/generation/make_map.hpp index 865d5a2013..08938d4c3c 100644 --- a/3party/boost/boost/fusion/container/generation/make_map.hpp +++ b/3party/boost/boost/fusion/container/generation/make_map.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -17,10 +17,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_map" FUSION_MAX_MAP_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -31,14 +51,14 @@ namespace boost { namespace fusion , typename Extra = void_ > struct make_map; - + template <> struct make_map<> { typedef map<> type; }; } - + inline map<> make_map() { @@ -62,6 +82,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/make_set.hpp b/3party/boost/boost/fusion/container/generation/make_set.hpp index 52aa952dc5..229f7d0dfb 100644 --- a/3party/boost/boost/fusion/container/generation/make_set.hpp +++ b/3party/boost/boost/fusion/container/generation/make_set.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -17,10 +17,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_set" FUSION_MAX_SET_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -29,14 +49,14 @@ namespace boost { namespace fusion , typename Extra = void_ > struct make_set; - + template <> struct make_set<> { typedef set<> type; }; } - + inline set<> make_set() { @@ -55,6 +75,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/make_vector.hpp b/3party/boost/boost/fusion/container/generation/make_vector.hpp index 868ad0ca7a..a6fd8323d0 100644 --- a/3party/boost/boost/fusion/container/generation/make_vector.hpp +++ b/3party/boost/boost/fusion/container/generation/make_vector.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -16,6 +16,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_vector" FUSION_MAX_VECTOR_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -53,6 +73,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/map_tie.hpp b/3party/boost/boost/fusion/container/generation/map_tie.hpp index 39d1e94520..26fc2dfa82 100644 --- a/3party/boost/boost/fusion/container/generation/map_tie.hpp +++ b/3party/boost/boost/fusion/container/generation/map_tie.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -20,10 +20,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map_tie" FUSION_MAX_MAP_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -34,14 +54,14 @@ namespace boost { namespace fusion , typename Extra = void_ > struct map_tie; - + template <> struct map_tie<> { typedef map<> type; }; } - + inline map<> map_tie() { @@ -65,6 +85,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/generation/pair_tie.hpp b/3party/boost/boost/fusion/container/generation/pair_tie.hpp index 09437a2659..0f740a129e 100644 --- a/3party/boost/boost/fusion/container/generation/pair_tie.hpp +++ b/3party/boost/boost/fusion/container/generation/pair_tie.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/generation/vector_tie.hpp b/3party/boost/boost/fusion/container/generation/vector_tie.hpp index 7f7aaba31d..919b4f1e66 100644 --- a/3party/boost/boost/fusion/container/generation/vector_tie.hpp +++ b/3party/boost/boost/fusion/container/generation/vector_tie.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -16,10 +16,30 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector_tie" FUSION_MAX_VECTOR_SIZE_STR".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; - + namespace result_of { template < @@ -35,11 +55,16 @@ namespace boost { namespace fusion #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() - -#undef BOOST_FUSION_REF +#undef BOOST_FUSION_REF }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/list.hpp b/3party/boost/boost/fusion/container/list.hpp index 8a0d645630..3e8c4d3e0b 100644 --- a/3party/boost/boost/fusion/container/list.hpp +++ b/3party/boost/boost/fusion/container/list.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/list/cons.hpp b/3party/boost/boost/fusion/container/list/cons.hpp index e274561667..666b5367b6 100644 --- a/3party/boost/boost/fusion/container/list/cons.hpp +++ b/3party/boost/boost/fusion/container/list/cons.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -8,6 +8,7 @@ #if !defined(FUSION_CONS_07172005_0843) #define FUSION_CONS_07172005_0843 +#include #include #include #include @@ -55,7 +56,7 @@ namespace boost { namespace fusion } }; - template + template struct cons : sequence_base > { typedef mpl::int_ size; @@ -87,7 +88,7 @@ namespace boost { namespace fusion template cons( Sequence const& seq - , typename disable_if< + , typename boost::disable_if< mpl::or_< is_convertible // use copy ctor instead , is_convertible // use copy to car instead @@ -118,7 +119,7 @@ namespace boost { namespace fusion } template - typename disable_if, cons&>::type + typename boost::disable_if, cons&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type Iterator; diff --git a/3party/boost/boost/fusion/container/list/cons_fwd.hpp b/3party/boost/boost/fusion/container/list/cons_fwd.hpp new file mode 100644 index 0000000000..80bb0443c8 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/cons_fwd.hpp @@ -0,0 +1,20 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2005 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_CONS_FWD_HPP_INCLUDED) +#define BOOST_FUSION_CONS_FWD_HPP_INCLUDED + +namespace boost { namespace fusion +{ + struct nil; + + template + struct cons; +}} + +#endif + diff --git a/3party/boost/boost/fusion/container/list/cons_iterator.hpp b/3party/boost/boost/fusion/container/list/cons_iterator.hpp index 1eff153560..bc4fa0948c 100644 --- a/3party/boost/boost/fusion/container/list/cons_iterator.hpp +++ b/3party/boost/boost/fusion/container/list/cons_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/convert.hpp b/3party/boost/boost/fusion/container/list/convert.hpp index 418158cfaa..f356d7e0a1 100644 --- a/3party/boost/boost/fusion/container/list/convert.hpp +++ b/3party/boost/boost/fusion/container/list/convert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/list/detail/at_impl.hpp b/3party/boost/boost/fusion/container/list/detail/at_impl.hpp index 4dee15dcda..757463928a 100644 --- a/3party/boost/boost/fusion/container/list/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include namespace boost { namespace fusion @@ -93,15 +93,15 @@ namespace boost { namespace fusion template struct apply { - typedef detail::cons_deref< - typename detail::cons_advance::type> + typedef typename detail::cons_deref< + typename detail::cons_advance::type>::type element; typedef typename - mpl::eval_if< + mpl::if_< is_const - , detail::cref_result - , detail::ref_result + , typename detail::cref_result::type + , typename detail::ref_result::type >::type type; diff --git a/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp index a22c9a3d7f..571e681111 100644 --- a/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/detail/build_cons.hpp b/3party/boost/boost/fusion/container/list/detail/build_cons.hpp index 8e6276e6f6..ef4865227f 100644 --- a/3party/boost/boost/fusion/container/list/detail/build_cons.hpp +++ b/3party/boost/boost/fusion/container/list/detail/build_cons.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -48,7 +48,7 @@ namespace boost { namespace fusion { namespace detail static type call(First const& f, Last const& l) { - typename result_of::deref::type v = *f; + typename result_of::value_of::type v = *f; return type(v, next_build_cons::call(fusion::next(f), l)); } }; diff --git a/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp index cfe7a1dfa4..19e5fc2f5f 100644 --- a/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/convert_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp index 5292dced84..a5f75eaeac 100644 --- a/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/detail/end_impl.hpp b/3party/boost/boost/fusion/container/list/detail/end_impl.hpp index 03b5e21d86..3792250c05 100644 --- a/3party/boost/boost/fusion/container/list/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp index 1192588009..a4d5929913 100644 --- a/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/equal_to_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp b/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp index 39471809f8..05edc4fe6c 100644 --- a/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/list/detail/list_forward_ctor.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp b/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp index 8e6d6912be..4a7dbb8306 100644 --- a/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp +++ b/3party/boost/boost/fusion/container/list/detail/list_to_cons.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_LIST_TO_CONS_07172005_1041) @@ -22,6 +22,26 @@ namespace boost { namespace fusion struct void_; }} +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/list_to_cons" FUSION_MAX_LIST_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { namespace detail { template @@ -32,9 +52,9 @@ namespace boost { namespace fusion { namespace detail BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_LIST_SIZE, T), void_> tail_list_to_cons; typedef typename tail_list_to_cons::type tail_type; - + typedef cons type; - + #include }; @@ -42,8 +62,14 @@ namespace boost { namespace fusion { namespace detail struct list_to_cons { typedef nil type; - }; + }; }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #undef FUSION_VOID #endif diff --git a/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp b/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp index 069f0598fb..4e4c11a02a 100644 --- a/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp +++ b/3party/boost/boost/fusion/container/list/detail/list_to_cons_call.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/list/detail/next_impl.hpp b/3party/boost/boost/fusion/container/list/detail/next_impl.hpp index dafa83cc8c..71006e5bb6 100644 --- a/3party/boost/boost/fusion/container/list/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list.hpp new file mode 100644 index 0000000000..315ffcf7ee --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_LIST_SIZE <= 10 +#include +#elif FUSION_MAX_LIST_SIZE <= 20 +#include +#elif FUSION_MAX_LIST_SIZE <= 30 +#include +#elif FUSION_MAX_LIST_SIZE <= 40 +#include +#elif FUSION_MAX_LIST_SIZE <= 50 +#include +#else +#error "FUSION_MAX_LIST_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp new file mode 100644 index 0000000000..e233b46d44 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list10.hpp @@ -0,0 +1,84 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct nil; + struct void_; + template + struct list + : detail::list_to_cons::type + { + private: + typedef + detail::list_to_cons + list_to_cons; + public: + typedef typename list_to_cons::type inherited_type; + list() + : inherited_type() {} + template + list(list const& rhs) + : inherited_type(rhs) {} + template + list(Sequence const& rhs) + : inherited_type(rhs) {} + + + + + + + + explicit + list(typename detail::call_param::type _0) + : inherited_type(list_to_cons::call(_0)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : inherited_type(list_to_cons::call(_0 , _1)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : inherited_type(list_to_cons::call(_0 , _1 , _2)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)) + {} + template + list& + operator=(list const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + template + list& + operator=(T const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list10_fwd.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list10_fwd.hpp new file mode 100644 index 0000000000..f513a99194 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list10_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + > + struct list; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp new file mode 100644 index 0000000000..405681a161 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list20.hpp @@ -0,0 +1,114 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct nil; + struct void_; + template + struct list + : detail::list_to_cons::type + { + private: + typedef + detail::list_to_cons + list_to_cons; + public: + typedef typename list_to_cons::type inherited_type; + list() + : inherited_type() {} + template + list(list const& rhs) + : inherited_type(rhs) {} + template + list(Sequence const& rhs) + : inherited_type(rhs) {} + + + + + + + + explicit + list(typename detail::call_param::type _0) + : inherited_type(list_to_cons::call(_0)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : inherited_type(list_to_cons::call(_0 , _1)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : inherited_type(list_to_cons::call(_0 , _1 , _2)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)) + {} + template + list& + operator=(list const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + template + list& + operator=(T const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list20_fwd.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list20_fwd.hpp new file mode 100644 index 0000000000..2eedc8b293 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list20_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + > + struct list; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp new file mode 100644 index 0000000000..841295ef4b --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list30.hpp @@ -0,0 +1,144 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct nil; + struct void_; + template + struct list + : detail::list_to_cons::type + { + private: + typedef + detail::list_to_cons + list_to_cons; + public: + typedef typename list_to_cons::type inherited_type; + list() + : inherited_type() {} + template + list(list const& rhs) + : inherited_type(rhs) {} + template + list(Sequence const& rhs) + : inherited_type(rhs) {} + + + + + + + + explicit + list(typename detail::call_param::type _0) + : inherited_type(list_to_cons::call(_0)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : inherited_type(list_to_cons::call(_0 , _1)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : inherited_type(list_to_cons::call(_0 , _1 , _2)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29)) + {} + template + list& + operator=(list const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + template + list& + operator=(T const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list30_fwd.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list30_fwd.hpp new file mode 100644 index 0000000000..32bfc606f7 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list30_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + > + struct list; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp new file mode 100644 index 0000000000..c486f6b846 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list40.hpp @@ -0,0 +1,174 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct nil; + struct void_; + template + struct list + : detail::list_to_cons::type + { + private: + typedef + detail::list_to_cons + list_to_cons; + public: + typedef typename list_to_cons::type inherited_type; + list() + : inherited_type() {} + template + list(list const& rhs) + : inherited_type(rhs) {} + template + list(Sequence const& rhs) + : inherited_type(rhs) {} + + + + + + + + explicit + list(typename detail::call_param::type _0) + : inherited_type(list_to_cons::call(_0)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : inherited_type(list_to_cons::call(_0 , _1)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : inherited_type(list_to_cons::call(_0 , _1 , _2)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39)) + {} + template + list& + operator=(list const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + template + list& + operator=(T const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list40_fwd.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list40_fwd.hpp new file mode 100644 index 0000000000..5d0da6df4b --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list40_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + > + struct list; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp new file mode 100644 index 0000000000..21264094d5 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list50.hpp @@ -0,0 +1,204 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct nil; + struct void_; + template + struct list + : detail::list_to_cons::type + { + private: + typedef + detail::list_to_cons + list_to_cons; + public: + typedef typename list_to_cons::type inherited_type; + list() + : inherited_type() {} + template + list(list const& rhs) + : inherited_type(rhs) {} + template + list(Sequence const& rhs) + : inherited_type(rhs) {} + + + + + + + + explicit + list(typename detail::call_param::type _0) + : inherited_type(list_to_cons::call(_0)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : inherited_type(list_to_cons::call(_0 , _1)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : inherited_type(list_to_cons::call(_0 , _1 , _2)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48)) + {} + list(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + : inherited_type(list_to_cons::call(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49)) + {} + template + list& + operator=(list const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + template + list& + operator=(T const& rhs) + { + inherited_type::operator=(rhs); + return *this; + } + }; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list50_fwd.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list50_fwd.hpp new file mode 100644 index 0000000000..2b3ae66cb6 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list50_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + > + struct list; +}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_fwd.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_fwd.hpp new file mode 100644 index 0000000000..b9be34752f --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_fwd.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_LIST_SIZE <= 10 +#include +#elif FUSION_MAX_LIST_SIZE <= 20 +#include +#elif FUSION_MAX_LIST_SIZE <= 30 +#include +#elif FUSION_MAX_LIST_SIZE <= 40 +#include +#elif FUSION_MAX_LIST_SIZE <= 50 +#include +#else +#error "FUSION_MAX_LIST_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons.hpp new file mode 100644 index 0000000000..0326bef1e5 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_LIST_SIZE <= 10 +#include +#elif FUSION_MAX_LIST_SIZE <= 20 +#include +#elif FUSION_MAX_LIST_SIZE <= 30 +#include +#elif FUSION_MAX_LIST_SIZE <= 40 +#include +#elif FUSION_MAX_LIST_SIZE <= 50 +#include +#else +#error "FUSION_MAX_LIST_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp new file mode 100644 index 0000000000..a0f01f515d --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp @@ -0,0 +1,86 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct list_to_cons + { + typedef T0 head_type; + typedef list_to_cons< + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9, void_> + tail_list_to_cons; + typedef typename tail_list_to_cons::type tail_type; + typedef cons type; + static type + call(typename detail::call_param::type _0) + { + return type(_0 + ); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1) + { + return type(_0 + , tail_list_to_cons::call(_1)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)); + } + }; + template <> + struct list_to_cons + { + typedef nil type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp new file mode 100644 index 0000000000..b90b7a76f1 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp @@ -0,0 +1,146 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct list_to_cons + { + typedef T0 head_type; + typedef list_to_cons< + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19, void_> + tail_list_to_cons; + typedef typename tail_list_to_cons::type tail_type; + typedef cons type; + static type + call(typename detail::call_param::type _0) + { + return type(_0 + ); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1) + { + return type(_0 + , tail_list_to_cons::call(_1)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)); + } + }; + template <> + struct list_to_cons + { + typedef nil type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp new file mode 100644 index 0000000000..8b8a046d35 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp @@ -0,0 +1,206 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct list_to_cons + { + typedef T0 head_type; + typedef list_to_cons< + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29, void_> + tail_list_to_cons; + typedef typename tail_list_to_cons::type tail_type; + typedef cons type; + static type + call(typename detail::call_param::type _0) + { + return type(_0 + ); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1) + { + return type(_0 + , tail_list_to_cons::call(_1)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29)); + } + }; + template <> + struct list_to_cons + { + typedef nil type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp new file mode 100644 index 0000000000..a435c02109 --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp @@ -0,0 +1,266 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct list_to_cons + { + typedef T0 head_type; + typedef list_to_cons< + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39, void_> + tail_list_to_cons; + typedef typename tail_list_to_cons::type tail_type; + typedef cons type; + static type + call(typename detail::call_param::type _0) + { + return type(_0 + ); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1) + { + return type(_0 + , tail_list_to_cons::call(_1)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39)); + } + }; + template <> + struct list_to_cons + { + typedef nil type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp new file mode 100644 index 0000000000..7837e9c23b --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp @@ -0,0 +1,326 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct list_to_cons + { + typedef T0 head_type; + typedef list_to_cons< + T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49, void_> + tail_list_to_cons; + typedef typename tail_list_to_cons::type tail_type; + typedef cons type; + static type + call(typename detail::call_param::type _0) + { + return type(_0 + ); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1) + { + return type(_0 + , tail_list_to_cons::call(_1)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48)); + } + static type + call(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + { + return type(_0 + , tail_list_to_cons::call(_1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49)); + } + }; + template <> + struct list_to_cons + { + typedef nil type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp b/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp new file mode 100644 index 0000000000..59178e84bf --- /dev/null +++ b/3party/boost/boost/fusion/container/list/detail/reverse_cons.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED) +#define BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED + +#include + +namespace boost { namespace fusion { namespace detail +{ + //////////////////////////////////////////////////////////////////////////// + template + struct reverse_cons; + + template + struct reverse_cons, State> + { + typedef reverse_cons > impl; + typedef typename impl::type type; + + static type call(cons const &cons, State const &state = State()) + { + typedef fusion::cons cdr_type; + return impl::call(cons.cdr, cdr_type(cons.car, state)); + } + }; + + template + struct reverse_cons + { + typedef State type; + + static State const &call(nil const &, State const &state = State()) + { + return state; + } + }; +}}} + +#endif diff --git a/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp index 5f0ff1663b..353f8d5bbd 100644 --- a/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/list/detail/value_of_impl.hpp b/3party/boost/boost/fusion/container/list/detail/value_of_impl.hpp index f8175c6d4d..daabe4110e 100644 --- a/3party/boost/boost/fusion/container/list/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/container/list/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005 Eric Niebler Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/list/limits.hpp b/3party/boost/boost/fusion/container/list/limits.hpp index 20ff6dd2e0..1d545ba044 100644 --- a/3party/boost/boost/fusion/container/list/limits.hpp +++ b/3party/boost/boost/fusion/container/list/limits.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_LIST_LIMITS_07172005_0112) @@ -16,4 +16,6 @@ # endif #endif +#define FUSION_MAX_LIST_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_LIST_SIZE)) + #endif diff --git a/3party/boost/boost/fusion/container/list/list.hpp b/3party/boost/boost/fusion/container/list/list.hpp index 7516df48a3..45e2f6376d 100644 --- a/3party/boost/boost/fusion/container/list/list.hpp +++ b/3party/boost/boost/fusion/container/list/list.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_LIST_07172005_1153) @@ -10,17 +10,37 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/list" FUSION_MAX_LIST_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct nil; struct void_; template - struct list + struct list : detail::list_to_cons::type { private: - typedef + typedef detail::list_to_cons list_to_cons; @@ -65,4 +85,10 @@ namespace boost { namespace fusion }; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/list/list_fwd.hpp b/3party/boost/boost/fusion/container/list/list_fwd.hpp index 90c088b476..a142689227 100644 --- a/3party/boost/boost/fusion/container/list/list_fwd.hpp +++ b/3party/boost/boost/fusion/container/list/list_fwd.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_LIST_FORWARD_07172005_0224) @@ -10,6 +10,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/list" FUSION_MAX_LIST_SIZE_STR "_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -21,4 +41,10 @@ namespace boost { namespace fusion struct list; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/map.hpp b/3party/boost/boost/fusion/container/map.hpp index 695183119f..b9e8cd2c0f 100644 --- a/3party/boost/boost/fusion/container/map.hpp +++ b/3party/boost/boost/fusion/container/map.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/map/convert.hpp b/3party/boost/boost/fusion/container/map/convert.hpp index f174da58e9..5bb6fc9dde 100644 --- a/3party/boost/boost/fusion/container/map/convert.hpp +++ b/3party/boost/boost/fusion/container/map/convert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/map/detail/as_map.hpp b/3party/boost/boost/fusion/container/map/detail/as_map.hpp index 326877f9db..b1a4d09f1f 100644 --- a/3party/boost/boost/fusion/container/map/detail/as_map.hpp +++ b/3party/boost/boost/fusion/container/map/detail/as_map.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -41,7 +41,30 @@ namespace boost { namespace fusion { namespace detail return map<>(); } }; +}}} +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_map" FUSION_MAX_MAP_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { namespace detail +{ #define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \ typedef typename fusion::result_of::next::type \ BOOST_PP_CAT(I, BOOST_PP_INC(n)); @@ -64,6 +87,12 @@ namespace boost { namespace fusion { namespace detail }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/map/detail/at_impl.hpp b/3party/boost/boost/fusion/container/map/detail/at_impl.hpp new file mode 100644 index 0000000000..025c1724a1 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/at_impl.hpp @@ -0,0 +1,61 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Brandon Kohn + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP) +#define BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP + +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct map_tag; + + namespace extension + { + template + struct at_impl; + + template <> + struct at_impl + { + template + struct apply + { + typedef typename + mpl::at::type + element; + typedef typename detail::ref_result::type type; + + static type + call(Sequence& m) + { + return m.get_data().at_impl(N()); + } + }; + + template + struct apply + { + typedef typename + mpl::at::type + element; + typedef typename detail::cref_result::type type; + + static type + call(Sequence const& m) + { + return m.get_data().at_impl(N()); + } + }; + }; + } +}} + +#endif //BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP diff --git a/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp index 063932a80d..2d0f854be7 100644 --- a/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/container/map/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp index aedd3e3d7e..c4b9389da4 100644 --- a/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp +++ b/3party/boost/boost/fusion/container/map/detail/convert_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp b/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp index 9943171a54..8304c898ee 100644 --- a/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp +++ b/3party/boost/boost/fusion/container/map/detail/deref_data_impl.hpp @@ -12,8 +12,7 @@ #include #include #include -#include -#include +#include namespace boost { namespace fusion { namespace extension { @@ -29,17 +28,17 @@ namespace boost { namespace fusion { namespace extension typedef typename result_of::value_of::type::second_type data; typedef typename - mpl::eval_if< + mpl::if_< is_const - , detail::cref_result > - , detail::ref_result > + , typename detail::cref_result::type + , typename detail::ref_result::type >::type type; static type call(It const& it) { - return deref(it).second; + return fusion::deref(it).second; } }; }; diff --git a/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp index 359a5dc07f..725477bdd1 100644 --- a/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/container/map/detail/deref_impl.hpp @@ -36,7 +36,7 @@ namespace boost { namespace fusion { namespace extension static type call(It const& it) { - return at(it.seq->get_data()); + return fusion::at(it.seq->get_data()); } }; }; diff --git a/3party/boost/boost/fusion/container/map/detail/end_impl.hpp b/3party/boost/boost/fusion/container/map/detail/end_impl.hpp index 0e30de8c00..1375b7af0e 100644 --- a/3party/boost/boost/fusion/container/map/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/container/map/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp b/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp index c35168bac9..c0f983c4d2 100644 --- a/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/map/detail/map_forward_ctor.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp new file mode 100644 index 0000000000..47eb0e4c88 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_MAP_SIZE <= 10 +#include +#elif FUSION_MAX_MAP_SIZE <= 20 +#include +#elif FUSION_MAX_MAP_SIZE <= 30 +#include +#elif FUSION_MAX_MAP_SIZE <= 40 +#include +#elif FUSION_MAX_MAP_SIZE <= 50 +#include +#else +#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp new file mode 100644 index 0000000000..98dae25bcc --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map10.hpp @@ -0,0 +1,211 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_map<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_map<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_map<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_map<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_map<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_map<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_map<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_map<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_map<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_map<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp new file mode 100644 index 0000000000..2907ab2794 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map20.hpp @@ -0,0 +1,411 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_map<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_map<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_map<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_map<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_map<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_map<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_map<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_map<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_map<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_map<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_map<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_map<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_map<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_map<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_map<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_map<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_map<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_map<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_map<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_map<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp new file mode 100644 index 0000000000..fca89ae874 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map30.hpp @@ -0,0 +1,611 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_map<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_map<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_map<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_map<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_map<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_map<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_map<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_map<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_map<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_map<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_map<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_map<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_map<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_map<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_map<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_map<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_map<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_map<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_map<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_map<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_map<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_map<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_map<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_map<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_map<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_map<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_map<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_map<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_map<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_map<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp new file mode 100644 index 0000000000..6e800f6086 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map40.hpp @@ -0,0 +1,811 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_map<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_map<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_map<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_map<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_map<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_map<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_map<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_map<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_map<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_map<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_map<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_map<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_map<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_map<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_map<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_map<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_map<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_map<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_map<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_map<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_map<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_map<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_map<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_map<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_map<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_map<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_map<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_map<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_map<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_map<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_map<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_map<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_map<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_map<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_map<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_map<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_map<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_map<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_map<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_map<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp new file mode 100644 index 0000000000..2cc45eeb1c --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/as_map50.hpp @@ -0,0 +1,1011 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_map<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_map<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_map<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_map<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_map<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_map<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_map<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_map<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_map<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_map<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_map<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_map<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_map<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_map<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_map<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_map<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_map<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_map<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_map<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_map<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_map<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_map<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_map<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_map<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_map<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_map<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_map<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_map<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_map<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_map<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_map<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_map<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_map<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_map<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_map<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_map<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_map<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_map<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_map<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_map<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; + template <> + struct as_map<41> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); + } + }; + template <> + struct as_map<42> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); + } + }; + template <> + struct as_map<43> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); + } + }; + template <> + struct as_map<44> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); + } + }; + template <> + struct as_map<45> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); + } + }; + template <> + struct as_map<46> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); + } + }; + template <> + struct as_map<47> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); + } + }; + template <> + struct as_map<48> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); + } + }; + template <> + struct as_map<49> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); + } + }; + template <> + struct as_map<50> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; typedef typename fusion::result_of::next::type I50; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; typedef typename fusion::result_of::value_of::type T49; + typedef map type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp new file mode 100644 index 0000000000..93455c7196 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_MAP_SIZE <= 10 +#include +#elif FUSION_MAX_MAP_SIZE <= 20 +#include +#elif FUSION_MAX_MAP_SIZE <= 30 +#include +#elif FUSION_MAX_MAP_SIZE <= 40 +#include +#elif FUSION_MAX_MAP_SIZE <= 50 +#include +#else +#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp new file mode 100644 index 0000000000..fdf28eb2a1 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map10.hpp @@ -0,0 +1,62 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct map : sequence_base > + { + struct category : random_access_traversal_tag, associative_tag {}; + typedef map_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> + storage_type; + typedef typename storage_type::size size; + map() + : data() {} + template + map(Sequence const& rhs) + : data(rhs) {} + explicit + map(T0 const& _0) + : data(_0) {} + map(T0 const& _0 , T1 const& _1) + : data(_0 , _1) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2) + : data(_0 , _1 , _2) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + : data(_0 , _1 , _2 , _3) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + : data(_0 , _1 , _2 , _3 , _4) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + map& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp new file mode 100644 index 0000000000..cd9292e3f1 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map10_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct map_tag; + struct map_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + > + struct map; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp new file mode 100644 index 0000000000..33cd2e5956 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map20.hpp @@ -0,0 +1,82 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct map : sequence_base > + { + struct category : random_access_traversal_tag, associative_tag {}; + typedef map_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> + storage_type; + typedef typename storage_type::size size; + map() + : data() {} + template + map(Sequence const& rhs) + : data(rhs) {} + explicit + map(T0 const& _0) + : data(_0) {} + map(T0 const& _0 , T1 const& _1) + : data(_0 , _1) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2) + : data(_0 , _1 , _2) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + : data(_0 , _1 , _2 , _3) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + : data(_0 , _1 , _2 , _3 , _4) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + map& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp new file mode 100644 index 0000000000..0ff5fa50c5 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map20_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct map_tag; + struct map_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + > + struct map; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp new file mode 100644 index 0000000000..54f492d0fd --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map30.hpp @@ -0,0 +1,102 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct map : sequence_base > + { + struct category : random_access_traversal_tag, associative_tag {}; + typedef map_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> + storage_type; + typedef typename storage_type::size size; + map() + : data() {} + template + map(Sequence const& rhs) + : data(rhs) {} + explicit + map(T0 const& _0) + : data(_0) {} + map(T0 const& _0 , T1 const& _1) + : data(_0 , _1) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2) + : data(_0 , _1 , _2) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + : data(_0 , _1 , _2 , _3) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + : data(_0 , _1 , _2 , _3 , _4) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + map& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp new file mode 100644 index 0000000000..d9be47ab44 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map30_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct map_tag; + struct map_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + > + struct map; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp new file mode 100644 index 0000000000..7060a6707b --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map40.hpp @@ -0,0 +1,122 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct map : sequence_base > + { + struct category : random_access_traversal_tag, associative_tag {}; + typedef map_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> + storage_type; + typedef typename storage_type::size size; + map() + : data() {} + template + map(Sequence const& rhs) + : data(rhs) {} + explicit + map(T0 const& _0) + : data(_0) {} + map(T0 const& _0 , T1 const& _1) + : data(_0 , _1) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2) + : data(_0 , _1 , _2) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + : data(_0 , _1 , _2 , _3) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + : data(_0 , _1 , _2 , _3 , _4) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + template + map& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp new file mode 100644 index 0000000000..c2b40e1ced --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map40_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct map_tag; + struct map_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + > + struct map; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp new file mode 100644 index 0000000000..1da736410b --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map50.hpp @@ -0,0 +1,142 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct map : sequence_base > + { + struct category : random_access_traversal_tag, associative_tag {}; + typedef map_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> + storage_type; + typedef typename storage_type::size size; + map() + : data() {} + template + map(Sequence const& rhs) + : data(rhs) {} + explicit + map(T0 const& _0) + : data(_0) {} + map(T0 const& _0 , T1 const& _1) + : data(_0 , _1) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2) + : data(_0 , _1 , _2) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + : data(_0 , _1 , _2 , _3) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + : data(_0 , _1 , _2 , _3 , _4) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} + map(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} + template + map& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp new file mode 100644 index 0000000000..6c107225a7 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map50_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct map_tag; + struct map_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + > + struct map; +}} diff --git a/3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp b/3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp new file mode 100644 index 0000000000..e478a6f859 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/preprocessed/map_fwd.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_MAP_SIZE <= 10 +#include +#elif FUSION_MAX_MAP_SIZE <= 20 +#include +#elif FUSION_MAX_MAP_SIZE <= 30 +#include +#elif FUSION_MAX_MAP_SIZE <= 40 +#include +#elif FUSION_MAX_MAP_SIZE <= 50 +#include +#else +#error "FUSION_MAX_MAP_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp new file mode 100644 index 0000000000..31d9b38383 --- /dev/null +++ b/3party/boost/boost/fusion/container/map/detail/value_at_impl.hpp @@ -0,0 +1,34 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Brandon Kohn + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP) +#define BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP + +#include + +namespace boost { namespace fusion +{ + struct map_tag; + + namespace extension + { + template + struct value_at_impl; + + template <> + struct value_at_impl + { + template + struct apply + { + typedef typename mpl::at::type type; + }; + }; + } +}} + +#endif //BOOST_FUSION_MAP_DETAIL_VALUE_AT_IMPL_HPP diff --git a/3party/boost/boost/fusion/container/map/limits.hpp b/3party/boost/boost/fusion/container/map/limits.hpp index 738abff4c6..ae5c378674 100644 --- a/3party/boost/boost/fusion/container/map/limits.hpp +++ b/3party/boost/boost/fusion/container/map/limits.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_MAP_LIMITS_07212005_1104) @@ -22,4 +22,6 @@ # endif #endif +#define FUSION_MAX_MAP_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_MAP_SIZE)) + #endif diff --git a/3party/boost/boost/fusion/container/map/map.hpp b/3party/boost/boost/fusion/container/map/map.hpp index 77fe292018..5152e6e19d 100644 --- a/3party/boost/boost/fusion/container/map/map.hpp +++ b/3party/boost/boost/fusion/container/map/map.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_MAP_07212005_1106) @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -22,6 +24,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map" FUSION_MAX_MAP_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -30,21 +52,21 @@ namespace boost { namespace fusion template struct map : sequence_base > { - struct category : forward_traversal_tag, associative_tag {}; - + struct category : random_access_traversal_tag, associative_tag {}; + typedef map_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL typedef mpl::false_ is_view; typedef vector< - BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> + BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> storage_type; typedef typename storage_type::size size; map() : data() {} - + template map(Sequence const& rhs) : data(rhs) {} @@ -63,9 +85,15 @@ namespace boost { namespace fusion storage_type const& get_data() const { return data; } private: - + storage_type data; }; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/map/map_fwd.hpp b/3party/boost/boost/fusion/container/map/map_fwd.hpp index d8a9c1b71f..76c5eea7fe 100644 --- a/3party/boost/boost/fusion/container/map/map_fwd.hpp +++ b/3party/boost/boost/fusion/container/map/map_fwd.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_MAP_FORWARD_07212005_1105) @@ -10,6 +10,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map" FUSION_MAX_MAP_SIZE_STR "_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -23,4 +43,10 @@ namespace boost { namespace fusion struct map; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/set.hpp b/3party/boost/boost/fusion/container/set.hpp index 6b7674d66c..81ac261ee4 100644 --- a/3party/boost/boost/fusion/container/set.hpp +++ b/3party/boost/boost/fusion/container/set.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/set/convert.hpp b/3party/boost/boost/fusion/container/set/convert.hpp index 1aaddf0cfd..c268e5d9d1 100644 --- a/3party/boost/boost/fusion/container/set/convert.hpp +++ b/3party/boost/boost/fusion/container/set/convert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/set/detail/as_set.hpp b/3party/boost/boost/fusion/container/set/detail/as_set.hpp index 3378633854..19c0b3521d 100644 --- a/3party/boost/boost/fusion/container/set/detail/as_set.hpp +++ b/3party/boost/boost/fusion/container/set/detail/as_set.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -41,7 +41,30 @@ namespace boost { namespace fusion { namespace detail return set<>(); } }; +}}} +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_set" FUSION_MAX_SET_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { namespace detail +{ #define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \ typedef typename fusion::result_of::next::type \ BOOST_PP_CAT(I, BOOST_PP_INC(n)); @@ -64,6 +87,12 @@ namespace boost { namespace fusion { namespace detail }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp index 8047743d15..348af7ed37 100644 --- a/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/container/set/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp index 1aa79fb121..a9fba752df 100644 --- a/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp +++ b/3party/boost/boost/fusion/container/set/detail/convert_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/set/detail/end_impl.hpp b/3party/boost/boost/fusion/container/set/detail/end_impl.hpp index a981585b42..13fa5b53db 100644 --- a/3party/boost/boost/fusion/container/set/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/container/set/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2009 Christopher Schmidt Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set.hpp new file mode 100644 index 0000000000..4231dcb180 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_SET_SIZE <= 10 +#include +#elif FUSION_MAX_SET_SIZE <= 20 +#include +#elif FUSION_MAX_SET_SIZE <= 30 +#include +#elif FUSION_MAX_SET_SIZE <= 40 +#include +#elif FUSION_MAX_SET_SIZE <= 50 +#include +#else +#error "FUSION_MAX_SET_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp new file mode 100644 index 0000000000..a7386dc6be --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set10.hpp @@ -0,0 +1,211 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_set<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_set<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_set<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_set<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_set<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_set<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_set<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_set<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_set<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_set<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp new file mode 100644 index 0000000000..0e7da29f02 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set20.hpp @@ -0,0 +1,411 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_set<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_set<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_set<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_set<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_set<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_set<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_set<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_set<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_set<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_set<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_set<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_set<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_set<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_set<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_set<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_set<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_set<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_set<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_set<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_set<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp new file mode 100644 index 0000000000..b7bfedcca1 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set30.hpp @@ -0,0 +1,611 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_set<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_set<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_set<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_set<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_set<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_set<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_set<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_set<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_set<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_set<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_set<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_set<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_set<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_set<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_set<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_set<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_set<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_set<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_set<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_set<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_set<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_set<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_set<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_set<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_set<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_set<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_set<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_set<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_set<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_set<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp new file mode 100644 index 0000000000..77930e2954 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set40.hpp @@ -0,0 +1,811 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_set<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_set<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_set<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_set<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_set<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_set<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_set<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_set<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_set<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_set<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_set<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_set<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_set<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_set<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_set<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_set<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_set<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_set<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_set<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_set<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_set<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_set<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_set<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_set<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_set<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_set<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_set<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_set<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_set<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_set<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_set<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_set<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_set<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_set<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_set<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_set<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_set<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_set<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_set<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_set<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp new file mode 100644 index 0000000000..f33cbb3b78 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/as_set50.hpp @@ -0,0 +1,1011 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_set<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_set<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_set<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_set<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_set<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_set<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_set<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_set<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_set<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_set<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_set<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_set<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_set<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_set<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_set<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_set<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_set<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_set<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_set<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_set<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_set<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_set<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_set<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_set<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_set<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_set<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_set<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_set<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_set<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_set<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_set<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_set<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_set<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_set<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_set<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_set<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_set<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_set<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_set<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_set<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; + template <> + struct as_set<41> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); + } + }; + template <> + struct as_set<42> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); + } + }; + template <> + struct as_set<43> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); + } + }; + template <> + struct as_set<44> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); + } + }; + template <> + struct as_set<45> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); + } + }; + template <> + struct as_set<46> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); + } + }; + template <> + struct as_set<47> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); + } + }; + template <> + struct as_set<48> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); + } + }; + template <> + struct as_set<49> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); + } + }; + template <> + struct as_set<50> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; typedef typename fusion::result_of::next::type I50; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; typedef typename fusion::result_of::value_of::type T49; + typedef set type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set.hpp new file mode 100644 index 0000000000..a64fab2c8e --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_SET_SIZE <= 10 +#include +#elif FUSION_MAX_SET_SIZE <= 20 +#include +#elif FUSION_MAX_SET_SIZE <= 30 +#include +#elif FUSION_MAX_SET_SIZE <= 40 +#include +#elif FUSION_MAX_SET_SIZE <= 50 +#include +#else +#error "FUSION_MAX_SET_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp new file mode 100644 index 0000000000..d53bd3f81f --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set10.hpp @@ -0,0 +1,62 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct set : sequence_base > + { + struct category : forward_traversal_tag, associative_tag {}; + typedef set_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> + storage_type; + typedef typename storage_type::size size; + set() + : data() {} + template + set(Sequence const& rhs) + : data(rhs) {} + explicit + set(typename detail::call_param::type _0) + : data(_0) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : data(_0 , _1) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : data(_0 , _1 , _2) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : data(_0 , _1 , _2 , _3) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : data(_0 , _1 , _2 , _3 , _4) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + set& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set10_fwd.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set10_fwd.hpp new file mode 100644 index 0000000000..8b6253dc3b --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set10_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct set_tag; + struct set_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + > + struct set; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp new file mode 100644 index 0000000000..259fcf3cb9 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set20.hpp @@ -0,0 +1,82 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct set : sequence_base > + { + struct category : forward_traversal_tag, associative_tag {}; + typedef set_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> + storage_type; + typedef typename storage_type::size size; + set() + : data() {} + template + set(Sequence const& rhs) + : data(rhs) {} + explicit + set(typename detail::call_param::type _0) + : data(_0) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : data(_0 , _1) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : data(_0 , _1 , _2) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : data(_0 , _1 , _2 , _3) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : data(_0 , _1 , _2 , _3 , _4) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + set& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set20_fwd.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set20_fwd.hpp new file mode 100644 index 0000000000..acbb56dee0 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set20_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct set_tag; + struct set_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + > + struct set; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp new file mode 100644 index 0000000000..b4fea40a33 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set30.hpp @@ -0,0 +1,102 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct set : sequence_base > + { + struct category : forward_traversal_tag, associative_tag {}; + typedef set_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> + storage_type; + typedef typename storage_type::size size; + set() + : data() {} + template + set(Sequence const& rhs) + : data(rhs) {} + explicit + set(typename detail::call_param::type _0) + : data(_0) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : data(_0 , _1) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : data(_0 , _1 , _2) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : data(_0 , _1 , _2 , _3) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : data(_0 , _1 , _2 , _3 , _4) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + set& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set30_fwd.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set30_fwd.hpp new file mode 100644 index 0000000000..9c774b0dad --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set30_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct set_tag; + struct set_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + > + struct set; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp new file mode 100644 index 0000000000..62ca9f2d69 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set40.hpp @@ -0,0 +1,122 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct set : sequence_base > + { + struct category : forward_traversal_tag, associative_tag {}; + typedef set_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> + storage_type; + typedef typename storage_type::size size; + set() + : data() {} + template + set(Sequence const& rhs) + : data(rhs) {} + explicit + set(typename detail::call_param::type _0) + : data(_0) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : data(_0 , _1) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : data(_0 , _1 , _2) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : data(_0 , _1 , _2 , _3) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : data(_0 , _1 , _2 , _3 , _4) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + template + set& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set40_fwd.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set40_fwd.hpp new file mode 100644 index 0000000000..2f251c108c --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set40_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct set_tag; + struct set_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + > + struct set; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp new file mode 100644 index 0000000000..da9a25cc15 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set50.hpp @@ -0,0 +1,142 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct set : sequence_base > + { + struct category : forward_traversal_tag, associative_tag {}; + typedef set_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> + storage_type; + typedef typename storage_type::size size; + set() + : data() {} + template + set(Sequence const& rhs) + : data(rhs) {} + explicit + set(typename detail::call_param::type _0) + : data(_0) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : data(_0 , _1) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : data(_0 , _1 , _2) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : data(_0 , _1 , _2 , _3) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : data(_0 , _1 , _2 , _3 , _4) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : data(_0 , _1 , _2 , _3 , _4 , _5) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} + set(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + : data(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} + template + set& + operator=(T const& rhs) + { + data = rhs; + return *this; + } + storage_type& get_data() { return data; } + storage_type const& get_data() const { return data; } + private: + storage_type data; + }; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set50_fwd.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set50_fwd.hpp new file mode 100644 index 0000000000..478b98b578 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set50_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct set_tag; + struct set_iterator_tag; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + > + struct set; +}} diff --git a/3party/boost/boost/fusion/container/set/detail/preprocessed/set_fwd.hpp b/3party/boost/boost/fusion/container/set/detail/preprocessed/set_fwd.hpp new file mode 100644 index 0000000000..28a3e814d2 --- /dev/null +++ b/3party/boost/boost/fusion/container/set/detail/preprocessed/set_fwd.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_SET_SIZE <= 10 +#include +#elif FUSION_MAX_SET_SIZE <= 20 +#include +#elif FUSION_MAX_SET_SIZE <= 30 +#include +#elif FUSION_MAX_SET_SIZE <= 40 +#include +#elif FUSION_MAX_SET_SIZE <= 50 +#include +#else +#error "FUSION_MAX_SET_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp b/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp index d105b15079..789c7f3413 100644 --- a/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/set/detail/set_forward_ctor.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/set/limits.hpp b/3party/boost/boost/fusion/container/set/limits.hpp index 35eb0803f4..d01920e71d 100644 --- a/3party/boost/boost/fusion/container/set/limits.hpp +++ b/3party/boost/boost/fusion/container/set/limits.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_SET_LIMITS_09162005_1103) @@ -22,4 +22,6 @@ # endif #endif +#define FUSION_MAX_SET_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_SET_SIZE)) + #endif diff --git a/3party/boost/boost/fusion/container/set/set.hpp b/3party/boost/boost/fusion/container/set/set.hpp index 62b9140298..f26ea740ff 100644 --- a/3party/boost/boost/fusion/container/set/set.hpp +++ b/3party/boost/boost/fusion/container/set/set.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_SET_09162005_1104) @@ -22,6 +22,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/set" FUSION_MAX_SET_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -37,14 +57,14 @@ namespace boost { namespace fusion typedef mpl::false_ is_view; typedef vector< - BOOST_PP_ENUM_PARAMS(FUSION_MAX_SET_SIZE, T)> + BOOST_PP_ENUM_PARAMS(FUSION_MAX_SET_SIZE, T)> storage_type; typedef typename storage_type::size size; set() : data() {} - + template set(Sequence const& rhs) : data(rhs) {} @@ -63,9 +83,15 @@ namespace boost { namespace fusion storage_type const& get_data() const { return data; } private: - + storage_type data; }; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/set/set_fwd.hpp b/3party/boost/boost/fusion/container/set/set_fwd.hpp index 082422f1f6..7b09d165ae 100644 --- a/3party/boost/boost/fusion/container/set/set_fwd.hpp +++ b/3party/boost/boost/fusion/container/set/set_fwd.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_SET_FORWARD_09162005_1102) @@ -10,6 +10,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/set" FUSION_MAX_SET_SIZE_STR "_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -23,4 +43,10 @@ namespace boost { namespace fusion struct set; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector.hpp b/3party/boost/boost/fusion/container/vector.hpp index 389a102e5a..fa64cd0ff1 100644 --- a/3party/boost/boost/fusion/container/vector.hpp +++ b/3party/boost/boost/fusion/container/vector.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -8,11 +8,21 @@ #define FUSION_SEQUENCE_CLASS_VECTOR_10022005_0602 #include + #include +#if (FUSION_MAX_VECTOR_SIZE > 10) #include +#endif +#if (FUSION_MAX_VECTOR_SIZE > 20) #include +#endif +#if (FUSION_MAX_VECTOR_SIZE > 30) #include +#endif +#if (FUSION_MAX_VECTOR_SIZE > 40) #include +#endif + #include #include #include diff --git a/3party/boost/boost/fusion/container/vector/convert.hpp b/3party/boost/boost/fusion/container/vector/convert.hpp index a31578a2f5..b317f995b7 100644 --- a/3party/boost/boost/fusion/container/vector/convert.hpp +++ b/3party/boost/boost/fusion/container/vector/convert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp index c2c97b18e5..cded8f49f4 100644 --- a/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/advance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp b/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp index a70fd4aea5..a311bd6389 100644 --- a/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/as_vector.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -41,6 +41,30 @@ namespace boost { namespace fusion { namespace detail return vector0<>(); } }; +}}} + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_vector" FUSION_MAX_VECTOR_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion { namespace detail +{ #define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \ typedef typename fusion::result_of::next::type \ @@ -64,6 +88,12 @@ namespace boost { namespace fusion { namespace detail }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp index 1366ec9f40..0017d9c813 100644 --- a/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -27,7 +27,7 @@ namespace boost { namespace fusion template struct apply { - typedef mpl::at element; + typedef typename mpl::at::type element; typedef typename detail::ref_result::type type; static type @@ -40,7 +40,7 @@ namespace boost { namespace fusion template struct apply { - typedef mpl::at element; + typedef typename mpl::at::type element; typedef typename detail::cref_result::type type; static type diff --git a/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp index d2d687be0c..f5583ba6c1 100644 --- a/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp index 5e1d080f20..633e688f02 100644 --- a/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/convert_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp index bd9f3d0670..8c5fb94207 100644 --- a/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -10,6 +10,7 @@ #include #include #include +#include namespace boost { namespace fusion { @@ -29,14 +30,14 @@ namespace boost { namespace fusion typedef typename Iterator::vector vector; typedef typename Iterator::index index; typedef typename mpl::at< - typename vector::types, index> + typename vector::types, index>::type element; typedef typename - mpl::eval_if< + mpl::if_< is_const - , fusion::detail::cref_result - , fusion::detail::ref_result + , typename fusion::detail::cref_result::type + , typename fusion::detail::ref_result::type >::type type; diff --git a/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp index 9664d5c2da..146d5ba12c 100644 --- a/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/distance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp index f33282dcb8..fde365c7f8 100644 --- a/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp index 5ff81c61a9..3c6fcbd2ee 100644 --- a/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/equal_to_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp index b11cfdb281..169297d524 100644 --- a/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector.hpp new file mode 100644 index 0000000000..c70f8a7c42 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp new file mode 100644 index 0000000000..312a42a1ff --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp @@ -0,0 +1,211 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_vector<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef vector1 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_vector<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef vector2 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_vector<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef vector3 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_vector<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef vector4 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_vector<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef vector5 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_vector<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef vector6 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_vector<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef vector7 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_vector<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef vector8 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_vector<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef vector9 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_vector<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef vector10 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp new file mode 100644 index 0000000000..0893bcfdb3 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp @@ -0,0 +1,411 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_vector<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef vector1 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_vector<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef vector2 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_vector<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef vector3 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_vector<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef vector4 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_vector<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef vector5 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_vector<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef vector6 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_vector<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef vector7 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_vector<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef vector8 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_vector<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef vector9 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_vector<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef vector10 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_vector<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef vector11 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_vector<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef vector12 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_vector<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef vector13 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_vector<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef vector14 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_vector<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef vector15 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_vector<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef vector16 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_vector<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef vector17 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_vector<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef vector18 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_vector<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef vector19 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_vector<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef vector20 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp new file mode 100644 index 0000000000..dcea3f4c6e --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp @@ -0,0 +1,611 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_vector<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef vector1 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_vector<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef vector2 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_vector<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef vector3 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_vector<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef vector4 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_vector<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef vector5 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_vector<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef vector6 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_vector<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef vector7 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_vector<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef vector8 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_vector<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef vector9 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_vector<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef vector10 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_vector<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef vector11 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_vector<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef vector12 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_vector<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef vector13 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_vector<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef vector14 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_vector<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef vector15 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_vector<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef vector16 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_vector<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef vector17 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_vector<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef vector18 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_vector<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef vector19 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_vector<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef vector20 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_vector<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef vector21 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_vector<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef vector22 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_vector<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef vector23 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_vector<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef vector24 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_vector<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef vector25 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_vector<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef vector26 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_vector<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef vector27 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_vector<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef vector28 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_vector<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef vector29 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_vector<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef vector30 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp new file mode 100644 index 0000000000..465ae1191a --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp @@ -0,0 +1,811 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_vector<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef vector1 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_vector<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef vector2 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_vector<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef vector3 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_vector<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef vector4 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_vector<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef vector5 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_vector<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef vector6 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_vector<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef vector7 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_vector<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef vector8 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_vector<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef vector9 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_vector<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef vector10 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_vector<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef vector11 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_vector<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef vector12 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_vector<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef vector13 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_vector<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef vector14 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_vector<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef vector15 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_vector<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef vector16 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_vector<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef vector17 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_vector<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef vector18 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_vector<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef vector19 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_vector<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef vector20 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_vector<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef vector21 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_vector<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef vector22 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_vector<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef vector23 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_vector<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef vector24 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_vector<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef vector25 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_vector<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef vector26 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_vector<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef vector27 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_vector<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef vector28 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_vector<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef vector29 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_vector<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef vector30 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_vector<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef vector31 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_vector<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef vector32 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_vector<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef vector33 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_vector<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef vector34 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_vector<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef vector35 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_vector<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef vector36 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_vector<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef vector37 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_vector<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef vector38 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_vector<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef vector39 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_vector<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef vector40 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp new file mode 100644 index 0000000000..5aa3fbc768 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp @@ -0,0 +1,1011 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template <> + struct as_vector<1> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; + typedef typename fusion::result_of::value_of::type T0; + typedef vector1 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + + return result(*i0); + } + }; + template <> + struct as_vector<2> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; + typedef vector2 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); + return result(*i0 , *i1); + } + }; + template <> + struct as_vector<3> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; + typedef vector3 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); + return result(*i0 , *i1 , *i2); + } + }; + template <> + struct as_vector<4> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; + typedef vector4 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); + return result(*i0 , *i1 , *i2 , *i3); + } + }; + template <> + struct as_vector<5> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; + typedef vector5 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); + return result(*i0 , *i1 , *i2 , *i3 , *i4); + } + }; + template <> + struct as_vector<6> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; + typedef vector6 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + }; + template <> + struct as_vector<7> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; + typedef vector7 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + }; + template <> + struct as_vector<8> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; + typedef vector8 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + }; + template <> + struct as_vector<9> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; + typedef vector9 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + }; + template <> + struct as_vector<10> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; + typedef vector10 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + }; + template <> + struct as_vector<11> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; + typedef vector11 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + }; + template <> + struct as_vector<12> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; + typedef vector12 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + }; + template <> + struct as_vector<13> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; + typedef vector13 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + }; + template <> + struct as_vector<14> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; + typedef vector14 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + }; + template <> + struct as_vector<15> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; + typedef vector15 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + }; + template <> + struct as_vector<16> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; + typedef vector16 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + }; + template <> + struct as_vector<17> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; + typedef vector17 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + }; + template <> + struct as_vector<18> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; + typedef vector18 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + }; + template <> + struct as_vector<19> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; + typedef vector19 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + }; + template <> + struct as_vector<20> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; + typedef vector20 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + }; + template <> + struct as_vector<21> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; + typedef vector21 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + }; + template <> + struct as_vector<22> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; + typedef vector22 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + }; + template <> + struct as_vector<23> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; + typedef vector23 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + }; + template <> + struct as_vector<24> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; + typedef vector24 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + }; + template <> + struct as_vector<25> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; + typedef vector25 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + }; + template <> + struct as_vector<26> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; + typedef vector26 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + }; + template <> + struct as_vector<27> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; + typedef vector27 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + }; + template <> + struct as_vector<28> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; + typedef vector28 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + }; + template <> + struct as_vector<29> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; + typedef vector29 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + }; + template <> + struct as_vector<30> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; + typedef vector30 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + }; + template <> + struct as_vector<31> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; + typedef vector31 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + }; + template <> + struct as_vector<32> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; + typedef vector32 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + }; + template <> + struct as_vector<33> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; + typedef vector33 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + }; + template <> + struct as_vector<34> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; + typedef vector34 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + }; + template <> + struct as_vector<35> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; + typedef vector35 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + }; + template <> + struct as_vector<36> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; + typedef vector36 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + }; + template <> + struct as_vector<37> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; + typedef vector37 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + }; + template <> + struct as_vector<38> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; + typedef vector38 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + }; + template <> + struct as_vector<39> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; + typedef vector39 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + }; + template <> + struct as_vector<40> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; + typedef vector40 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + }; + template <> + struct as_vector<41> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; + typedef vector41 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); + } + }; + template <> + struct as_vector<42> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; + typedef vector42 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); + } + }; + template <> + struct as_vector<43> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; + typedef vector43 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); + } + }; + template <> + struct as_vector<44> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; + typedef vector44 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); + } + }; + template <> + struct as_vector<45> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; + typedef vector45 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); + } + }; + template <> + struct as_vector<46> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; + typedef vector46 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); + } + }; + template <> + struct as_vector<47> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; + typedef vector47 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); + } + }; + template <> + struct as_vector<48> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; + typedef vector48 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); + } + }; + template <> + struct as_vector<49> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; + typedef vector49 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); + } + }; + template <> + struct as_vector<50> + { + template + struct apply + { + typedef typename fusion::result_of::next::type I1; typedef typename fusion::result_of::next::type I2; typedef typename fusion::result_of::next::type I3; typedef typename fusion::result_of::next::type I4; typedef typename fusion::result_of::next::type I5; typedef typename fusion::result_of::next::type I6; typedef typename fusion::result_of::next::type I7; typedef typename fusion::result_of::next::type I8; typedef typename fusion::result_of::next::type I9; typedef typename fusion::result_of::next::type I10; typedef typename fusion::result_of::next::type I11; typedef typename fusion::result_of::next::type I12; typedef typename fusion::result_of::next::type I13; typedef typename fusion::result_of::next::type I14; typedef typename fusion::result_of::next::type I15; typedef typename fusion::result_of::next::type I16; typedef typename fusion::result_of::next::type I17; typedef typename fusion::result_of::next::type I18; typedef typename fusion::result_of::next::type I19; typedef typename fusion::result_of::next::type I20; typedef typename fusion::result_of::next::type I21; typedef typename fusion::result_of::next::type I22; typedef typename fusion::result_of::next::type I23; typedef typename fusion::result_of::next::type I24; typedef typename fusion::result_of::next::type I25; typedef typename fusion::result_of::next::type I26; typedef typename fusion::result_of::next::type I27; typedef typename fusion::result_of::next::type I28; typedef typename fusion::result_of::next::type I29; typedef typename fusion::result_of::next::type I30; typedef typename fusion::result_of::next::type I31; typedef typename fusion::result_of::next::type I32; typedef typename fusion::result_of::next::type I33; typedef typename fusion::result_of::next::type I34; typedef typename fusion::result_of::next::type I35; typedef typename fusion::result_of::next::type I36; typedef typename fusion::result_of::next::type I37; typedef typename fusion::result_of::next::type I38; typedef typename fusion::result_of::next::type I39; typedef typename fusion::result_of::next::type I40; typedef typename fusion::result_of::next::type I41; typedef typename fusion::result_of::next::type I42; typedef typename fusion::result_of::next::type I43; typedef typename fusion::result_of::next::type I44; typedef typename fusion::result_of::next::type I45; typedef typename fusion::result_of::next::type I46; typedef typename fusion::result_of::next::type I47; typedef typename fusion::result_of::next::type I48; typedef typename fusion::result_of::next::type I49; typedef typename fusion::result_of::next::type I50; + typedef typename fusion::result_of::value_of::type T0; typedef typename fusion::result_of::value_of::type T1; typedef typename fusion::result_of::value_of::type T2; typedef typename fusion::result_of::value_of::type T3; typedef typename fusion::result_of::value_of::type T4; typedef typename fusion::result_of::value_of::type T5; typedef typename fusion::result_of::value_of::type T6; typedef typename fusion::result_of::value_of::type T7; typedef typename fusion::result_of::value_of::type T8; typedef typename fusion::result_of::value_of::type T9; typedef typename fusion::result_of::value_of::type T10; typedef typename fusion::result_of::value_of::type T11; typedef typename fusion::result_of::value_of::type T12; typedef typename fusion::result_of::value_of::type T13; typedef typename fusion::result_of::value_of::type T14; typedef typename fusion::result_of::value_of::type T15; typedef typename fusion::result_of::value_of::type T16; typedef typename fusion::result_of::value_of::type T17; typedef typename fusion::result_of::value_of::type T18; typedef typename fusion::result_of::value_of::type T19; typedef typename fusion::result_of::value_of::type T20; typedef typename fusion::result_of::value_of::type T21; typedef typename fusion::result_of::value_of::type T22; typedef typename fusion::result_of::value_of::type T23; typedef typename fusion::result_of::value_of::type T24; typedef typename fusion::result_of::value_of::type T25; typedef typename fusion::result_of::value_of::type T26; typedef typename fusion::result_of::value_of::type T27; typedef typename fusion::result_of::value_of::type T28; typedef typename fusion::result_of::value_of::type T29; typedef typename fusion::result_of::value_of::type T30; typedef typename fusion::result_of::value_of::type T31; typedef typename fusion::result_of::value_of::type T32; typedef typename fusion::result_of::value_of::type T33; typedef typename fusion::result_of::value_of::type T34; typedef typename fusion::result_of::value_of::type T35; typedef typename fusion::result_of::value_of::type T36; typedef typename fusion::result_of::value_of::type T37; typedef typename fusion::result_of::value_of::type T38; typedef typename fusion::result_of::value_of::type T39; typedef typename fusion::result_of::value_of::type T40; typedef typename fusion::result_of::value_of::type T41; typedef typename fusion::result_of::value_of::type T42; typedef typename fusion::result_of::value_of::type T43; typedef typename fusion::result_of::value_of::type T44; typedef typename fusion::result_of::value_of::type T45; typedef typename fusion::result_of::value_of::type T46; typedef typename fusion::result_of::value_of::type T47; typedef typename fusion::result_of::value_of::type T48; typedef typename fusion::result_of::value_of::type T49; + typedef vector50 type; + }; + template + static typename apply::type + call(Iterator const& i0) + { + typedef apply gen; + typedef typename gen::type result; + typename gen::I1 i1 = fusion::next(i0); typename gen::I2 i2 = fusion::next(i1); typename gen::I3 i3 = fusion::next(i2); typename gen::I4 i4 = fusion::next(i3); typename gen::I5 i5 = fusion::next(i4); typename gen::I6 i6 = fusion::next(i5); typename gen::I7 i7 = fusion::next(i6); typename gen::I8 i8 = fusion::next(i7); typename gen::I9 i9 = fusion::next(i8); typename gen::I10 i10 = fusion::next(i9); typename gen::I11 i11 = fusion::next(i10); typename gen::I12 i12 = fusion::next(i11); typename gen::I13 i13 = fusion::next(i12); typename gen::I14 i14 = fusion::next(i13); typename gen::I15 i15 = fusion::next(i14); typename gen::I16 i16 = fusion::next(i15); typename gen::I17 i17 = fusion::next(i16); typename gen::I18 i18 = fusion::next(i17); typename gen::I19 i19 = fusion::next(i18); typename gen::I20 i20 = fusion::next(i19); typename gen::I21 i21 = fusion::next(i20); typename gen::I22 i22 = fusion::next(i21); typename gen::I23 i23 = fusion::next(i22); typename gen::I24 i24 = fusion::next(i23); typename gen::I25 i25 = fusion::next(i24); typename gen::I26 i26 = fusion::next(i25); typename gen::I27 i27 = fusion::next(i26); typename gen::I28 i28 = fusion::next(i27); typename gen::I29 i29 = fusion::next(i28); typename gen::I30 i30 = fusion::next(i29); typename gen::I31 i31 = fusion::next(i30); typename gen::I32 i32 = fusion::next(i31); typename gen::I33 i33 = fusion::next(i32); typename gen::I34 i34 = fusion::next(i33); typename gen::I35 i35 = fusion::next(i34); typename gen::I36 i36 = fusion::next(i35); typename gen::I37 i37 = fusion::next(i36); typename gen::I38 i38 = fusion::next(i37); typename gen::I39 i39 = fusion::next(i38); typename gen::I40 i40 = fusion::next(i39); typename gen::I41 i41 = fusion::next(i40); typename gen::I42 i42 = fusion::next(i41); typename gen::I43 i43 = fusion::next(i42); typename gen::I44 i44 = fusion::next(i43); typename gen::I45 i45 = fusion::next(i44); typename gen::I46 i46 = fusion::next(i45); typename gen::I47 i47 = fusion::next(i46); typename gen::I48 i48 = fusion::next(i47); typename gen::I49 i49 = fusion::next(i48); + return result(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); + } + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector.hpp new file mode 100644 index 0000000000..040fff948b --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp new file mode 100644 index 0000000000..8ef9947de9 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10.hpp @@ -0,0 +1,1004 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + struct vector_data1 + { + vector_data1() + : m0() {} + vector_data1( + typename detail::call_param::type _0) + : m0(_0) {} + vector_data1( + vector_data1 const& other) + : m0(other.m0) {} + vector_data1& + operator=(vector_data1 const& vec) + { + this->m0 = vec.m0; + return *this; + } + template + static vector_data1 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + + return vector_data1(*i0); + } + template + static vector_data1 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + + return vector_data1(*i0); + } + T0 m0; + }; + template + struct vector1 + : vector_data1 + , sequence_base > + { + typedef vector1 this_type; + typedef vector_data1 base_type; + typedef mpl::vector1 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<1> size; + vector1() {} + explicit + vector1( + typename detail::call_param::type _0) + : base_type(_0) {} + template + vector1( + vector1 const& vec) + : base_type(vec.m0) {} + template + vector1( + Sequence const& seq + , typename boost::disable_if >::type* = 0 + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector1( + Sequence& seq + , typename boost::disable_if >::type* = 0 + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector1& + operator=(vector1 const& vec) + { + this->m0 = vec.m0; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + + this->m0 = *i0; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data2 + { + vector_data2() + : m0() , m1() {} + vector_data2( + typename detail::call_param::type _0 , typename detail::call_param::type _1) + : m0(_0) , m1(_1) {} + vector_data2( + vector_data2 const& other) + : m0(other.m0) , m1(other.m1) {} + vector_data2& + operator=(vector_data2 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; + return *this; + } + template + static vector_data2 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); + return vector_data2(*i0 , *i1); + } + template + static vector_data2 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); + return vector_data2(*i0 , *i1); + } + T0 m0; T1 m1; + }; + template + struct vector2 + : vector_data2 + , sequence_base > + { + typedef vector2 this_type; + typedef vector_data2 base_type; + typedef mpl::vector2 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<2> size; + vector2() {} + vector2( + typename detail::call_param::type _0 , typename detail::call_param::type _1) + : base_type(_0 , _1) {} + template + vector2( + vector2 const& vec) + : base_type(vec.m0 , vec.m1) {} + template + vector2( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector2( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector2& + operator=(vector2 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); + this->m0 = *i0; this->m1 = *i1; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data3 + { + vector_data3() + : m0() , m1() , m2() {} + vector_data3( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : m0(_0) , m1(_1) , m2(_2) {} + vector_data3( + vector_data3 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) {} + vector_data3& + operator=(vector_data3 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; + return *this; + } + template + static vector_data3 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); + return vector_data3(*i0 , *i1 , *i2); + } + template + static vector_data3 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); + return vector_data3(*i0 , *i1 , *i2); + } + T0 m0; T1 m1; T2 m2; + }; + template + struct vector3 + : vector_data3 + , sequence_base > + { + typedef vector3 this_type; + typedef vector_data3 base_type; + typedef mpl::vector3 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<3> size; + vector3() {} + vector3( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : base_type(_0 , _1 , _2) {} + template + vector3( + vector3 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2) {} + template + vector3( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector3( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector3& + operator=(vector3 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data4 + { + vector_data4() + : m0() , m1() , m2() , m3() {} + vector_data4( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) {} + vector_data4( + vector_data4 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) {} + vector_data4& + operator=(vector_data4 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; + return *this; + } + template + static vector_data4 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); + return vector_data4(*i0 , *i1 , *i2 , *i3); + } + template + static vector_data4 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); + return vector_data4(*i0 , *i1 , *i2 , *i3); + } + T0 m0; T1 m1; T2 m2; T3 m3; + }; + template + struct vector4 + : vector_data4 + , sequence_base > + { + typedef vector4 this_type; + typedef vector_data4 base_type; + typedef mpl::vector4 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<4> size; + vector4() {} + vector4( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : base_type(_0 , _1 , _2 , _3) {} + template + vector4( + vector4 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3) {} + template + vector4( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector4( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector4& + operator=(vector4 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data5 + { + vector_data5() + : m0() , m1() , m2() , m3() , m4() {} + vector_data5( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) {} + vector_data5( + vector_data5 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) {} + vector_data5& + operator=(vector_data5 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; + return *this; + } + template + static vector_data5 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); + return vector_data5(*i0 , *i1 , *i2 , *i3 , *i4); + } + template + static vector_data5 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); + return vector_data5(*i0 , *i1 , *i2 , *i3 , *i4); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; + }; + template + struct vector5 + : vector_data5 + , sequence_base > + { + typedef vector5 this_type; + typedef vector_data5 base_type; + typedef mpl::vector5 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<5> size; + vector5() {} + vector5( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : base_type(_0 , _1 , _2 , _3 , _4) {} + template + vector5( + vector5 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4) {} + template + vector5( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector5( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector5& + operator=(vector5 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data6 + { + vector_data6() + : m0() , m1() , m2() , m3() , m4() , m5() {} + vector_data6( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) {} + vector_data6( + vector_data6 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) {} + vector_data6& + operator=(vector_data6 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; + return *this; + } + template + static vector_data6 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); + return vector_data6(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + template + static vector_data6 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); + return vector_data6(*i0 , *i1 , *i2 , *i3 , *i4 , *i5); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; + }; + template + struct vector6 + : vector_data6 + , sequence_base > + { + typedef vector6 this_type; + typedef vector_data6 base_type; + typedef mpl::vector6 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<6> size; + vector6() {} + vector6( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} + template + vector6( + vector6 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5) {} + template + vector6( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector6( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector6& + operator=(vector6 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data7 + { + vector_data7() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() {} + vector_data7( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) {} + vector_data7( + vector_data7 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) {} + vector_data7& + operator=(vector_data7 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; + return *this; + } + template + static vector_data7 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); + return vector_data7(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + template + static vector_data7 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); + return vector_data7(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; + }; + template + struct vector7 + : vector_data7 + , sequence_base > + { + typedef vector7 this_type; + typedef vector_data7 base_type; + typedef mpl::vector7 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<7> size; + vector7() {} + vector7( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + template + vector7( + vector7 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6) {} + template + vector7( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector7( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector7& + operator=(vector7 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data8 + { + vector_data8() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() {} + vector_data8( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) {} + vector_data8( + vector_data8 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) {} + vector_data8& + operator=(vector_data8 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; + return *this; + } + template + static vector_data8 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); + return vector_data8(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + template + static vector_data8 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); + return vector_data8(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; + }; + template + struct vector8 + : vector_data8 + , sequence_base > + { + typedef vector8 this_type; + typedef vector_data8 base_type; + typedef mpl::vector8 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<8> size; + vector8() {} + vector8( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + template + vector8( + vector8 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7) {} + template + vector8( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector8( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector8& + operator=(vector8 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data9 + { + vector_data9() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() {} + vector_data9( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) {} + vector_data9( + vector_data9 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) {} + vector_data9& + operator=(vector_data9 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; + return *this; + } + template + static vector_data9 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); + return vector_data9(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + template + static vector_data9 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); + return vector_data9(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; + }; + template + struct vector9 + : vector_data9 + , sequence_base > + { + typedef vector9 this_type; + typedef vector_data9 base_type; + typedef mpl::vector9 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<9> size; + vector9() {} + vector9( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + template + vector9( + vector9 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8) {} + template + vector9( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector9( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector9& + operator=(vector9 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data10 + { + vector_data10() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() {} + vector_data10( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) {} + vector_data10( + vector_data10 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) {} + vector_data10& + operator=(vector_data10 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; + return *this; + } + template + static vector_data10 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); + return vector_data10(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + template + static vector_data10 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); + return vector_data10(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; + }; + template + struct vector10 + : vector_data10 + , sequence_base > + { + typedef vector10 this_type; + typedef vector_data10 base_type; + typedef mpl::vector10 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<10> size; + vector10() {} + vector10( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + vector10( + vector10 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9) {} + template + vector10( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector10( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector10& + operator=(vector10 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10_fwd.hpp new file mode 100644 index 0000000000..33f817ffaf --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector10_fwd.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + + template + struct vector1; + template + struct vector2; + template + struct vector3; + template + struct vector4; + template + struct vector5; + template + struct vector6; + template + struct vector7; + template + struct vector8; + template + struct vector9; + template + struct vector10; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp new file mode 100644 index 0000000000..151acbbdc8 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20.hpp @@ -0,0 +1,1004 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + template + struct vector_data11 + { + vector_data11() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() {} + vector_data11( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) {} + vector_data11( + vector_data11 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) {} + vector_data11& + operator=(vector_data11 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; + return *this; + } + template + static vector_data11 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); + return vector_data11(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + template + static vector_data11 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); + return vector_data11(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; + }; + template + struct vector11 + : vector_data11 + , sequence_base > + { + typedef vector11 this_type; + typedef vector_data11 base_type; + typedef mpl::vector11 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<11> size; + vector11() {} + vector11( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + template + vector11( + vector11 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10) {} + template + vector11( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector11( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector11& + operator=(vector11 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data12 + { + vector_data12() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() {} + vector_data12( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) {} + vector_data12( + vector_data12 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) {} + vector_data12& + operator=(vector_data12 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; + return *this; + } + template + static vector_data12 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); + return vector_data12(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + template + static vector_data12 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); + return vector_data12(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; + }; + template + struct vector12 + : vector_data12 + , sequence_base > + { + typedef vector12 this_type; + typedef vector_data12 base_type; + typedef mpl::vector12 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<12> size; + vector12() {} + vector12( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + template + vector12( + vector12 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11) {} + template + vector12( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector12( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector12& + operator=(vector12 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data13 + { + vector_data13() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() {} + vector_data13( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) {} + vector_data13( + vector_data13 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) {} + vector_data13& + operator=(vector_data13 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; + return *this; + } + template + static vector_data13 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); + return vector_data13(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + template + static vector_data13 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); + return vector_data13(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; + }; + template + struct vector13 + : vector_data13 + , sequence_base > + { + typedef vector13 this_type; + typedef vector_data13 base_type; + typedef mpl::vector13 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<13> size; + vector13() {} + vector13( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + template + vector13( + vector13 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12) {} + template + vector13( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector13( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector13& + operator=(vector13 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data14 + { + vector_data14() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() {} + vector_data14( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) {} + vector_data14( + vector_data14 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) {} + vector_data14& + operator=(vector_data14 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; + return *this; + } + template + static vector_data14 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); + return vector_data14(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + template + static vector_data14 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); + return vector_data14(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; + }; + template + struct vector14 + : vector_data14 + , sequence_base > + { + typedef vector14 this_type; + typedef vector_data14 base_type; + typedef mpl::vector14 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<14> size; + vector14() {} + vector14( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + template + vector14( + vector14 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13) {} + template + vector14( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector14( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector14& + operator=(vector14 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data15 + { + vector_data15() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() {} + vector_data15( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) {} + vector_data15( + vector_data15 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) {} + vector_data15& + operator=(vector_data15 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; + return *this; + } + template + static vector_data15 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); + return vector_data15(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + template + static vector_data15 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); + return vector_data15(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; + }; + template + struct vector15 + : vector_data15 + , sequence_base > + { + typedef vector15 this_type; + typedef vector_data15 base_type; + typedef mpl::vector15 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<15> size; + vector15() {} + vector15( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + template + vector15( + vector15 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14) {} + template + vector15( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector15( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector15& + operator=(vector15 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data16 + { + vector_data16() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() {} + vector_data16( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) {} + vector_data16( + vector_data16 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) {} + vector_data16& + operator=(vector_data16 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; + return *this; + } + template + static vector_data16 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); + return vector_data16(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + template + static vector_data16 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); + return vector_data16(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; + }; + template + struct vector16 + : vector_data16 + , sequence_base > + { + typedef vector16 this_type; + typedef vector_data16 base_type; + typedef mpl::vector16 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<16> size; + vector16() {} + vector16( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + template + vector16( + vector16 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15) {} + template + vector16( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector16( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector16& + operator=(vector16 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data17 + { + vector_data17() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() {} + vector_data17( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) {} + vector_data17( + vector_data17 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) {} + vector_data17& + operator=(vector_data17 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; + return *this; + } + template + static vector_data17 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); + return vector_data17(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + template + static vector_data17 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); + return vector_data17(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; + }; + template + struct vector17 + : vector_data17 + , sequence_base > + { + typedef vector17 this_type; + typedef vector_data17 base_type; + typedef mpl::vector17 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<17> size; + vector17() {} + vector17( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + template + vector17( + vector17 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16) {} + template + vector17( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector17( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector17& + operator=(vector17 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data18 + { + vector_data18() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() {} + vector_data18( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) {} + vector_data18( + vector_data18 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) {} + vector_data18& + operator=(vector_data18 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; + return *this; + } + template + static vector_data18 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); + return vector_data18(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + template + static vector_data18 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); + return vector_data18(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; + }; + template + struct vector18 + : vector_data18 + , sequence_base > + { + typedef vector18 this_type; + typedef vector_data18 base_type; + typedef mpl::vector18 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<18> size; + vector18() {} + vector18( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + template + vector18( + vector18 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17) {} + template + vector18( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector18( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector18& + operator=(vector18 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data19 + { + vector_data19() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() {} + vector_data19( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) {} + vector_data19( + vector_data19 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) {} + vector_data19& + operator=(vector_data19 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; + return *this; + } + template + static vector_data19 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); + return vector_data19(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + template + static vector_data19 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); + return vector_data19(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; + }; + template + struct vector19 + : vector_data19 + , sequence_base > + { + typedef vector19 this_type; + typedef vector_data19 base_type; + typedef mpl::vector19 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<19> size; + vector19() {} + vector19( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + template + vector19( + vector19 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18) {} + template + vector19( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector19( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector19& + operator=(vector19 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data20 + { + vector_data20() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() {} + vector_data20( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) {} + vector_data20( + vector_data20 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) {} + vector_data20& + operator=(vector_data20 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; + return *this; + } + template + static vector_data20 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); + return vector_data20(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + template + static vector_data20 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); + return vector_data20(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; + }; + template + struct vector20 + : vector_data20 + , sequence_base > + { + typedef vector20 this_type; + typedef vector_data20 base_type; + typedef mpl::vector20 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<20> size; + vector20() {} + vector20( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + vector20( + vector20 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19) {} + template + vector20( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector20( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector20& + operator=(vector20 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20_fwd.hpp new file mode 100644 index 0000000000..b1672857a8 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector20_fwd.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + + template + struct vector11; + template + struct vector12; + template + struct vector13; + template + struct vector14; + template + struct vector15; + template + struct vector16; + template + struct vector17; + template + struct vector18; + template + struct vector19; + template + struct vector20; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp new file mode 100644 index 0000000000..3810091bcf --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30.hpp @@ -0,0 +1,1004 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + template + struct vector_data21 + { + vector_data21() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() {} + vector_data21( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) {} + vector_data21( + vector_data21 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) {} + vector_data21& + operator=(vector_data21 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; + return *this; + } + template + static vector_data21 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); + return vector_data21(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + template + static vector_data21 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); + return vector_data21(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; + }; + template + struct vector21 + : vector_data21 + , sequence_base > + { + typedef vector21 this_type; + typedef vector_data21 base_type; + typedef mpl::vector21 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<21> size; + vector21() {} + vector21( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + template + vector21( + vector21 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20) {} + template + vector21( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector21( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector21& + operator=(vector21 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data22 + { + vector_data22() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() {} + vector_data22( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) {} + vector_data22( + vector_data22 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) {} + vector_data22& + operator=(vector_data22 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; + return *this; + } + template + static vector_data22 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); + return vector_data22(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + template + static vector_data22 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); + return vector_data22(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; + }; + template + struct vector22 + : vector_data22 + , sequence_base > + { + typedef vector22 this_type; + typedef vector_data22 base_type; + typedef mpl::vector22 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<22> size; + vector22() {} + vector22( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + template + vector22( + vector22 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21) {} + template + vector22( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector22( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector22& + operator=(vector22 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data23 + { + vector_data23() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() {} + vector_data23( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) {} + vector_data23( + vector_data23 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) {} + vector_data23& + operator=(vector_data23 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; + return *this; + } + template + static vector_data23 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); + return vector_data23(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + template + static vector_data23 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); + return vector_data23(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; + }; + template + struct vector23 + : vector_data23 + , sequence_base > + { + typedef vector23 this_type; + typedef vector_data23 base_type; + typedef mpl::vector23 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<23> size; + vector23() {} + vector23( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + template + vector23( + vector23 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22) {} + template + vector23( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector23( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector23& + operator=(vector23 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data24 + { + vector_data24() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() {} + vector_data24( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) {} + vector_data24( + vector_data24 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) {} + vector_data24& + operator=(vector_data24 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; + return *this; + } + template + static vector_data24 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); + return vector_data24(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + template + static vector_data24 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); + return vector_data24(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; + }; + template + struct vector24 + : vector_data24 + , sequence_base > + { + typedef vector24 this_type; + typedef vector_data24 base_type; + typedef mpl::vector24 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<24> size; + vector24() {} + vector24( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + template + vector24( + vector24 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23) {} + template + vector24( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector24( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector24& + operator=(vector24 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data25 + { + vector_data25() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() {} + vector_data25( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) {} + vector_data25( + vector_data25 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) {} + vector_data25& + operator=(vector_data25 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; + return *this; + } + template + static vector_data25 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); + return vector_data25(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + template + static vector_data25 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); + return vector_data25(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; + }; + template + struct vector25 + : vector_data25 + , sequence_base > + { + typedef vector25 this_type; + typedef vector_data25 base_type; + typedef mpl::vector25 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<25> size; + vector25() {} + vector25( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + template + vector25( + vector25 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24) {} + template + vector25( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector25( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector25& + operator=(vector25 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data26 + { + vector_data26() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() {} + vector_data26( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) {} + vector_data26( + vector_data26 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) {} + vector_data26& + operator=(vector_data26 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; + return *this; + } + template + static vector_data26 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); + return vector_data26(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + template + static vector_data26 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); + return vector_data26(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; + }; + template + struct vector26 + : vector_data26 + , sequence_base > + { + typedef vector26 this_type; + typedef vector_data26 base_type; + typedef mpl::vector26 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<26> size; + vector26() {} + vector26( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + template + vector26( + vector26 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25) {} + template + vector26( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector26( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector26& + operator=(vector26 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data27 + { + vector_data27() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() {} + vector_data27( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) {} + vector_data27( + vector_data27 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) {} + vector_data27& + operator=(vector_data27 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; + return *this; + } + template + static vector_data27 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); + return vector_data27(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + template + static vector_data27 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); + return vector_data27(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; + }; + template + struct vector27 + : vector_data27 + , sequence_base > + { + typedef vector27 this_type; + typedef vector_data27 base_type; + typedef mpl::vector27 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<27> size; + vector27() {} + vector27( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + template + vector27( + vector27 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26) {} + template + vector27( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector27( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector27& + operator=(vector27 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data28 + { + vector_data28() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() {} + vector_data28( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) {} + vector_data28( + vector_data28 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) {} + vector_data28& + operator=(vector_data28 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; + return *this; + } + template + static vector_data28 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); + return vector_data28(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + template + static vector_data28 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); + return vector_data28(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; + }; + template + struct vector28 + : vector_data28 + , sequence_base > + { + typedef vector28 this_type; + typedef vector_data28 base_type; + typedef mpl::vector28 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<28> size; + vector28() {} + vector28( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + template + vector28( + vector28 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27) {} + template + vector28( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector28( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector28& + operator=(vector28 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data29 + { + vector_data29() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() {} + vector_data29( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) {} + vector_data29( + vector_data29 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) {} + vector_data29& + operator=(vector_data29 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; + return *this; + } + template + static vector_data29 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); + return vector_data29(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + template + static vector_data29 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); + return vector_data29(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; + }; + template + struct vector29 + : vector_data29 + , sequence_base > + { + typedef vector29 this_type; + typedef vector_data29 base_type; + typedef mpl::vector29 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<29> size; + vector29() {} + vector29( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + template + vector29( + vector29 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28) {} + template + vector29( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector29( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector29& + operator=(vector29 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data30 + { + vector_data30() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() {} + vector_data30( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) {} + vector_data30( + vector_data30 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) {} + vector_data30& + operator=(vector_data30 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; + return *this; + } + template + static vector_data30 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); + return vector_data30(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + template + static vector_data30 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); + return vector_data30(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; + }; + template + struct vector30 + : vector_data30 + , sequence_base > + { + typedef vector30 this_type; + typedef vector_data30 base_type; + typedef mpl::vector30 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<30> size; + vector30() {} + vector30( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + vector30( + vector30 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29) {} + template + vector30( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector30( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector30& + operator=(vector30 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30_fwd.hpp new file mode 100644 index 0000000000..39f96aa836 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector30_fwd.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + + template + struct vector21; + template + struct vector22; + template + struct vector23; + template + struct vector24; + template + struct vector25; + template + struct vector26; + template + struct vector27; + template + struct vector28; + template + struct vector29; + template + struct vector30; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp new file mode 100644 index 0000000000..07fac8dcff --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40.hpp @@ -0,0 +1,1004 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + template + struct vector_data31 + { + vector_data31() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() {} + vector_data31( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) {} + vector_data31( + vector_data31 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) {} + vector_data31& + operator=(vector_data31 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; + return *this; + } + template + static vector_data31 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); + return vector_data31(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + template + static vector_data31 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); + return vector_data31(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; + }; + template + struct vector31 + : vector_data31 + , sequence_base > + { + typedef vector31 this_type; + typedef vector_data31 base_type; + typedef mpl::vector31 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<31> size; + vector31() {} + vector31( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + template + vector31( + vector31 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30) {} + template + vector31( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector31( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector31& + operator=(vector31 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data32 + { + vector_data32() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() {} + vector_data32( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) {} + vector_data32( + vector_data32 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) {} + vector_data32& + operator=(vector_data32 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; + return *this; + } + template + static vector_data32 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); + return vector_data32(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + template + static vector_data32 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); + return vector_data32(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; + }; + template + struct vector32 + : vector_data32 + , sequence_base > + { + typedef vector32 this_type; + typedef vector_data32 base_type; + typedef mpl::vector32 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<32> size; + vector32() {} + vector32( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + template + vector32( + vector32 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31) {} + template + vector32( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector32( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector32& + operator=(vector32 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data33 + { + vector_data33() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() {} + vector_data33( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) {} + vector_data33( + vector_data33 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) {} + vector_data33& + operator=(vector_data33 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; + return *this; + } + template + static vector_data33 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); + return vector_data33(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + template + static vector_data33 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); + return vector_data33(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; + }; + template + struct vector33 + : vector_data33 + , sequence_base > + { + typedef vector33 this_type; + typedef vector_data33 base_type; + typedef mpl::vector33 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<33> size; + vector33() {} + vector33( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + template + vector33( + vector33 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32) {} + template + vector33( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector33( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector33& + operator=(vector33 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data34 + { + vector_data34() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() {} + vector_data34( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) {} + vector_data34( + vector_data34 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) {} + vector_data34& + operator=(vector_data34 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; + return *this; + } + template + static vector_data34 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); + return vector_data34(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + template + static vector_data34 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); + return vector_data34(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; + }; + template + struct vector34 + : vector_data34 + , sequence_base > + { + typedef vector34 this_type; + typedef vector_data34 base_type; + typedef mpl::vector34 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<34> size; + vector34() {} + vector34( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + template + vector34( + vector34 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33) {} + template + vector34( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector34( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector34& + operator=(vector34 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data35 + { + vector_data35() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() {} + vector_data35( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) {} + vector_data35( + vector_data35 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) {} + vector_data35& + operator=(vector_data35 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; + return *this; + } + template + static vector_data35 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); + return vector_data35(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + template + static vector_data35 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); + return vector_data35(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; + }; + template + struct vector35 + : vector_data35 + , sequence_base > + { + typedef vector35 this_type; + typedef vector_data35 base_type; + typedef mpl::vector35 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<35> size; + vector35() {} + vector35( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + template + vector35( + vector35 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34) {} + template + vector35( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector35( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector35& + operator=(vector35 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data36 + { + vector_data36() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() {} + vector_data36( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) {} + vector_data36( + vector_data36 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) {} + vector_data36& + operator=(vector_data36 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; + return *this; + } + template + static vector_data36 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); + return vector_data36(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + template + static vector_data36 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); + return vector_data36(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; + }; + template + struct vector36 + : vector_data36 + , sequence_base > + { + typedef vector36 this_type; + typedef vector_data36 base_type; + typedef mpl::vector36 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<36> size; + vector36() {} + vector36( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + template + vector36( + vector36 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35) {} + template + vector36( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector36( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector36& + operator=(vector36 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data37 + { + vector_data37() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() {} + vector_data37( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) {} + vector_data37( + vector_data37 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) {} + vector_data37& + operator=(vector_data37 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; + return *this; + } + template + static vector_data37 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); + return vector_data37(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + template + static vector_data37 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); + return vector_data37(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; + }; + template + struct vector37 + : vector_data37 + , sequence_base > + { + typedef vector37 this_type; + typedef vector_data37 base_type; + typedef mpl::vector37 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<37> size; + vector37() {} + vector37( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + template + vector37( + vector37 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36) {} + template + vector37( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector37( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector37& + operator=(vector37 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data38 + { + vector_data38() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() {} + vector_data38( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) {} + vector_data38( + vector_data38 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) {} + vector_data38& + operator=(vector_data38 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; + return *this; + } + template + static vector_data38 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); + return vector_data38(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + template + static vector_data38 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); + return vector_data38(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; + }; + template + struct vector38 + : vector_data38 + , sequence_base > + { + typedef vector38 this_type; + typedef vector_data38 base_type; + typedef mpl::vector38 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<38> size; + vector38() {} + vector38( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + template + vector38( + vector38 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37) {} + template + vector38( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector38( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector38& + operator=(vector38 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data39 + { + vector_data39() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() {} + vector_data39( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) {} + vector_data39( + vector_data39 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) {} + vector_data39& + operator=(vector_data39 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; + return *this; + } + template + static vector_data39 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); + return vector_data39(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + template + static vector_data39 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); + return vector_data39(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; + }; + template + struct vector39 + : vector_data39 + , sequence_base > + { + typedef vector39 this_type; + typedef vector_data39 base_type; + typedef mpl::vector39 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<39> size; + vector39() {} + vector39( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + template + vector39( + vector39 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38) {} + template + vector39( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector39( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector39& + operator=(vector39 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data40 + { + vector_data40() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() {} + vector_data40( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) {} + vector_data40( + vector_data40 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) {} + vector_data40& + operator=(vector_data40 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; + return *this; + } + template + static vector_data40 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); + return vector_data40(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + template + static vector_data40 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); + return vector_data40(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; + }; + template + struct vector40 + : vector_data40 + , sequence_base > + { + typedef vector40 this_type; + typedef vector_data40 base_type; + typedef mpl::vector40 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<40> size; + vector40() {} + vector40( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + template + vector40( + vector40 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39) {} + template + vector40( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector40( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector40& + operator=(vector40 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40_fwd.hpp new file mode 100644 index 0000000000..e1d6e0911a --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector40_fwd.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + + template + struct vector31; + template + struct vector32; + template + struct vector33; + template + struct vector34; + template + struct vector35; + template + struct vector36; + template + struct vector37; + template + struct vector38; + template + struct vector39; + template + struct vector40; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp new file mode 100644 index 0000000000..7ef9402e66 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50.hpp @@ -0,0 +1,1004 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct vector_tag; + struct fusion_sequence_tag; + struct random_access_traversal_tag; + template + struct vector_data41 + { + vector_data41() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() {} + vector_data41( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) {} + vector_data41( + vector_data41 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) {} + vector_data41& + operator=(vector_data41 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; + return *this; + } + template + static vector_data41 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); + return vector_data41(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); + } + template + static vector_data41 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); + return vector_data41(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; + }; + template + struct vector41 + : vector_data41 + , sequence_base > + { + typedef vector41 this_type; + typedef vector_data41 base_type; + typedef mpl::vector41 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<41> size; + vector41() {} + vector41( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} + template + vector41( + vector41 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40) {} + template + vector41( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector41( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector41& + operator=(vector41 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data42 + { + vector_data42() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() {} + vector_data42( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) {} + vector_data42( + vector_data42 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) {} + vector_data42& + operator=(vector_data42 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; + return *this; + } + template + static vector_data42 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); + return vector_data42(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); + } + template + static vector_data42 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); + return vector_data42(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; + }; + template + struct vector42 + : vector_data42 + , sequence_base > + { + typedef vector42 this_type; + typedef vector_data42 base_type; + typedef mpl::vector42 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<42> size; + vector42() {} + vector42( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} + template + vector42( + vector42 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41) {} + template + vector42( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector42( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector42& + operator=(vector42 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data43 + { + vector_data43() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() {} + vector_data43( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) {} + vector_data43( + vector_data43 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) {} + vector_data43& + operator=(vector_data43 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; + return *this; + } + template + static vector_data43 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); + return vector_data43(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); + } + template + static vector_data43 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); + return vector_data43(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; + }; + template + struct vector43 + : vector_data43 + , sequence_base > + { + typedef vector43 this_type; + typedef vector_data43 base_type; + typedef mpl::vector43 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<43> size; + vector43() {} + vector43( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} + template + vector43( + vector43 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42) {} + template + vector43( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector43( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector43& + operator=(vector43 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data44 + { + vector_data44() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() {} + vector_data44( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) {} + vector_data44( + vector_data44 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) {} + vector_data44& + operator=(vector_data44 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; + return *this; + } + template + static vector_data44 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); + return vector_data44(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); + } + template + static vector_data44 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); + return vector_data44(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; + }; + template + struct vector44 + : vector_data44 + , sequence_base > + { + typedef vector44 this_type; + typedef vector_data44 base_type; + typedef mpl::vector44 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<44> size; + vector44() {} + vector44( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} + template + vector44( + vector44 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43) {} + template + vector44( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector44( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector44& + operator=(vector44 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data45 + { + vector_data45() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() {} + vector_data45( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) {} + vector_data45( + vector_data45 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) {} + vector_data45& + operator=(vector_data45 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; + return *this; + } + template + static vector_data45 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); + return vector_data45(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); + } + template + static vector_data45 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); + return vector_data45(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; + }; + template + struct vector45 + : vector_data45 + , sequence_base > + { + typedef vector45 this_type; + typedef vector_data45 base_type; + typedef mpl::vector45 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<45> size; + vector45() {} + vector45( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} + template + vector45( + vector45 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44) {} + template + vector45( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector45( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector45& + operator=(vector45 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data46 + { + vector_data46() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() {} + vector_data46( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) {} + vector_data46( + vector_data46 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) {} + vector_data46& + operator=(vector_data46 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; + return *this; + } + template + static vector_data46 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); + return vector_data46(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); + } + template + static vector_data46 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); + return vector_data46(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; + }; + template + struct vector46 + : vector_data46 + , sequence_base > + { + typedef vector46 this_type; + typedef vector_data46 base_type; + typedef mpl::vector46 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<46> size; + vector46() {} + vector46( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} + template + vector46( + vector46 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45) {} + template + vector46( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector46( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector46& + operator=(vector46 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data47 + { + vector_data47() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() {} + vector_data47( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) {} + vector_data47( + vector_data47 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) {} + vector_data47& + operator=(vector_data47 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; + return *this; + } + template + static vector_data47 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); + return vector_data47(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); + } + template + static vector_data47 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); + return vector_data47(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; + }; + template + struct vector47 + : vector_data47 + , sequence_base > + { + typedef vector47 this_type; + typedef vector_data47 base_type; + typedef mpl::vector47 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<47> size; + vector47() {} + vector47( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} + template + vector47( + vector47 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46) {} + template + vector47( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector47( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector47& + operator=(vector47 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data48 + { + vector_data48() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() {} + vector_data48( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) {} + vector_data48( + vector_data48 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) {} + vector_data48& + operator=(vector_data48 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; + return *this; + } + template + static vector_data48 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); + return vector_data48(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); + } + template + static vector_data48 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); + return vector_data48(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; T47 m47; + }; + template + struct vector48 + : vector_data48 + , sequence_base > + { + typedef vector48 this_type; + typedef vector_data48 base_type; + typedef mpl::vector48 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<48> size; + vector48() {} + vector48( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} + template + vector48( + vector48 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47) {} + template + vector48( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector48( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector48& + operator=(vector48 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference::type>::type at_impl(mpl::int_<47>) const { return this->m47; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data49 + { + vector_data49() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() , m48() {} + vector_data49( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) , m48(_48) {} + vector_data49( + vector_data49 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) , m48(other.m48) {} + vector_data49& + operator=(vector_data49 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; + return *this; + } + template + static vector_data49 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); + return vector_data49(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); + } + template + static vector_data49 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); + return vector_data49(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; T47 m47; T48 m48; + }; + template + struct vector49 + : vector_data49 + , sequence_base > + { + typedef vector49 this_type; + typedef vector_data49 base_type; + typedef mpl::vector49 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<49> size; + vector49() {} + vector49( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} + template + vector49( + vector49 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47 , vec.m48) {} + template + vector49( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector49( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector49& + operator=(vector49 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; this->m48 = *i48; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference::type>::type at_impl(mpl::int_<47>) const { return this->m47; } typename add_reference::type at_impl(mpl::int_<48>) { return this->m48; } typename add_reference::type>::type at_impl(mpl::int_<48>) const { return this->m48; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; + template + struct vector_data50 + { + vector_data50() + : m0() , m1() , m2() , m3() , m4() , m5() , m6() , m7() , m8() , m9() , m10() , m11() , m12() , m13() , m14() , m15() , m16() , m17() , m18() , m19() , m20() , m21() , m22() , m23() , m24() , m25() , m26() , m27() , m28() , m29() , m30() , m31() , m32() , m33() , m34() , m35() , m36() , m37() , m38() , m39() , m40() , m41() , m42() , m43() , m44() , m45() , m46() , m47() , m48() , m49() {} + vector_data50( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + : m0(_0) , m1(_1) , m2(_2) , m3(_3) , m4(_4) , m5(_5) , m6(_6) , m7(_7) , m8(_8) , m9(_9) , m10(_10) , m11(_11) , m12(_12) , m13(_13) , m14(_14) , m15(_15) , m16(_16) , m17(_17) , m18(_18) , m19(_19) , m20(_20) , m21(_21) , m22(_22) , m23(_23) , m24(_24) , m25(_25) , m26(_26) , m27(_27) , m28(_28) , m29(_29) , m30(_30) , m31(_31) , m32(_32) , m33(_33) , m34(_34) , m35(_35) , m36(_36) , m37(_37) , m38(_38) , m39(_39) , m40(_40) , m41(_41) , m42(_42) , m43(_43) , m44(_44) , m45(_45) , m46(_46) , m47(_47) , m48(_48) , m49(_49) {} + vector_data50( + vector_data50 const& other) + : m0(other.m0) , m1(other.m1) , m2(other.m2) , m3(other.m3) , m4(other.m4) , m5(other.m5) , m6(other.m6) , m7(other.m7) , m8(other.m8) , m9(other.m9) , m10(other.m10) , m11(other.m11) , m12(other.m12) , m13(other.m13) , m14(other.m14) , m15(other.m15) , m16(other.m16) , m17(other.m17) , m18(other.m18) , m19(other.m19) , m20(other.m20) , m21(other.m21) , m22(other.m22) , m23(other.m23) , m24(other.m24) , m25(other.m25) , m26(other.m26) , m27(other.m27) , m28(other.m28) , m29(other.m29) , m30(other.m30) , m31(other.m31) , m32(other.m32) , m33(other.m33) , m34(other.m34) , m35(other.m35) , m36(other.m36) , m37(other.m37) , m38(other.m38) , m39(other.m39) , m40(other.m40) , m41(other.m41) , m42(other.m42) , m43(other.m43) , m44(other.m44) , m45(other.m45) , m46(other.m46) , m47(other.m47) , m48(other.m48) , m49(other.m49) {} + vector_data50& + operator=(vector_data50 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; this->m49 = vec.m49; + return *this; + } + template + static vector_data50 + init_from_sequence(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); typedef typename result_of::next< I48>::type I49; I49 i49 = fusion::next(i48); + return vector_data50(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); + } + template + static vector_data50 + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); typedef typename result_of::next< I48>::type I49; I49 i49 = fusion::next(i48); + return vector_data50(*i0 , *i1 , *i2 , *i3 , *i4 , *i5 , *i6 , *i7 , *i8 , *i9 , *i10 , *i11 , *i12 , *i13 , *i14 , *i15 , *i16 , *i17 , *i18 , *i19 , *i20 , *i21 , *i22 , *i23 , *i24 , *i25 , *i26 , *i27 , *i28 , *i29 , *i30 , *i31 , *i32 , *i33 , *i34 , *i35 , *i36 , *i37 , *i38 , *i39 , *i40 , *i41 , *i42 , *i43 , *i44 , *i45 , *i46 , *i47 , *i48 , *i49); + } + T0 m0; T1 m1; T2 m2; T3 m3; T4 m4; T5 m5; T6 m6; T7 m7; T8 m8; T9 m9; T10 m10; T11 m11; T12 m12; T13 m13; T14 m14; T15 m15; T16 m16; T17 m17; T18 m18; T19 m19; T20 m20; T21 m21; T22 m22; T23 m23; T24 m24; T25 m25; T26 m26; T27 m27; T28 m28; T29 m29; T30 m30; T31 m31; T32 m32; T33 m33; T34 m34; T35 m35; T36 m36; T37 m37; T38 m38; T39 m39; T40 m40; T41 m41; T42 m42; T43 m43; T44 m44; T45 m45; T46 m46; T47 m47; T48 m48; T49 m49; + }; + template + struct vector50 + : vector_data50 + , sequence_base > + { + typedef vector50 this_type; + typedef vector_data50 base_type; + typedef mpl::vector50 types; + typedef vector_tag fusion_tag; + typedef fusion_sequence_tag tag; + typedef mpl::false_ is_view; + typedef random_access_traversal_tag category; + typedef mpl::int_<50> size; + vector50() {} + vector50( + typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} + template + vector50( + vector50 const& vec) + : base_type(vec.m0 , vec.m1 , vec.m2 , vec.m3 , vec.m4 , vec.m5 , vec.m6 , vec.m7 , vec.m8 , vec.m9 , vec.m10 , vec.m11 , vec.m12 , vec.m13 , vec.m14 , vec.m15 , vec.m16 , vec.m17 , vec.m18 , vec.m19 , vec.m20 , vec.m21 , vec.m22 , vec.m23 , vec.m24 , vec.m25 , vec.m26 , vec.m27 , vec.m28 , vec.m29 , vec.m30 , vec.m31 , vec.m32 , vec.m33 , vec.m34 , vec.m35 , vec.m36 , vec.m37 , vec.m38 , vec.m39 , vec.m40 , vec.m41 , vec.m42 , vec.m43 , vec.m44 , vec.m45 , vec.m46 , vec.m47 , vec.m48 , vec.m49) {} + template + vector50( + Sequence const& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector50( + Sequence& seq + ) + : base_type(base_type::init_from_sequence(seq)) {} + template + vector50& + operator=(vector50 const& vec) + { + this->m0 = vec.m0; this->m1 = vec.m1; this->m2 = vec.m2; this->m3 = vec.m3; this->m4 = vec.m4; this->m5 = vec.m5; this->m6 = vec.m6; this->m7 = vec.m7; this->m8 = vec.m8; this->m9 = vec.m9; this->m10 = vec.m10; this->m11 = vec.m11; this->m12 = vec.m12; this->m13 = vec.m13; this->m14 = vec.m14; this->m15 = vec.m15; this->m16 = vec.m16; this->m17 = vec.m17; this->m18 = vec.m18; this->m19 = vec.m19; this->m20 = vec.m20; this->m21 = vec.m21; this->m22 = vec.m22; this->m23 = vec.m23; this->m24 = vec.m24; this->m25 = vec.m25; this->m26 = vec.m26; this->m27 = vec.m27; this->m28 = vec.m28; this->m29 = vec.m29; this->m30 = vec.m30; this->m31 = vec.m31; this->m32 = vec.m32; this->m33 = vec.m33; this->m34 = vec.m34; this->m35 = vec.m35; this->m36 = vec.m36; this->m37 = vec.m37; this->m38 = vec.m38; this->m39 = vec.m39; this->m40 = vec.m40; this->m41 = vec.m41; this->m42 = vec.m42; this->m43 = vec.m43; this->m44 = vec.m44; this->m45 = vec.m45; this->m46 = vec.m46; this->m47 = vec.m47; this->m48 = vec.m48; this->m49 = vec.m49; + return *this; + } + template + typename boost::disable_if, this_type&>::type + operator=(Sequence const& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + typedef typename result_of::next< I0>::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next< I1>::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next< I2>::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next< I3>::type I4; I4 i4 = fusion::next(i3); typedef typename result_of::next< I4>::type I5; I5 i5 = fusion::next(i4); typedef typename result_of::next< I5>::type I6; I6 i6 = fusion::next(i5); typedef typename result_of::next< I6>::type I7; I7 i7 = fusion::next(i6); typedef typename result_of::next< I7>::type I8; I8 i8 = fusion::next(i7); typedef typename result_of::next< I8>::type I9; I9 i9 = fusion::next(i8); typedef typename result_of::next< I9>::type I10; I10 i10 = fusion::next(i9); typedef typename result_of::next< I10>::type I11; I11 i11 = fusion::next(i10); typedef typename result_of::next< I11>::type I12; I12 i12 = fusion::next(i11); typedef typename result_of::next< I12>::type I13; I13 i13 = fusion::next(i12); typedef typename result_of::next< I13>::type I14; I14 i14 = fusion::next(i13); typedef typename result_of::next< I14>::type I15; I15 i15 = fusion::next(i14); typedef typename result_of::next< I15>::type I16; I16 i16 = fusion::next(i15); typedef typename result_of::next< I16>::type I17; I17 i17 = fusion::next(i16); typedef typename result_of::next< I17>::type I18; I18 i18 = fusion::next(i17); typedef typename result_of::next< I18>::type I19; I19 i19 = fusion::next(i18); typedef typename result_of::next< I19>::type I20; I20 i20 = fusion::next(i19); typedef typename result_of::next< I20>::type I21; I21 i21 = fusion::next(i20); typedef typename result_of::next< I21>::type I22; I22 i22 = fusion::next(i21); typedef typename result_of::next< I22>::type I23; I23 i23 = fusion::next(i22); typedef typename result_of::next< I23>::type I24; I24 i24 = fusion::next(i23); typedef typename result_of::next< I24>::type I25; I25 i25 = fusion::next(i24); typedef typename result_of::next< I25>::type I26; I26 i26 = fusion::next(i25); typedef typename result_of::next< I26>::type I27; I27 i27 = fusion::next(i26); typedef typename result_of::next< I27>::type I28; I28 i28 = fusion::next(i27); typedef typename result_of::next< I28>::type I29; I29 i29 = fusion::next(i28); typedef typename result_of::next< I29>::type I30; I30 i30 = fusion::next(i29); typedef typename result_of::next< I30>::type I31; I31 i31 = fusion::next(i30); typedef typename result_of::next< I31>::type I32; I32 i32 = fusion::next(i31); typedef typename result_of::next< I32>::type I33; I33 i33 = fusion::next(i32); typedef typename result_of::next< I33>::type I34; I34 i34 = fusion::next(i33); typedef typename result_of::next< I34>::type I35; I35 i35 = fusion::next(i34); typedef typename result_of::next< I35>::type I36; I36 i36 = fusion::next(i35); typedef typename result_of::next< I36>::type I37; I37 i37 = fusion::next(i36); typedef typename result_of::next< I37>::type I38; I38 i38 = fusion::next(i37); typedef typename result_of::next< I38>::type I39; I39 i39 = fusion::next(i38); typedef typename result_of::next< I39>::type I40; I40 i40 = fusion::next(i39); typedef typename result_of::next< I40>::type I41; I41 i41 = fusion::next(i40); typedef typename result_of::next< I41>::type I42; I42 i42 = fusion::next(i41); typedef typename result_of::next< I42>::type I43; I43 i43 = fusion::next(i42); typedef typename result_of::next< I43>::type I44; I44 i44 = fusion::next(i43); typedef typename result_of::next< I44>::type I45; I45 i45 = fusion::next(i44); typedef typename result_of::next< I45>::type I46; I46 i46 = fusion::next(i45); typedef typename result_of::next< I46>::type I47; I47 i47 = fusion::next(i46); typedef typename result_of::next< I47>::type I48; I48 i48 = fusion::next(i47); typedef typename result_of::next< I48>::type I49; I49 i49 = fusion::next(i48); + this->m0 = *i0; this->m1 = *i1; this->m2 = *i2; this->m3 = *i3; this->m4 = *i4; this->m5 = *i5; this->m6 = *i6; this->m7 = *i7; this->m8 = *i8; this->m9 = *i9; this->m10 = *i10; this->m11 = *i11; this->m12 = *i12; this->m13 = *i13; this->m14 = *i14; this->m15 = *i15; this->m16 = *i16; this->m17 = *i17; this->m18 = *i18; this->m19 = *i19; this->m20 = *i20; this->m21 = *i21; this->m22 = *i22; this->m23 = *i23; this->m24 = *i24; this->m25 = *i25; this->m26 = *i26; this->m27 = *i27; this->m28 = *i28; this->m29 = *i29; this->m30 = *i30; this->m31 = *i31; this->m32 = *i32; this->m33 = *i33; this->m34 = *i34; this->m35 = *i35; this->m36 = *i36; this->m37 = *i37; this->m38 = *i38; this->m39 = *i39; this->m40 = *i40; this->m41 = *i41; this->m42 = *i42; this->m43 = *i43; this->m44 = *i44; this->m45 = *i45; this->m46 = *i46; this->m47 = *i47; this->m48 = *i48; this->m49 = *i49; + return *this; + } + typename add_reference::type at_impl(mpl::int_<0>) { return this->m0; } typename add_reference::type>::type at_impl(mpl::int_<0>) const { return this->m0; } typename add_reference::type at_impl(mpl::int_<1>) { return this->m1; } typename add_reference::type>::type at_impl(mpl::int_<1>) const { return this->m1; } typename add_reference::type at_impl(mpl::int_<2>) { return this->m2; } typename add_reference::type>::type at_impl(mpl::int_<2>) const { return this->m2; } typename add_reference::type at_impl(mpl::int_<3>) { return this->m3; } typename add_reference::type>::type at_impl(mpl::int_<3>) const { return this->m3; } typename add_reference::type at_impl(mpl::int_<4>) { return this->m4; } typename add_reference::type>::type at_impl(mpl::int_<4>) const { return this->m4; } typename add_reference::type at_impl(mpl::int_<5>) { return this->m5; } typename add_reference::type>::type at_impl(mpl::int_<5>) const { return this->m5; } typename add_reference::type at_impl(mpl::int_<6>) { return this->m6; } typename add_reference::type>::type at_impl(mpl::int_<6>) const { return this->m6; } typename add_reference::type at_impl(mpl::int_<7>) { return this->m7; } typename add_reference::type>::type at_impl(mpl::int_<7>) const { return this->m7; } typename add_reference::type at_impl(mpl::int_<8>) { return this->m8; } typename add_reference::type>::type at_impl(mpl::int_<8>) const { return this->m8; } typename add_reference::type at_impl(mpl::int_<9>) { return this->m9; } typename add_reference::type>::type at_impl(mpl::int_<9>) const { return this->m9; } typename add_reference::type at_impl(mpl::int_<10>) { return this->m10; } typename add_reference::type>::type at_impl(mpl::int_<10>) const { return this->m10; } typename add_reference::type at_impl(mpl::int_<11>) { return this->m11; } typename add_reference::type>::type at_impl(mpl::int_<11>) const { return this->m11; } typename add_reference::type at_impl(mpl::int_<12>) { return this->m12; } typename add_reference::type>::type at_impl(mpl::int_<12>) const { return this->m12; } typename add_reference::type at_impl(mpl::int_<13>) { return this->m13; } typename add_reference::type>::type at_impl(mpl::int_<13>) const { return this->m13; } typename add_reference::type at_impl(mpl::int_<14>) { return this->m14; } typename add_reference::type>::type at_impl(mpl::int_<14>) const { return this->m14; } typename add_reference::type at_impl(mpl::int_<15>) { return this->m15; } typename add_reference::type>::type at_impl(mpl::int_<15>) const { return this->m15; } typename add_reference::type at_impl(mpl::int_<16>) { return this->m16; } typename add_reference::type>::type at_impl(mpl::int_<16>) const { return this->m16; } typename add_reference::type at_impl(mpl::int_<17>) { return this->m17; } typename add_reference::type>::type at_impl(mpl::int_<17>) const { return this->m17; } typename add_reference::type at_impl(mpl::int_<18>) { return this->m18; } typename add_reference::type>::type at_impl(mpl::int_<18>) const { return this->m18; } typename add_reference::type at_impl(mpl::int_<19>) { return this->m19; } typename add_reference::type>::type at_impl(mpl::int_<19>) const { return this->m19; } typename add_reference::type at_impl(mpl::int_<20>) { return this->m20; } typename add_reference::type>::type at_impl(mpl::int_<20>) const { return this->m20; } typename add_reference::type at_impl(mpl::int_<21>) { return this->m21; } typename add_reference::type>::type at_impl(mpl::int_<21>) const { return this->m21; } typename add_reference::type at_impl(mpl::int_<22>) { return this->m22; } typename add_reference::type>::type at_impl(mpl::int_<22>) const { return this->m22; } typename add_reference::type at_impl(mpl::int_<23>) { return this->m23; } typename add_reference::type>::type at_impl(mpl::int_<23>) const { return this->m23; } typename add_reference::type at_impl(mpl::int_<24>) { return this->m24; } typename add_reference::type>::type at_impl(mpl::int_<24>) const { return this->m24; } typename add_reference::type at_impl(mpl::int_<25>) { return this->m25; } typename add_reference::type>::type at_impl(mpl::int_<25>) const { return this->m25; } typename add_reference::type at_impl(mpl::int_<26>) { return this->m26; } typename add_reference::type>::type at_impl(mpl::int_<26>) const { return this->m26; } typename add_reference::type at_impl(mpl::int_<27>) { return this->m27; } typename add_reference::type>::type at_impl(mpl::int_<27>) const { return this->m27; } typename add_reference::type at_impl(mpl::int_<28>) { return this->m28; } typename add_reference::type>::type at_impl(mpl::int_<28>) const { return this->m28; } typename add_reference::type at_impl(mpl::int_<29>) { return this->m29; } typename add_reference::type>::type at_impl(mpl::int_<29>) const { return this->m29; } typename add_reference::type at_impl(mpl::int_<30>) { return this->m30; } typename add_reference::type>::type at_impl(mpl::int_<30>) const { return this->m30; } typename add_reference::type at_impl(mpl::int_<31>) { return this->m31; } typename add_reference::type>::type at_impl(mpl::int_<31>) const { return this->m31; } typename add_reference::type at_impl(mpl::int_<32>) { return this->m32; } typename add_reference::type>::type at_impl(mpl::int_<32>) const { return this->m32; } typename add_reference::type at_impl(mpl::int_<33>) { return this->m33; } typename add_reference::type>::type at_impl(mpl::int_<33>) const { return this->m33; } typename add_reference::type at_impl(mpl::int_<34>) { return this->m34; } typename add_reference::type>::type at_impl(mpl::int_<34>) const { return this->m34; } typename add_reference::type at_impl(mpl::int_<35>) { return this->m35; } typename add_reference::type>::type at_impl(mpl::int_<35>) const { return this->m35; } typename add_reference::type at_impl(mpl::int_<36>) { return this->m36; } typename add_reference::type>::type at_impl(mpl::int_<36>) const { return this->m36; } typename add_reference::type at_impl(mpl::int_<37>) { return this->m37; } typename add_reference::type>::type at_impl(mpl::int_<37>) const { return this->m37; } typename add_reference::type at_impl(mpl::int_<38>) { return this->m38; } typename add_reference::type>::type at_impl(mpl::int_<38>) const { return this->m38; } typename add_reference::type at_impl(mpl::int_<39>) { return this->m39; } typename add_reference::type>::type at_impl(mpl::int_<39>) const { return this->m39; } typename add_reference::type at_impl(mpl::int_<40>) { return this->m40; } typename add_reference::type>::type at_impl(mpl::int_<40>) const { return this->m40; } typename add_reference::type at_impl(mpl::int_<41>) { return this->m41; } typename add_reference::type>::type at_impl(mpl::int_<41>) const { return this->m41; } typename add_reference::type at_impl(mpl::int_<42>) { return this->m42; } typename add_reference::type>::type at_impl(mpl::int_<42>) const { return this->m42; } typename add_reference::type at_impl(mpl::int_<43>) { return this->m43; } typename add_reference::type>::type at_impl(mpl::int_<43>) const { return this->m43; } typename add_reference::type at_impl(mpl::int_<44>) { return this->m44; } typename add_reference::type>::type at_impl(mpl::int_<44>) const { return this->m44; } typename add_reference::type at_impl(mpl::int_<45>) { return this->m45; } typename add_reference::type>::type at_impl(mpl::int_<45>) const { return this->m45; } typename add_reference::type at_impl(mpl::int_<46>) { return this->m46; } typename add_reference::type>::type at_impl(mpl::int_<46>) const { return this->m46; } typename add_reference::type at_impl(mpl::int_<47>) { return this->m47; } typename add_reference::type>::type at_impl(mpl::int_<47>) const { return this->m47; } typename add_reference::type at_impl(mpl::int_<48>) { return this->m48; } typename add_reference::type>::type at_impl(mpl::int_<48>) const { return this->m48; } typename add_reference::type at_impl(mpl::int_<49>) { return this->m49; } typename add_reference::type>::type at_impl(mpl::int_<49>) const { return this->m49; } + template + typename add_reference::type>::type + at_impl(I) + { + return this->at_impl(mpl::int_()); + } + template + typename add_reference::type>::type>::type + at_impl(I) const + { + return this->at_impl(mpl::int_()); + } + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50_fwd.hpp new file mode 100644 index 0000000000..6829e9b50f --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector50_fwd.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + + template + struct vector41; + template + struct vector42; + template + struct vector43; + template + struct vector44; + template + struct vector45; + template + struct vector46; + template + struct vector47; + template + struct vector48; + template + struct vector49; + template + struct vector50; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser.hpp new file mode 100644 index 0000000000..e956bf24e1 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser10.hpp new file mode 100644 index 0000000000..d631b53208 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser10.hpp @@ -0,0 +1,84 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct vector_n_chooser + { + typedef vector10 type; + }; + template <> + struct vector_n_chooser + { + typedef vector0<> type; + }; + template + struct vector_n_chooser< + T0 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector1 type; + }; + template + struct vector_n_chooser< + T0 , T1 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector2 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 + , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector3 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 + , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector4 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 + , void_ , void_ , void_ , void_ , void_> + { + typedef vector5 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 + , void_ , void_ , void_ , void_> + { + typedef vector6 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 + , void_ , void_ , void_> + { + typedef vector7 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 + , void_ , void_> + { + typedef vector8 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + , void_> + { + typedef vector9 type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser20.hpp new file mode 100644 index 0000000000..9628f483ed --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser20.hpp @@ -0,0 +1,154 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct vector_n_chooser + { + typedef vector20 type; + }; + template <> + struct vector_n_chooser + { + typedef vector0<> type; + }; + template + struct vector_n_chooser< + T0 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector1 type; + }; + template + struct vector_n_chooser< + T0 , T1 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector2 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector3 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector4 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector5 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector6 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector7 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector8 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector9 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector10 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector11 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector12 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector13 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector14 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + , void_ , void_ , void_ , void_ , void_> + { + typedef vector15 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + , void_ , void_ , void_ , void_> + { + typedef vector16 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + , void_ , void_ , void_> + { + typedef vector17 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + , void_ , void_> + { + typedef vector18 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + , void_> + { + typedef vector19 type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser30.hpp new file mode 100644 index 0000000000..38edabf45e --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser30.hpp @@ -0,0 +1,224 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct vector_n_chooser + { + typedef vector30 type; + }; + template <> + struct vector_n_chooser + { + typedef vector0<> type; + }; + template + struct vector_n_chooser< + T0 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector1 type; + }; + template + struct vector_n_chooser< + T0 , T1 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector2 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector3 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector4 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector5 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector6 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector7 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector8 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector9 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector10 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector11 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector12 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector13 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector14 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector15 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector16 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector17 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector18 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector19 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector20 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector21 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector22 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 + , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector23 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 + , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector24 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 + , void_ , void_ , void_ , void_ , void_> + { + typedef vector25 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 + , void_ , void_ , void_ , void_> + { + typedef vector26 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 + , void_ , void_ , void_> + { + typedef vector27 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 + , void_ , void_> + { + typedef vector28 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 + , void_> + { + typedef vector29 type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser40.hpp new file mode 100644 index 0000000000..a784b75736 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser40.hpp @@ -0,0 +1,294 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct vector_n_chooser + { + typedef vector40 type; + }; + template <> + struct vector_n_chooser + { + typedef vector0<> type; + }; + template + struct vector_n_chooser< + T0 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector1 type; + }; + template + struct vector_n_chooser< + T0 , T1 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector2 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector3 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector4 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector5 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector6 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector7 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector8 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector9 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector10 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector11 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector12 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector13 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector14 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector15 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector16 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector17 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector18 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector19 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector20 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector21 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector22 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector23 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector24 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector25 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector26 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector27 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector28 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector29 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector30 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector31 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector32 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 + , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector33 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 + , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector34 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 + , void_ , void_ , void_ , void_ , void_> + { + typedef vector35 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 + , void_ , void_ , void_ , void_> + { + typedef vector36 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 + , void_ , void_ , void_> + { + typedef vector37 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 + , void_ , void_> + { + typedef vector38 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 + , void_> + { + typedef vector39 type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser50.hpp new file mode 100644 index 0000000000..fc9a260e20 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_chooser50.hpp @@ -0,0 +1,364 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion { namespace detail +{ + template + struct vector_n_chooser + { + typedef vector50 type; + }; + template <> + struct vector_n_chooser + { + typedef vector0<> type; + }; + template + struct vector_n_chooser< + T0 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector1 type; + }; + template + struct vector_n_chooser< + T0 , T1 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector2 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector3 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector4 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector5 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector6 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector7 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector8 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector9 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector10 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector11 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector12 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector13 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector14 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector15 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector16 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector17 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector18 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector19 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector20 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector21 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector22 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector23 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector24 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector25 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector26 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector27 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector28 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector29 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector30 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector31 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector32 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector33 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector34 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector35 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector36 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector37 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector38 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector39 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector40 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector41 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 + , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector42 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 + , void_ , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector43 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 + , void_ , void_ , void_ , void_ , void_ , void_> + { + typedef vector44 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 + , void_ , void_ , void_ , void_ , void_> + { + typedef vector45 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 + , void_ , void_ , void_ , void_> + { + typedef vector46 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 + , void_ , void_ , void_> + { + typedef vector47 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 + , void_ , void_> + { + typedef vector48 type; + }; + template + struct vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 + , void_> + { + typedef vector49 type; + }; +}}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_fwd.hpp new file mode 100644 index 0000000000..e2576f9004 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vector_fwd.hpp @@ -0,0 +1,22 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp new file mode 100644 index 0000000000..8e6f1f68a1 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp @@ -0,0 +1,122 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct vector + : sequence_base > + { + private: + typedef typename detail::vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9>::type + vector_n; + template + friend struct vector; + public: + typedef typename vector_n::types types; + typedef typename vector_n::fusion_tag fusion_tag; + typedef typename vector_n::tag tag; + typedef typename vector_n::size size; + typedef typename vector_n::category category; + typedef typename vector_n::is_view is_view; + vector() + : vec() {} + template + vector(vector const& rhs) + : vec(rhs.vec) {} + vector(vector const& rhs) + : vec(rhs.vec) {} + template + vector(Sequence const& rhs) + : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} + + + + + + + + explicit + vector(typename detail::call_param::type _0) + : vec(_0) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : vec(_0 , _1) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : vec(_0 , _1 , _2) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : vec(_0 , _1 , _2 , _3) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : vec(_0 , _1 , _2 , _3 , _4) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : vec(_0 , _1 , _2 , _3 , _4 , _5) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + vector& + operator=(vector const& rhs) + { + vec = rhs.vec; + return *this; + } + template + vector& + operator=(T const& rhs) + { + vec = rhs; + return *this; + } + template + typename add_reference< + typename mpl::at_c::type + >::type + at_impl(mpl::int_ index) + { + return vec.at_impl(index); + } + template + typename add_reference< + typename add_const< + typename mpl::at_c::type + >::type + >::type + at_impl(mpl::int_ index) const + { + return vec.at_impl(index); + } + template + typename add_reference< + typename mpl::at::type + >::type + at_impl(I ) + { + return vec.at_impl(mpl::int_()); + } + template + typename add_reference< + typename add_const< + typename mpl::at::type + >::type + >::type + at_impl(I ) const + { + return vec.at_impl(mpl::int_()); + } + private: + BOOST_FUSION_VECTOR_CTOR_HELPER() + vector_n vec; + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10_fwd.hpp new file mode 100644 index 0000000000..97f64fa359 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector10_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + > + struct vector; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp new file mode 100644 index 0000000000..bc04fefeed --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp @@ -0,0 +1,142 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct vector + : sequence_base > + { + private: + typedef typename detail::vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19>::type + vector_n; + template + friend struct vector; + public: + typedef typename vector_n::types types; + typedef typename vector_n::fusion_tag fusion_tag; + typedef typename vector_n::tag tag; + typedef typename vector_n::size size; + typedef typename vector_n::category category; + typedef typename vector_n::is_view is_view; + vector() + : vec() {} + template + vector(vector const& rhs) + : vec(rhs.vec) {} + vector(vector const& rhs) + : vec(rhs.vec) {} + template + vector(Sequence const& rhs) + : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} + + + + + + + + explicit + vector(typename detail::call_param::type _0) + : vec(_0) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : vec(_0 , _1) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : vec(_0 , _1 , _2) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : vec(_0 , _1 , _2 , _3) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : vec(_0 , _1 , _2 , _3 , _4) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : vec(_0 , _1 , _2 , _3 , _4 , _5) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + vector& + operator=(vector const& rhs) + { + vec = rhs.vec; + return *this; + } + template + vector& + operator=(T const& rhs) + { + vec = rhs; + return *this; + } + template + typename add_reference< + typename mpl::at_c::type + >::type + at_impl(mpl::int_ index) + { + return vec.at_impl(index); + } + template + typename add_reference< + typename add_const< + typename mpl::at_c::type + >::type + >::type + at_impl(mpl::int_ index) const + { + return vec.at_impl(index); + } + template + typename add_reference< + typename mpl::at::type + >::type + at_impl(I ) + { + return vec.at_impl(mpl::int_()); + } + template + typename add_reference< + typename add_const< + typename mpl::at::type + >::type + >::type + at_impl(I ) const + { + return vec.at_impl(mpl::int_()); + } + private: + BOOST_FUSION_VECTOR_CTOR_HELPER() + vector_n vec; + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20_fwd.hpp new file mode 100644 index 0000000000..8d4ea992d1 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector20_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + > + struct vector; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp new file mode 100644 index 0000000000..0841920a27 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp @@ -0,0 +1,162 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct vector + : sequence_base > + { + private: + typedef typename detail::vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29>::type + vector_n; + template + friend struct vector; + public: + typedef typename vector_n::types types; + typedef typename vector_n::fusion_tag fusion_tag; + typedef typename vector_n::tag tag; + typedef typename vector_n::size size; + typedef typename vector_n::category category; + typedef typename vector_n::is_view is_view; + vector() + : vec() {} + template + vector(vector const& rhs) + : vec(rhs.vec) {} + vector(vector const& rhs) + : vec(rhs.vec) {} + template + vector(Sequence const& rhs) + : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} + + + + + + + + explicit + vector(typename detail::call_param::type _0) + : vec(_0) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : vec(_0 , _1) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : vec(_0 , _1 , _2) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : vec(_0 , _1 , _2 , _3) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : vec(_0 , _1 , _2 , _3 , _4) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : vec(_0 , _1 , _2 , _3 , _4 , _5) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + vector& + operator=(vector const& rhs) + { + vec = rhs.vec; + return *this; + } + template + vector& + operator=(T const& rhs) + { + vec = rhs; + return *this; + } + template + typename add_reference< + typename mpl::at_c::type + >::type + at_impl(mpl::int_ index) + { + return vec.at_impl(index); + } + template + typename add_reference< + typename add_const< + typename mpl::at_c::type + >::type + >::type + at_impl(mpl::int_ index) const + { + return vec.at_impl(index); + } + template + typename add_reference< + typename mpl::at::type + >::type + at_impl(I ) + { + return vec.at_impl(mpl::int_()); + } + template + typename add_reference< + typename add_const< + typename mpl::at::type + >::type + >::type + at_impl(I ) const + { + return vec.at_impl(mpl::int_()); + } + private: + BOOST_FUSION_VECTOR_CTOR_HELPER() + vector_n vec; + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30_fwd.hpp new file mode 100644 index 0000000000..03f289e9c9 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector30_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + > + struct vector; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp new file mode 100644 index 0000000000..11d9cc7d66 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp @@ -0,0 +1,182 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct vector + : sequence_base > + { + private: + typedef typename detail::vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39>::type + vector_n; + template + friend struct vector; + public: + typedef typename vector_n::types types; + typedef typename vector_n::fusion_tag fusion_tag; + typedef typename vector_n::tag tag; + typedef typename vector_n::size size; + typedef typename vector_n::category category; + typedef typename vector_n::is_view is_view; + vector() + : vec() {} + template + vector(vector const& rhs) + : vec(rhs.vec) {} + vector(vector const& rhs) + : vec(rhs.vec) {} + template + vector(Sequence const& rhs) + : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} + + + + + + + + explicit + vector(typename detail::call_param::type _0) + : vec(_0) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : vec(_0 , _1) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : vec(_0 , _1 , _2) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : vec(_0 , _1 , _2 , _3) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : vec(_0 , _1 , _2 , _3 , _4) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : vec(_0 , _1 , _2 , _3 , _4 , _5) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + template + vector& + operator=(vector const& rhs) + { + vec = rhs.vec; + return *this; + } + template + vector& + operator=(T const& rhs) + { + vec = rhs; + return *this; + } + template + typename add_reference< + typename mpl::at_c::type + >::type + at_impl(mpl::int_ index) + { + return vec.at_impl(index); + } + template + typename add_reference< + typename add_const< + typename mpl::at_c::type + >::type + >::type + at_impl(mpl::int_ index) const + { + return vec.at_impl(index); + } + template + typename add_reference< + typename mpl::at::type + >::type + at_impl(I ) + { + return vec.at_impl(mpl::int_()); + } + template + typename add_reference< + typename add_const< + typename mpl::at::type + >::type + >::type + at_impl(I ) const + { + return vec.at_impl(mpl::int_()); + } + private: + BOOST_FUSION_VECTOR_CTOR_HELPER() + vector_n vec; + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40_fwd.hpp new file mode 100644 index 0000000000..55c1097a75 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector40_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + > + struct vector; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp new file mode 100644 index 0000000000..1ac6c6f423 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp @@ -0,0 +1,202 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + struct fusion_sequence_tag; + template + struct vector + : sequence_base > + { + private: + typedef typename detail::vector_n_chooser< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49>::type + vector_n; + template + friend struct vector; + public: + typedef typename vector_n::types types; + typedef typename vector_n::fusion_tag fusion_tag; + typedef typename vector_n::tag tag; + typedef typename vector_n::size size; + typedef typename vector_n::category category; + typedef typename vector_n::is_view is_view; + vector() + : vec() {} + template + vector(vector const& rhs) + : vec(rhs.vec) {} + vector(vector const& rhs) + : vec(rhs.vec) {} + template + vector(Sequence const& rhs) + : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} + + + + + + + + explicit + vector(typename detail::call_param::type _0) + : vec(_0) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : vec(_0 , _1) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : vec(_0 , _1 , _2) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : vec(_0 , _1 , _2 , _3) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : vec(_0 , _1 , _2 , _3 , _4) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : vec(_0 , _1 , _2 , _3 , _4 , _5) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} + vector(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + : vec(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} + template + vector& + operator=(vector const& rhs) + { + vec = rhs.vec; + return *this; + } + template + vector& + operator=(T const& rhs) + { + vec = rhs; + return *this; + } + template + typename add_reference< + typename mpl::at_c::type + >::type + at_impl(mpl::int_ index) + { + return vec.at_impl(index); + } + template + typename add_reference< + typename add_const< + typename mpl::at_c::type + >::type + >::type + at_impl(mpl::int_ index) const + { + return vec.at_impl(index); + } + template + typename add_reference< + typename mpl::at::type + >::type + at_impl(I ) + { + return vec.at_impl(mpl::int_()); + } + template + typename add_reference< + typename add_const< + typename mpl::at::type + >::type + >::type + at_impl(I ) const + { + return vec.at_impl(mpl::int_()); + } + private: + BOOST_FUSION_VECTOR_CTOR_HELPER() + vector_n vec; + }; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50_fwd.hpp b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50_fwd.hpp new file mode 100644 index 0000000000..621f1606bf --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/detail/preprocessed/vvector50_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + > + struct vector; +}} diff --git a/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp index 610591b68c..b0a6a684db 100644 --- a/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/prior_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp index 0178054b41..b5aeb199e9 100644 --- a/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp b/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp index 3a775fbbac..e10c5225b3 100644 --- a/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp b/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp index e4680bb8bb..92f7aa6c2e 100644 --- a/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp b/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp index 33484c5da7..4e249c7fe7 100644 --- a/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -68,6 +68,16 @@ return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); } + template + static BOOST_PP_CAT(vector_data, N) + init_from_sequence(Sequence& seq) + { + typedef typename result_of::begin::type I0; + I0 i0 = fusion::begin(seq); + BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) + return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); + } + BOOST_PP_REPEAT(N, FUSION_MEMBER_DECL, _) }; @@ -104,7 +114,16 @@ BOOST_PP_CAT(vector, N)( Sequence const& seq #if (N == 1) - , typename disable_if >::type* /*dummy*/ = 0 + , typename boost::disable_if >::type* /*dummy*/ = 0 +#endif + ) + : base_type(base_type::init_from_sequence(seq)) {} + + template + BOOST_PP_CAT(vector, N)( + Sequence& seq +#if (N == 1) + , typename boost::disable_if >::type* /*dummy*/ = 0 #endif ) : base_type(base_type::init_from_sequence(seq)) {} @@ -118,7 +137,7 @@ } template - typename disable_if, this_type&>::type + typename boost::disable_if, this_type&>::type operator=(Sequence const& seq) { typedef typename result_of::begin::type I0; diff --git a/3party/boost/boost/fusion/container/vector/detail/vector_n_chooser.hpp b/3party/boost/boost/fusion/container/vector/detail/vector_n_chooser.hpp index f4b85d89c4..b0e69afc79 100644 --- a/3party/boost/boost/fusion/container/vector/detail/vector_n_chooser.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/vector_n_chooser.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -37,6 +37,26 @@ namespace boost { namespace fusion struct void_; }} +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "preprocessed/vector_chooser" FUSION_MAX_VECTOR_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { namespace detail { template @@ -58,6 +78,12 @@ namespace boost { namespace fusion { namespace detail }}} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/vector/limits.hpp b/3party/boost/boost/fusion/container/vector/limits.hpp index 0e7e3a0359..e1b6042d6b 100644 --- a/3party/boost/boost/fusion/container/vector/limits.hpp +++ b/3party/boost/boost/fusion/container/vector/limits.hpp @@ -1,12 +1,14 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR_LIMITS_07072005_1246) #define FUSION_VECTOR_LIMITS_07072005_1246 +#include + #if !defined(FUSION_MAX_VECTOR_SIZE) # define FUSION_MAX_VECTOR_SIZE 10 #else @@ -16,4 +18,6 @@ # endif #endif +#define FUSION_MAX_VECTOR_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_VECTOR_SIZE)) + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector.hpp b/3party/boost/boost/fusion/container/vector/vector.hpp index 8eaa6a6f61..6563bc933b 100644 --- a/3party/boost/boost/fusion/container/vector/vector.hpp +++ b/3party/boost/boost/fusion/container/vector/vector.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -17,6 +17,58 @@ #include #include +#if !defined(__WAVE__) + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) + +#define BOOST_FUSION_VECTOR_COPY_INIT() \ + ctor_helper(rhs, is_base_of()) \ + +#define BOOST_FUSION_VECTOR_CTOR_HELPER() \ + static vector_n const& \ + ctor_helper(vector const& rhs, mpl::true_) \ + { \ + return rhs.vec; \ + } \ + \ + template \ + static T const& \ + ctor_helper(T const& rhs, mpl::false_) \ + { \ + return rhs; \ + } + +#else + +#define BOOST_FUSION_VECTOR_COPY_INIT() \ + rhs \ + +#define BOOST_FUSION_VECTOR_CTOR_HELPER() + +#endif + +#endif // !defined(__WAVE__) + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vvector" FUSION_MAX_VECTOR_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -56,11 +108,7 @@ namespace boost { namespace fusion template vector(Sequence const& rhs) -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) - : vec(ctor_helper(rhs, is_base_of())) {} -#else - : vec(rhs) {} -#endif + : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} // Expand a couple of forwarding constructors for arguments // of type (T0), (T0, T1), (T0, T1, T2) etc. Example: @@ -129,23 +177,15 @@ namespace boost { namespace fusion private: -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600) - static vector_n const& - ctor_helper(vector const& rhs, mpl::true_) - { - return rhs.vec; - } - - template - static T const& - ctor_helper(T const& rhs, mpl::false_) - { - return rhs; - } -#endif - + BOOST_FUSION_VECTOR_CTOR_HELPER() vector_n vec; }; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector10.hpp b/3party/boost/boost/fusion/container/vector/vector10.hpp index f1af70d72e..bcafe59981 100644 --- a/3party/boost/boost/fusion/container/vector/vector10.hpp +++ b/3party/boost/boost/fusion/container/vector/vector10.hpp @@ -1,12 +1,13 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR10_05042005_0257) #define FUSION_VECTOR10_05042005_0257 +#include #include #include #include @@ -39,7 +40,7 @@ namespace boost { namespace fusion struct fusion_sequence_tag; struct random_access_traversal_tag; - template + template struct vector0 : sequence_base > { typedef mpl::vector0<> types; @@ -55,6 +56,30 @@ namespace boost { namespace fusion vector0(Sequence const& /*seq*/) {} }; +}} + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector10.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ // expand vector1 to vector10 #define BOOST_PP_FILENAME_1 @@ -63,5 +88,10 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) #endif +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif diff --git a/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp new file mode 100644 index 0000000000..5f8c2188c3 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/vector10_fwd.hpp @@ -0,0 +1,63 @@ +#ifndef BOOST_PP_IS_ITERATING +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED) +#define BOOST_FUSION_VECTOR10_FWD_HPP_INCLUDED + +#include +#include +#include + +namespace boost { namespace fusion +{ + template + struct vector0; +}} + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector10_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ + // expand vector1 to vector10 + #define BOOST_PP_FILENAME_1 + #define BOOST_PP_ITERATION_LIMITS (1, 10) + #include BOOST_PP_ITERATE() +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif + +#else + + template + struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); + +#endif diff --git a/3party/boost/boost/fusion/container/vector/vector20.hpp b/3party/boost/boost/fusion/container/vector/vector20.hpp index be71100640..d688a0d22e 100644 --- a/3party/boost/boost/fusion/container/vector/vector20.hpp +++ b/3party/boost/boost/fusion/container/vector/vector20.hpp @@ -1,12 +1,14 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR20_05052005_0205) #define FUSION_VECTOR20_05052005_0205 +#include #include #include #include @@ -33,6 +35,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector20.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct vector_tag; @@ -46,5 +68,11 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp new file mode 100644 index 0000000000..4102888f3e --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/vector20_fwd.hpp @@ -0,0 +1,58 @@ +#ifndef BOOST_PP_IS_ITERATING +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED) +#define BOOST_FUSION_VECTOR20_FWD_HPP_INCLUDED + +#include +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector20_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ + // expand vector11 to vector20 + #define BOOST_PP_FILENAME_1 + #define BOOST_PP_ITERATION_LIMITS (11, 20) + #include BOOST_PP_ITERATE() +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif + +#else + + template + struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); + +#endif diff --git a/3party/boost/boost/fusion/container/vector/vector30.hpp b/3party/boost/boost/fusion/container/vector/vector30.hpp index efbe92937b..4080005ad6 100644 --- a/3party/boost/boost/fusion/container/vector/vector30.hpp +++ b/3party/boost/boost/fusion/container/vector/vector30.hpp @@ -1,12 +1,13 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR30_05052005_0206) #define FUSION_VECTOR30_05052005_0206 +#include #include #include #include @@ -33,12 +34,32 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector30.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct vector_tag; struct fusion_sequence_tag; struct random_access_traversal_tag; - + // expand vector21 to vector30 #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (21, 30) @@ -46,5 +67,11 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp new file mode 100644 index 0000000000..9b60644929 --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/vector30_fwd.hpp @@ -0,0 +1,58 @@ +#ifndef BOOST_PP_IS_ITERATING +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED) +#define BOOST_FUSION_VECTOR30_FWD_HPP_INCLUDED + +#include +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector30_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ + // expand vector21 to vector30 + #define BOOST_PP_FILENAME_1 + #define BOOST_PP_ITERATION_LIMITS (21, 30) + #include BOOST_PP_ITERATE() +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif + +#else + + template + struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); + +#endif diff --git a/3party/boost/boost/fusion/container/vector/vector40.hpp b/3party/boost/boost/fusion/container/vector/vector40.hpp index b72a23c5f1..3350badbc4 100644 --- a/3party/boost/boost/fusion/container/vector/vector40.hpp +++ b/3party/boost/boost/fusion/container/vector/vector40.hpp @@ -1,12 +1,14 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR40_05052005_0208) #define FUSION_VECTOR40_05052005_0208 +#include #include #include #include @@ -33,6 +35,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector40.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct vector_tag; @@ -46,5 +68,11 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp new file mode 100644 index 0000000000..05342d1dea --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/vector40_fwd.hpp @@ -0,0 +1,58 @@ +#ifndef BOOST_PP_IS_ITERATING +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED) +#define BOOST_FUSION_VECTOR40_FWD_HPP_INCLUDED + +#include +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector40_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ + // expand vector31 to vector40 + #define BOOST_PP_FILENAME_1 + #define BOOST_PP_ITERATION_LIMITS (31, 40) + #include BOOST_PP_ITERATE() +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif + +#else + + template + struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); + +#endif diff --git a/3party/boost/boost/fusion/container/vector/vector50.hpp b/3party/boost/boost/fusion/container/vector/vector50.hpp index ab8515d787..ec28828e7e 100644 --- a/3party/boost/boost/fusion/container/vector/vector50.hpp +++ b/3party/boost/boost/fusion/container/vector/vector50.hpp @@ -1,12 +1,13 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR50_05052005_0207) #define FUSION_VECTOR50_05052005_0207 +#include #include #include #include @@ -33,6 +34,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector50.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct vector_tag; @@ -46,5 +67,11 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp new file mode 100644 index 0000000000..03b3b2f87a --- /dev/null +++ b/3party/boost/boost/fusion/container/vector/vector50_fwd.hpp @@ -0,0 +1,58 @@ +#ifndef BOOST_PP_IS_ITERATING +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED) +#define BOOST_FUSION_VECTOR50_FWD_HPP_INCLUDED + +#include +#include +#include + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vector50_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2011 Eric Niebler + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ + // expand vector41 to vector50 + #define BOOST_PP_FILENAME_1 + #define BOOST_PP_ITERATION_LIMITS (41, 50) + #include BOOST_PP_ITERATE() +}} + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + +#endif + +#else + + template + struct BOOST_PP_CAT(vector, BOOST_PP_ITERATION()); + +#endif diff --git a/3party/boost/boost/fusion/container/vector/vector_fwd.hpp b/3party/boost/boost/fusion/container/vector/vector_fwd.hpp index 2c4848db5e..194736a250 100644 --- a/3party/boost/boost/fusion/container/vector/vector_fwd.hpp +++ b/3party/boost/boost/fusion/container/vector/vector_fwd.hpp @@ -1,8 +1,8 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_VECTOR_FORWARD_07072005_0125) @@ -11,6 +11,40 @@ #include #include +#include +#if (FUSION_MAX_VECTOR_SIZE > 10) +#include +#endif +#if (FUSION_MAX_VECTOR_SIZE > 20) +#include +#endif +#if (FUSION_MAX_VECTOR_SIZE > 30) +#include +#endif +#if (FUSION_MAX_VECTOR_SIZE > 40) +#include +#endif + +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/vvector" FUSION_MAX_VECTOR_SIZE_STR "_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -22,4 +56,10 @@ namespace boost { namespace fusion struct vector; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/container/vector/vector_iterator.hpp b/3party/boost/boost/fusion/container/vector/vector_iterator.hpp index 8faa13adac..66e9ebed26 100644 --- a/3party/boost/boost/fusion/container/vector/vector_iterator.hpp +++ b/3party/boost/boost/fusion/container/vector/vector_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/functional/adapter/unfused.hpp b/3party/boost/boost/fusion/functional/adapter/unfused.hpp index b0d02bc47c..facd5c5427 100644 --- a/3party/boost/boost/fusion/functional/adapter/unfused.hpp +++ b/3party/boost/boost/fusion/functional/adapter/unfused.hpp @@ -100,6 +100,7 @@ namespace boost { namespace fusion namespace boost { +#if !defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_NO_DECLTYPE) template struct result_of< boost::fusion::unfused const () > { @@ -110,6 +111,17 @@ namespace boost { typedef typename boost::fusion::unfused::call_0_result type; }; +#endif + template + struct tr1_result_of< boost::fusion::unfused const () > + { + typedef typename boost::fusion::unfused::call_const_0_result type; + }; + template + struct tr1_result_of< boost::fusion::unfused() > + { + typedef typename boost::fusion::unfused::call_0_result type; + }; } #define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_HPP_INCLUDED diff --git a/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp b/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp index 0f19f28f0b..923c6876c1 100644 --- a/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp +++ b/3party/boost/boost/fusion/functional/adapter/unfused_typed.hpp @@ -80,6 +80,7 @@ namespace boost { namespace fusion namespace boost { +#if !defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_NO_DECLTYPE) template struct result_of< boost::fusion::unfused_typed const () > : boost::fusion::unfused_typed::template result< @@ -90,6 +91,17 @@ namespace boost : boost::fusion::unfused_typed::template result< boost::fusion::unfused_typed () > { }; +#endif + template + struct tr1_result_of< boost::fusion::unfused_typed const () > + : boost::fusion::unfused_typed::template result< + boost::fusion::unfused_typed const () > + { }; + template + struct tr1_result_of< boost::fusion::unfused_typed() > + : boost::fusion::unfused_typed::template result< + boost::fusion::unfused_typed () > + { }; } diff --git a/3party/boost/boost/fusion/include/define_struct_inline.hpp b/3party/boost/boost/fusion/include/define_struct_inline.hpp new file mode 100644 index 0000000000..141ad4e2dd --- /dev/null +++ b/3party/boost/boost/fusion/include/define_struct_inline.hpp @@ -0,0 +1,13 @@ +/*============================================================================= + Copyright (c) 2012 Nathan Ridge + + 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 BOOST_FUSION_INCLUDE_DEFINE_STRUCT_INLINE_HPP +#define BOOST_FUSION_INCLUDE_DEFINE_STRUCT_INLINE_HPP + +#include + +#endif diff --git a/3party/boost/boost/fusion/include/is_segmented.hpp b/3party/boost/boost/fusion/include/is_segmented.hpp new file mode 100644 index 0000000000..28fa434651 --- /dev/null +++ b/3party/boost/boost/fusion/include/is_segmented.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_INCLUDE_IS_SEGMENTED) +#define BOOST_FUSION_INCLUDE_IS_SEGMENTED + +#include + +#endif diff --git a/3party/boost/boost/fusion/include/iterator_adapter.hpp b/3party/boost/boost/fusion/include/iterator_adapter.hpp new file mode 100644 index 0000000000..4ecdf2b2b4 --- /dev/null +++ b/3party/boost/boost/fusion/include/iterator_adapter.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(FUSION_INCLUDE_ITERATOR_ADAPTER) +#define FUSION_INCLUDE_ITERATOR_ADAPTER + +#include + +#endif diff --git a/3party/boost/boost/fusion/include/repetetive_view.hpp b/3party/boost/boost/fusion/include/repetitive_view.hpp similarity index 100% rename from 3party/boost/boost/fusion/include/repetetive_view.hpp rename to 3party/boost/boost/fusion/include/repetitive_view.hpp diff --git a/3party/boost/boost/fusion/include/segmented_fold_until.hpp b/3party/boost/boost/fusion/include/segmented_fold_until.hpp new file mode 100644 index 0000000000..d7fe06af57 --- /dev/null +++ b/3party/boost/boost/fusion/include/segmented_fold_until.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_INCLUDE_SEGMENTED_FOLD_UNTIL) +#define BOOST_FUSION_INCLUDE_SEGMENTED_FOLD_UNTIL + +#include + +#endif diff --git a/3party/boost/boost/fusion/include/segmented_iterator.hpp b/3party/boost/boost/fusion/include/segmented_iterator.hpp new file mode 100644 index 0000000000..6e8a4964b2 --- /dev/null +++ b/3party/boost/boost/fusion/include/segmented_iterator.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_INCLUDE_SEGMENTED_ITERATOR) +#define BOOST_FUSION_INCLUDE_SEGMENTED_ITERATOR + +#include + +#endif diff --git a/3party/boost/boost/fusion/include/segments.hpp b/3party/boost/boost/fusion/include/segments.hpp new file mode 100644 index 0000000000..7bc7b2bf02 --- /dev/null +++ b/3party/boost/boost/fusion/include/segments.hpp @@ -0,0 +1,12 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_INCLUDE_SEGMENTS) +#define BOOST_FUSION_INCLUDE_SEGMENTS + +#include + +#endif diff --git a/3party/boost/boost/fusion/iterator.hpp b/3party/boost/boost/fusion/iterator.hpp index c7f8e1ebc4..f8d5958a75 100644 --- a/3party/boost/boost/fusion/iterator.hpp +++ b/3party/boost/boost/fusion/iterator.hpp @@ -1,13 +1,15 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_ITERATOR_10022005_0559) #define FUSION_ITERATOR_10022005_0559 #include +#include +#include #include #include #include diff --git a/3party/boost/boost/fusion/iterator/advance.hpp b/3party/boost/boost/fusion/iterator/advance.hpp index 56ed60be7c..bfd8af4b64 100644 --- a/3party/boost/boost/fusion/iterator/advance.hpp +++ b/3party/boost/boost/fusion/iterator/advance.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_ADVANCE_09172005_1146) @@ -18,7 +18,7 @@ namespace boost { namespace fusion { struct random_access_traversal_tag; - + // Special tags: struct iterator_facade_tag; // iterator facade tag struct boost_array_iterator_tag; // boost::array iterator tag @@ -59,7 +59,7 @@ namespace boost { namespace fusion template <> struct advance_impl; } - + namespace result_of { template diff --git a/3party/boost/boost/fusion/iterator/deref.hpp b/3party/boost/boost/fusion/iterator/deref.hpp index 2d5f04ee0c..5b01e65728 100644 --- a/3party/boost/boost/fusion/iterator/deref.hpp +++ b/3party/boost/boost/fusion/iterator/deref.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp b/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp index d683c2891e..197dfc10bf 100644 --- a/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp +++ b/3party/boost/boost/fusion/iterator/detail/adapt_deref_traits.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp b/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp index a7d72f5348..6649ade145 100644 --- a/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp +++ b/3party/boost/boost/fusion/iterator/detail/adapt_value_traits.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/detail/advance.hpp b/3party/boost/boost/fusion/iterator/detail/advance.hpp index 900608fae1..56dfab9c94 100644 --- a/3party/boost/boost/fusion/iterator/detail/advance.hpp +++ b/3party/boost/boost/fusion/iterator/detail/advance.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/detail/distance.hpp b/3party/boost/boost/fusion/iterator/detail/distance.hpp index e4c0a5e7cc..3994cb3064 100644 --- a/3party/boost/boost/fusion/iterator/detail/distance.hpp +++ b/3party/boost/boost/fusion/iterator/detail/distance.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp b/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp new file mode 100644 index 0000000000..c372a83630 --- /dev/null +++ b/3party/boost/boost/fusion/iterator/detail/segment_sequence.hpp @@ -0,0 +1,71 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_SEQUENCE_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_SEQUENCE_HPP_INCLUDED + +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + struct segment_sequence_tag {}; + + // Here, Sequence is a sequence of ranges (which may or may not be + // segmented). + template + struct segment_sequence + : sequence_base > + { + typedef fusion_sequence_tag tag; + typedef segment_sequence_tag fusion_tag; + typedef typename Sequence::is_view is_view; + typedef typename Sequence::category category; + typedef Sequence sequence_type; + sequence_type sequence; + + explicit segment_sequence(Sequence const & seq) + : sequence(seq) + {} + }; +} + +namespace extension +{ + template + struct is_segmented_impl; + + template<> + struct is_segmented_impl + { + template + struct apply + : mpl::true_ + {}; + }; + + template + struct segments_impl; + + template<> + struct segments_impl + { + template + struct apply + { + typedef typename Sequence::sequence_type type; + + static type call(Sequence & seq) + { + return seq.sequence; + } + }; + }; +}}} + +#endif diff --git a/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp b/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp new file mode 100644 index 0000000000..1e4ad268ae --- /dev/null +++ b/3party/boost/boost/fusion/iterator/detail/segmented_equal_to.hpp @@ -0,0 +1,41 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_EQUAL_TO_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_ITERATOR_EQUAL_TO_HPP_INCLUDED + +#include +#include +#include + +namespace boost { namespace fusion +{ + struct nil; + + namespace detail + { + template + struct segmented_equal_to + : mpl::and_< + segmented_equal_to< + typename Stack1::cdr_type, + typename Stack2::cdr_type + > + , result_of::equal_to< + typename Stack1::car_type::begin_type, + typename Stack2::car_type::begin_type + > + > + {}; + + template <> + struct segmented_equal_to + : mpl::true_ + {}; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp b/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp new file mode 100644 index 0000000000..ccd45fbf9f --- /dev/null +++ b/3party/boost/boost/fusion/iterator/detail/segmented_iterator.hpp @@ -0,0 +1,144 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_SEGMENTED_ITERATOR_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_ITERATOR_SEGMENTED_ITERATOR_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct nil; + + namespace detail + { + template + struct segmented_next_impl; + } + + // A segmented iterator wraps a "context", which is a cons list + // of ranges, the frontmost is range over values and the rest + // are ranges over internal segments. + template + struct segmented_iterator + : iterator_facade, forward_traversal_tag> + { + explicit segmented_iterator(Context const& ctx) + : context(ctx) + {} + + //auto deref(it) + //{ + // return deref(begin(car(it.context))) + //} + template + struct deref + { + typedef + typename result_of::deref< + typename It::context_type::car_type::begin_type + >::type + type; + + static type call(It const& it) + { + return *it.context.car.first; + } + }; + + //auto deref_data(it) + //{ + // return deref_data(begin(car(it.context))) + //} + template + struct deref_data + { + typedef + typename result_of::deref_data< + typename It::context_type::car_type::begin_type + >::type + type; + + static type call(It const& it) + { + return fusion::deref_data(it.context.car.first); + } + }; + + //auto key_of(it) + //{ + // return key_of(begin(car(it.context))) + //} + template + struct key_of + : result_of::key_of + {}; + + //auto value_of(it) + //{ + // return value_of(begin(car(it.context))) + //} + template + struct value_of + : result_of::value_of + {}; + + //auto value_of_data(it) + //{ + // return value_of_data(begin(car(it.context))) + //} + template + struct value_of_data + : result_of::value_of_data + {}; + + // Compare all the segment iterators in each stack, starting with + // the bottom-most. + template < + typename It1 + , typename It2 + , int Size1 = It1::context_type::size::value + , int Size2 = It2::context_type::size::value + > + struct equal_to + : mpl::false_ + {}; + + template + struct equal_to + : detail::segmented_equal_to< + typename It1::context_type + , typename It2::context_type + > + {}; + + template + struct next + { + typedef detail::segmented_next_impl impl; + typedef segmented_iterator type; + + static type call(It const& it) + { + return type(impl::call(it.context)); + } + }; + + typedef Context context_type; + context_type context; + }; + +}} + +#endif diff --git a/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp b/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp new file mode 100644 index 0000000000..2a7f6f6c86 --- /dev/null +++ b/3party/boost/boost/fusion/iterator/detail/segmented_next_impl.hpp @@ -0,0 +1,254 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_NEXT_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_ITERATOR_NEXT_IMPL_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + template + struct iterator_range; + + template + struct segmented_iterator; + + namespace detail + { + template + struct segmented_begin_impl; + + //bool is_invalid(stack) + //{ + // return empty(car(stack)); + //} + + template + struct is_invalid + : result_of::equal_to< + typename Stack::car_type::begin_type, + typename Stack::car_type::end_type + > + {}; + + ////Advance the first iterator in the seq at the + ////top of a stack of iterator ranges. Return the + ////new stack. + //auto pop_front_car(stack) + //{ + // return cons(iterator_range(next(begin(car(stack))), end(car(stack))), cdr(stack)); + //} + + template + struct pop_front_car + { + typedef + iterator_range< + typename result_of::next< + typename Stack::car_type::begin_type + >::type + , typename Stack::car_type::end_type + > + car_type; + + typedef + cons + type; + + static type call(Stack const & stack) + { + return type( + car_type(fusion::next(stack.car.first), stack.car.last), + stack.cdr); + } + }; + + template < + typename Stack, + typename Next = typename pop_front_car::type, + bool IsInvalid = is_invalid::value, + int StackSize = Stack::size::value> + struct segmented_next_impl_recurse; + + // Handle the case where the top of the stack has no usable + //auto segmented_next_impl_recurse3(stack) + //{ + // if (size(stack) == 1) + // return cons(iterator_range(end(car(stack)), end(car(stack))), nil); + // else + // return segmented_next_impl_recurse(stack.cdr); + //} + + template < + typename Stack, + int StackSize = Stack::size::value> + struct segmented_next_impl_recurse3 + { + typedef segmented_next_impl_recurse impl; + typedef typename impl::type type; + + static type call(Stack const & stack) + { + return impl::call(stack.cdr); + } + }; + + template + struct segmented_next_impl_recurse3 + { + typedef typename Stack::car_type::end_type end_type; + typedef iterator_range range_type; + typedef cons type; + + static type call(Stack const & stack) + { + return type(range_type(stack.car.last, stack.car.last)); + } + }; + + //auto segmented_next_impl_recurse2(stack) + //{ + // auto res = segmented_begin_impl(front(car(stack)), stack); + // if (is_invalid(res)) + // return segmented_next_impl_recurse3(stack); + // else + // return res; + //} + + template < + typename Stack, + typename Sequence = + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type, + typename Result = + typename segmented_begin_impl::type, + bool IsInvalid = + is_invalid::value> + struct segmented_next_impl_recurse2 + { + typedef segmented_next_impl_recurse3 impl; + typedef typename impl::type type; + + static type call(Stack const & stack) + { + return impl::call(stack); + } + }; + + template + struct segmented_next_impl_recurse2 + { + typedef Result type; + + static type call(Stack const & stack) + { + return segmented_begin_impl::call(*stack.car.first, stack); + } + }; + + //auto segmented_next_impl_recurse(stack) + //{ + // auto next = pop_front_car(stack); + // if (is_invalid(next)) + // if (1 == size(stack)) + // return next; + // else + // return segmented_next_impl_recurse(cdr(stack)); + // else + // return segmented_next_impl_recurse2(next) + //} + + template + struct segmented_next_impl_recurse + { + typedef + typename segmented_next_impl_recurse::type + type; + + static type call(Stack const& stack) + { + return segmented_next_impl_recurse::call(stack.cdr); + } + }; + + template + struct segmented_next_impl_recurse + { + typedef Next type; + + static type call(Stack const & stack) + { + return pop_front_car::call(stack); + } + }; + + template + struct segmented_next_impl_recurse + { + typedef segmented_next_impl_recurse2 impl; + typedef typename impl::type type; + + static type call(Stack const & stack) + { + return impl::call(pop_front_car::call(stack)); + } + }; + + //auto segmented_next_impl(stack) + //{ + // // car(stack) is a seq of values, not a seq of segments + // auto next = pop_front_car(stack); + // if (is_invalid(next)) + // return segmented_next_impl_recurse(cdr(next)); + // else + // return next; + //} + + template < + typename Stack, + typename Next = typename pop_front_car::type, + bool IsInvalid = is_invalid::value> + struct segmented_next_impl_aux + { + typedef segmented_next_impl_recurse impl; + typedef typename impl::type type; + + static type call(Stack const & stack) + { + return impl::call(stack.cdr); + } + }; + + template + struct segmented_next_impl_aux + { + typedef Next type; + + static type call(Stack const & stack) + { + return pop_front_car::call(stack); + } + }; + + template + struct segmented_next_impl + : segmented_next_impl_aux + {}; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/iterator/distance.hpp b/3party/boost/boost/fusion/iterator/distance.hpp index 0cfa414d20..74d2d3ef2f 100644 --- a/3party/boost/boost/fusion/iterator/distance.hpp +++ b/3party/boost/boost/fusion/iterator/distance.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -34,10 +34,7 @@ namespace boost { namespace fusion // default implementation template struct apply : distance_detail::linear_distance - { - BOOST_MPL_ASSERT_NOT((traits::is_random_access)); - BOOST_MPL_ASSERT_NOT((traits::is_random_access)); - }; + {}; }; template <> diff --git a/3party/boost/boost/fusion/iterator/equal_to.hpp b/3party/boost/boost/fusion/iterator/equal_to.hpp index a038741732..334783770e 100644 --- a/3party/boost/boost/fusion/iterator/equal_to.hpp +++ b/3party/boost/boost/fusion/iterator/equal_to.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_EQUAL_TO_05052005_1208) @@ -37,8 +37,18 @@ namespace boost { namespace fusion template <> struct equal_to_impl { - template - struct apply : I1::template equal_to {}; + template + struct dispatch : mpl::false_ {}; + + template + struct dispatch // same tag + : It1::template equal_to + {}; + + template + struct apply : dispatch + {}; }; template <> @@ -63,8 +73,8 @@ namespace boost { namespace fusion namespace iterator_operators { template - inline typename - enable_if< + inline typename + boost::enable_if< mpl::and_, is_fusion_iterator > , bool >::type @@ -74,8 +84,8 @@ namespace boost { namespace fusion } template - inline typename - enable_if< + inline typename + boost::enable_if< mpl::and_, is_fusion_iterator > , bool >::type diff --git a/3party/boost/boost/fusion/iterator/iterator_adapter.hpp b/3party/boost/boost/fusion/iterator/iterator_adapter.hpp new file mode 100644 index 0000000000..6805626942 --- /dev/null +++ b/3party/boost/boost/fusion/iterator/iterator_adapter.hpp @@ -0,0 +1,125 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(FUSION_ITERATOR_ADAPTER_08112011_0942) +#define FUSION_ITERATOR_ADAPTER_08112011_0942 + +#include +#include +#include + +namespace boost { namespace fusion +{ + template + struct iterator_adapter + : iterator_facade + { + typedef typename + remove_const::type + iterator_base_type; + iterator_base_type iterator_base; + + iterator_adapter(iterator_base_type const& iterator_base) + : iterator_base(iterator_base) {} + + // default implementation + template + struct equal_to + : result_of::equal_to< + typename I1::iterator_base_type + , typename I2::iterator_base_type + > + {}; + + // default implementation + template + struct advance + { + typedef typename Derived_::template make< + typename result_of::advance< + typename Iterator::iterator_base_type, N + >::type>::type + type; + + static type + call(Iterator const& it) + { + return type(fusion::advance(it.iterator_base)); + } + }; + + // default implementation + template + struct distance + : result_of::distance< + typename First::iterator_base_type + , typename Last::iterator_base_type + > + {}; + + // default implementation + template + struct value_of + : result_of::value_of< + typename Iterator::iterator_base_type + > + {}; + + // default implementation + template + struct deref + { + typedef typename + result_of::deref< + typename Iterator::iterator_base_type + >::type + type; + + static type + call(Iterator const& it) + { + return fusion::deref(it.iterator_base); + } + }; + + // default implementation + template + struct next + { + typedef typename Derived_::template make< + typename result_of::next< + typename Iterator::iterator_base_type + >::type>::type + type; + + static type + call(Iterator const& i) + { + return type(fusion::next(i.iterator_base)); + } + }; + + // default implementation + template + struct prior + { + typedef typename Derived_::template make< + typename result_of::prior< + typename Iterator::iterator_base_type + >::type>::type + type; + + static type + call(Iterator const& i) + { + return type(fusion::prior(i.iterator_base)); + } + }; + }; +}} + +#endif diff --git a/3party/boost/boost/fusion/iterator/iterator_facade.hpp b/3party/boost/boost/fusion/iterator/iterator_facade.hpp index fa74f8dca5..abd6607d67 100644 --- a/3party/boost/boost/fusion/iterator/iterator_facade.hpp +++ b/3party/boost/boost/fusion/iterator/iterator_facade.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/mpl.hpp b/3party/boost/boost/fusion/iterator/mpl.hpp index 2709bd297c..a5274a49f6 100644 --- a/3party/boost/boost/fusion/iterator/mpl.hpp +++ b/3party/boost/boost/fusion/iterator/mpl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp b/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp index 6cec51047c..dd52d4c587 100644 --- a/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp +++ b/3party/boost/boost/fusion/iterator/mpl/convert_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp b/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp index b18ef8f062..82889e0806 100644 --- a/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp +++ b/3party/boost/boost/fusion/iterator/mpl/fusion_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/next.hpp b/3party/boost/boost/fusion/iterator/next.hpp index d2cf63ddde..5cc9c80771 100644 --- a/3party/boost/boost/fusion/iterator/next.hpp +++ b/3party/boost/boost/fusion/iterator/next.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/prior.hpp b/3party/boost/boost/fusion/iterator/prior.hpp index a8b9fd64be..818851b1b7 100644 --- a/3party/boost/boost/fusion/iterator/prior.hpp +++ b/3party/boost/boost/fusion/iterator/prior.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/iterator/segmented_iterator.hpp b/3party/boost/boost/fusion/iterator/segmented_iterator.hpp new file mode 100644 index 0000000000..21095e78c3 --- /dev/null +++ b/3party/boost/boost/fusion/iterator/segmented_iterator.hpp @@ -0,0 +1,15 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_ITERATOR_HPP_INCLUDED + +#include +#include +#include +#include + +#endif diff --git a/3party/boost/boost/fusion/iterator/value_of.hpp b/3party/boost/boost/fusion/iterator/value_of.hpp index 478e4d2b2a..fe0cd56811 100644 --- a/3party/boost/boost/fusion/iterator/value_of.hpp +++ b/3party/boost/boost/fusion/iterator/value_of.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl.hpp b/3party/boost/boost/fusion/mpl.hpp index e499df93c1..705f0db7e4 100644 --- a/3party/boost/boost/fusion/mpl.hpp +++ b/3party/boost/boost/fusion/mpl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/at.hpp b/3party/boost/boost/fusion/mpl/at.hpp index a164bb3299..27e95edb5d 100644 --- a/3party/boost/boost/fusion/mpl/at.hpp +++ b/3party/boost/boost/fusion/mpl/at.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/back.hpp b/3party/boost/boost/fusion/mpl/back.hpp index 1f5197e276..a516fa738e 100644 --- a/3party/boost/boost/fusion/mpl/back.hpp +++ b/3party/boost/boost/fusion/mpl/back.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/begin.hpp b/3party/boost/boost/fusion/mpl/begin.hpp index be8b314235..c9f92f85e5 100644 --- a/3party/boost/boost/fusion/mpl/begin.hpp +++ b/3party/boost/boost/fusion/mpl/begin.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/clear.hpp b/3party/boost/boost/fusion/mpl/clear.hpp index 14b3489e3d..28d0e5b1dc 100644 --- a/3party/boost/boost/fusion/mpl/clear.hpp +++ b/3party/boost/boost/fusion/mpl/clear.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/detail/clear.hpp b/3party/boost/boost/fusion/mpl/detail/clear.hpp index d8c32d5afa..e6e83f610b 100644 --- a/3party/boost/boost/fusion/mpl/detail/clear.hpp +++ b/3party/boost/boost/fusion/mpl/detail/clear.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/empty.hpp b/3party/boost/boost/fusion/mpl/empty.hpp index a0e27d6693..56d0924348 100644 --- a/3party/boost/boost/fusion/mpl/empty.hpp +++ b/3party/boost/boost/fusion/mpl/empty.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/end.hpp b/3party/boost/boost/fusion/mpl/end.hpp index ed3320b250..3de5e18881 100644 --- a/3party/boost/boost/fusion/mpl/end.hpp +++ b/3party/boost/boost/fusion/mpl/end.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/erase.hpp b/3party/boost/boost/fusion/mpl/erase.hpp index a8b092aeb1..7566866a98 100644 --- a/3party/boost/boost/fusion/mpl/erase.hpp +++ b/3party/boost/boost/fusion/mpl/erase.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/erase_key.hpp b/3party/boost/boost/fusion/mpl/erase_key.hpp index 3cda268613..9d1df693a9 100644 --- a/3party/boost/boost/fusion/mpl/erase_key.hpp +++ b/3party/boost/boost/fusion/mpl/erase_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/front.hpp b/3party/boost/boost/fusion/mpl/front.hpp index 97a26f731d..43bbd42f28 100644 --- a/3party/boost/boost/fusion/mpl/front.hpp +++ b/3party/boost/boost/fusion/mpl/front.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/has_key.hpp b/3party/boost/boost/fusion/mpl/has_key.hpp index beac7c645d..6ab5ea157f 100644 --- a/3party/boost/boost/fusion/mpl/has_key.hpp +++ b/3party/boost/boost/fusion/mpl/has_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/insert.hpp b/3party/boost/boost/fusion/mpl/insert.hpp index 76918ce986..d59e54b942 100644 --- a/3party/boost/boost/fusion/mpl/insert.hpp +++ b/3party/boost/boost/fusion/mpl/insert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/insert_range.hpp b/3party/boost/boost/fusion/mpl/insert_range.hpp index 4da3936587..e8b5b8e6f7 100644 --- a/3party/boost/boost/fusion/mpl/insert_range.hpp +++ b/3party/boost/boost/fusion/mpl/insert_range.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/pop_back.hpp b/3party/boost/boost/fusion/mpl/pop_back.hpp index 84bd75a465..505daea01d 100644 --- a/3party/boost/boost/fusion/mpl/pop_back.hpp +++ b/3party/boost/boost/fusion/mpl/pop_back.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/pop_front.hpp b/3party/boost/boost/fusion/mpl/pop_front.hpp index ffe6c302d6..d51cf705ad 100644 --- a/3party/boost/boost/fusion/mpl/pop_front.hpp +++ b/3party/boost/boost/fusion/mpl/pop_front.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/push_back.hpp b/3party/boost/boost/fusion/mpl/push_back.hpp index e96faa062b..a2348c55b3 100644 --- a/3party/boost/boost/fusion/mpl/push_back.hpp +++ b/3party/boost/boost/fusion/mpl/push_back.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/push_front.hpp b/3party/boost/boost/fusion/mpl/push_front.hpp index c508d6524d..5bcf9bbd0b 100644 --- a/3party/boost/boost/fusion/mpl/push_front.hpp +++ b/3party/boost/boost/fusion/mpl/push_front.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/mpl/size.hpp b/3party/boost/boost/fusion/mpl/size.hpp index 2c724281a9..1e7f351011 100644 --- a/3party/boost/boost/fusion/mpl/size.hpp +++ b/3party/boost/boost/fusion/mpl/size.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence.hpp b/3party/boost/boost/fusion/sequence.hpp index 9c3ed87393..11c95a64ba 100644 --- a/3party/boost/boost/fusion/sequence.hpp +++ b/3party/boost/boost/fusion/sequence.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/comparison.hpp b/3party/boost/boost/fusion/sequence/comparison.hpp index 50e72cb3a4..52fd1384c8 100644 --- a/3party/boost/boost/fusion/sequence/comparison.hpp +++ b/3party/boost/boost/fusion/sequence/comparison.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp index 40cd96f480..56cfe1b247 100644 --- a/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/detail/equal_to.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace detail { @@ -32,7 +33,7 @@ namespace boost { namespace fusion { namespace detail static bool call(I1 const& a, I2 const& b, mpl::false_) { - return *a == *b + return extension::as_const(*a) == extension::as_const(*b) && call(fusion::next(a), fusion::next(b)); } diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp index e7b6a034c4..e61287765f 100644 --- a/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/detail/greater.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace detail { @@ -32,8 +33,9 @@ namespace boost { namespace fusion { namespace detail static bool call(I1 const& a, I2 const& b, mpl::false_) { - return *a > *b || - (!(*b > *a) && call(fusion::next(a), fusion::next(b))); + return extension::as_const(*a) > extension::as_const(*b) || + (!(extension::as_const(*b) > extension::as_const(*a)) && + call(fusion::next(a), fusion::next(b))); } template diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp index 08b98760b1..6d91e27bbd 100644 --- a/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/detail/greater_equal.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace detail { @@ -32,8 +33,9 @@ namespace boost { namespace fusion { namespace detail static bool call(I1 const& a, I2 const& b, mpl::false_) { - return *a >= *b - && (!(*b >= *a) || call(fusion::next(a), fusion::next(b))); + return extension::as_const(*a) >= extension::as_const(*b) + && (!(extension::as_const(*b) >= extension::as_const(*a)) || + call(fusion::next(a), fusion::next(b))); } template diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp index a8b0ce841f..1342bb1427 100644 --- a/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/detail/less.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace detail { @@ -32,8 +33,9 @@ namespace boost { namespace fusion { namespace detail static bool call(I1 const& a, I2 const& b, mpl::false_) { - return *a < *b || - (!(*b < *a) && call(fusion::next(a), fusion::next(b))); + return extension::as_const(*a) < extension::as_const(*b) || + (!(extension::as_const(*b) < extension::as_const(*a)) && + call(fusion::next(a), fusion::next(b))); } template diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp index ee8a111ea4..5683849a2c 100644 --- a/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/detail/less_equal.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace detail { @@ -32,8 +33,9 @@ namespace boost { namespace fusion { namespace detail static bool call(I1 const& a, I2 const& b, mpl::false_) { - return *a <= *b - && (!(*b <= *a) || call(fusion::next(a), fusion::next(b))); + return extension::as_const(*a) <= extension::as_const(*b) + && (!(extension::as_const(*b) <= extension::as_const(*a)) || + call(fusion::next(a), fusion::next(b))); } template diff --git a/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp index 5e939675f3..77c235089f 100644 --- a/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/detail/not_equal_to.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace detail { @@ -32,7 +33,7 @@ namespace boost { namespace fusion { namespace detail static bool call(I1 const& a, I2 const& b, mpl::false_) { - return *a != *b + return extension::as_const(*a) != extension::as_const(*b) || call(fusion::next(a), fusion::next(b)); } diff --git a/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp b/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp index d7d9538342..bd55ac302e 100644 --- a/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/enable_comparison.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp index 67040cbeda..9c4e043558 100644 --- a/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/equal_to.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -37,7 +37,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< traits::enable_equality , bool >::type diff --git a/3party/boost/boost/fusion/sequence/comparison/greater.hpp b/3party/boost/boost/fusion/sequence/comparison/greater.hpp index 7579c8872a..077138d80d 100644 --- a/3party/boost/boost/fusion/sequence/comparison/greater.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/greater.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -37,7 +37,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< traits::enable_comparison , bool >::type diff --git a/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp index dc7df230f1..90175bc7d2 100644 --- a/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/greater_equal.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -37,7 +37,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< traits::enable_comparison , bool >::type diff --git a/3party/boost/boost/fusion/sequence/comparison/less.hpp b/3party/boost/boost/fusion/sequence/comparison/less.hpp index 4022625ab5..944cdcf69e 100644 --- a/3party/boost/boost/fusion/sequence/comparison/less.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/less.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -28,7 +28,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< traits::enable_comparison , bool >::type diff --git a/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp b/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp index bef722718f..0e5d23a5eb 100644 --- a/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/less_equal.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -65,7 +65,7 @@ namespace boost { namespace fusion template inline typename - enable_if< + boost::enable_if< traits::enable_comparison , bool >::type diff --git a/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp b/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp index 1b516a15c0..14ef25df7f 100644 --- a/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp +++ b/3party/boost/boost/fusion/sequence/comparison/not_equal_to.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -40,7 +40,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< traits::enable_equality , bool >::type diff --git a/3party/boost/boost/fusion/sequence/convert.hpp b/3party/boost/boost/fusion/sequence/convert.hpp index a6e3cccaf3..5264810102 100644 --- a/3party/boost/boost/fusion/sequence/convert.hpp +++ b/3party/boost/boost/fusion/sequence/convert.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/intrinsic.hpp b/3party/boost/boost/fusion/sequence/intrinsic.hpp index 8c5f4abd6a..7da2cf03d5 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic/at.hpp b/3party/boost/boost/fusion/sequence/intrinsic/at.hpp index 9ccbfc64a2..92da7bbd2c 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/at.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/at.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_AT_05042005_0722) @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -20,6 +21,7 @@ namespace boost { namespace fusion struct boost_array_tag; // boost::array tag struct mpl_sequence_tag; // mpl sequence tag struct std_pair_tag; // std::pair tag + struct std_tuple_tag; // std::tuple tag namespace extension { @@ -48,12 +50,15 @@ namespace boost { namespace fusion template <> struct at_impl; + + template <> + struct at_impl; } namespace result_of { template - struct at + struct at : extension::at_impl::type>:: template apply {}; @@ -66,7 +71,7 @@ namespace boost { namespace fusion template - inline typename + inline typename lazy_disable_if< is_const , result_of::at @@ -84,7 +89,7 @@ namespace boost { namespace fusion } template - inline typename + inline typename lazy_disable_if< is_const , result_of::at_c diff --git a/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp b/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp index 4dc53ae0c5..449e3f4149 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/at_c.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp index 30fefe0126..24c2fffa65 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/at_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -9,6 +9,7 @@ #define BOOST_FUSION_AT_KEY_20060304_1755 #include +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic/back.hpp b/3party/boost/boost/fusion/sequence/intrinsic/back.hpp index 1f3567f939..0a4d482053 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/back.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/back.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,6 +7,7 @@ #if !defined(FUSION_BACK_09162005_0350) #define FUSION_BACK_09162005_0350 +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp b/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp index c9ece3abfa..7a7ecf6afd 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/begin.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,9 +7,14 @@ #if !defined(FUSION_BEGIN_04052005_1132) #define FUSION_BEGIN_04052005_1132 +#include +#include +#include +#include #include #include -#include +#include +#include namespace boost { namespace fusion { @@ -26,7 +31,13 @@ namespace boost { namespace fusion struct begin_impl { template - struct apply; + struct apply + : mpl::if_< + traits::is_segmented + , detail::segmented_begin + , blank + >::type + {}; }; template <> diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp new file mode 100644 index 0000000000..968718eb2a --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_BEGIN_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + //auto segmented_begin( seq ) + //{ + // return make_segmented_iterator( segmented_begin_impl( seq, nil ) ); + //} + + template + struct segmented_begin + { + typedef + segmented_iterator< + typename segmented_begin_impl::type + > + type; + + static type call(Sequence& seq) + { + return type( + segmented_begin_impl::call(seq, Nil())); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp new file mode 100644 index 0000000000..5069432761 --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp @@ -0,0 +1,92 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_BEGIN_IMPL_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + template + struct iterator_range; +}} + +namespace boost { namespace fusion { namespace detail +{ + struct segmented_begin_fun + { + template + struct apply + { + typedef + iterator_range< + typename fusion::result_of::begin::type + , typename fusion::result_of::end::type + > + range_type; + + typedef cons type; + typedef mpl::false_ continue_type; + + static type call(Sequence& seq, State const&, Context const& context, segmented_begin_fun) + { + return type(range_type(fusion::begin(seq), fusion::end(seq)), context); + } + }; + }; + + template ::type::value> + struct segmented_begin_impl_aux + { + typedef + segmented_end_impl + end_impl; + + typedef + segmented_fold_until_impl< + Sequence + , typename end_impl::type + , Stack + , segmented_begin_fun + > + fold_impl; + + typedef typename fold_impl::type type; + + static type call(Sequence& seq, Stack const& stack) + { + return fold_impl::call(seq, end_impl::call(seq, stack), stack, segmented_begin_fun()); + } + }; + + template + struct segmented_begin_impl_aux + { + typedef typename result_of::begin::type begin_type; + typedef typename result_of::end::type end_type; + typedef iterator_range pair_type; + typedef cons type; + + static type call(Sequence& seq, Stack stack) + { + return type(pair_type(fusion::begin(seq), fusion::end(seq)), stack); + } + }; + + template + struct segmented_begin_impl + : segmented_begin_impl_aux + {}; + +}}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp new file mode 100644 index 0000000000..469862ac3b --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_END_HPP_INCLUDED + +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + //auto segmented_end( seq ) + //{ + // return make_segmented_iterator( segmented_end_impl( seq ) ); + //} + + template + struct segmented_end + { + typedef + segmented_iterator< + typename segmented_end_impl::type + > + type; + + static type call(Sequence & seq) + { + return type( + segmented_end_impl::call(seq, Nil())); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp new file mode 100644 index 0000000000..149027bc2d --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp @@ -0,0 +1,59 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_END_IMPL_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + template + struct iterator_range; +}} + +namespace boost { namespace fusion { namespace detail +{ + //auto segmented_end_impl( seq, stack ) + //{ + // assert(is_segmented(seq)); + // auto it = end(segments(seq)); + // return cons(iterator_range(it, it), stack); + //} + + template + struct segmented_end_impl + { + BOOST_MPL_ASSERT((traits::is_segmented)); + + typedef + typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::segments::type + >::type + >::type + >::type + end_type; + + typedef iterator_range pair_type; + typedef cons type; + + static type call(Sequence & seq, Stack stack) + { + end_type end = fusion::end(fusion::segments(seq)); + return type(pair_type(end, end), stack); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp new file mode 100644 index 0000000000..03cef28fa5 --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic/detail/segmented_size.hpp @@ -0,0 +1,54 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_SIZE_08112006_1141) +#define BOOST_FUSION_SEGMENTED_SIZE_08112006_1141 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion { namespace detail +{ + /////////////////////////////////////////////////////////////////////////// + // calculates the size of any segmented data structure. + template + struct segmented_size; + + /////////////////////////////////////////////////////////////////////////// + template::value> + struct segmented_size_impl + : mpl::fold< + typename remove_reference< + typename add_const< + typename result_of::segments::type + >::type + >::type + , mpl::size_t<0> + , mpl::plus > > + >::type + {}; + + template + struct segmented_size_impl + : result_of::size::type + {}; + + template + struct segmented_size + : segmented_size_impl + {}; + +}}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp b/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp index 2390a49b1c..a9928ab1a1 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/empty.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,6 +7,7 @@ #if !defined(FUSION_EMPTY_09162005_0335) #define FUSION_EMPTY_09162005_0335 +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic/end.hpp b/3party/boost/boost/fusion/sequence/intrinsic/end.hpp index 02476710cf..995ed7a083 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/end.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/end.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,9 +7,14 @@ #if !defined(FUSION_END_04052005_1141) #define FUSION_END_04052005_1141 +#include +#include +#include +#include #include #include -#include +#include +#include namespace boost { namespace fusion { @@ -26,7 +31,13 @@ namespace boost { namespace fusion struct end_impl { template - struct apply; + struct apply + : mpl::if_< + traits::is_segmented + , detail::segmented_end + , blank + >::type + {}; }; template <> diff --git a/3party/boost/boost/fusion/sequence/intrinsic/ext_/segments.hpp b/3party/boost/boost/fusion/sequence/intrinsic/ext_/segments.hpp deleted file mode 100644 index 58f148f2e0..0000000000 --- a/3party/boost/boost/fusion/sequence/intrinsic/ext_/segments.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - 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) -==============================================================================*/ -#if !defined(FUSION_SEGMENTS_04052005_1141) -#define FUSION_SEGMENTS_04052005_1141 - -#include - -namespace boost { namespace fusion -{ - // segments: returns a sequence of sequences - namespace extension - { - template - struct segments_impl - { - template - struct apply {}; - }; - } - - namespace result_of - { - template - struct segments - { - typedef typename - extension::segments_impl::type>:: - template apply::type - type; - }; - } - - template - typename result_of::segments::type - segments(Sequence & seq) - { - return - extension::segments_impl::type>:: - template apply::call(seq); - } - - template - typename result_of::segments::type - segments(Sequence const& seq) - { - return - extension::segments_impl::type>:: - template apply::call(seq); - } -}} - -#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/ext_/size_s.hpp b/3party/boost/boost/fusion/sequence/intrinsic/ext_/size_s.hpp deleted file mode 100644 index 8b61746af4..0000000000 --- a/3party/boost/boost/fusion/sequence/intrinsic/ext_/size_s.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - 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) -==============================================================================*/ -#if !defined(FUSION_SIZE_S_08112006_1141) -#define FUSION_SIZE_S_08112006_1141 - -#include -#include -#include -#include -#include -#include - -namespace boost { namespace fusion -{ - /////////////////////////////////////////////////////////////////////////// - // calculates the size of any segmented data structure. - template::value> - struct segmented_size; - - namespace detail - { - struct size_plus - { - template - struct result; - - template - struct result - : mpl::plus< - segmented_size::type> - , typename remove_reference::type - > - {}; - }; - } - - /////////////////////////////////////////////////////////////////////////// - template - struct segmented_size - : result_of::fold< - typename result_of::segments::type - , mpl::size_t<0> - , detail::size_plus - >::type - {}; - - template - struct segmented_size - : result_of::size - {}; -}} - -#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/front.hpp b/3party/boost/boost/fusion/sequence/intrinsic/front.hpp index bb79cfa921..0e50e3ca75 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/front.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/front.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,6 +7,7 @@ #if !defined(FUSION_FRONT_09162005_0343) #define FUSION_FRONT_09162005_0343 +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp index f254eb1eeb..1ff05bad06 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,6 +7,7 @@ #if !defined(FUSION_HAS_KEY_09232005_1454) #define FUSION_HAS_KEY_09232005_1454 +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp b/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp new file mode 100644 index 0000000000..afd5d400eb --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic/segments.hpp @@ -0,0 +1,76 @@ +/*============================================================================= + Copyright (c) 2006 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTS_04052005_1141) +#define BOOST_FUSION_SEGMENTS_04052005_1141 + +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + // Special tags: + struct sequence_facade_tag; + struct iterator_range_tag; + + // segments: returns a sequence of sequences + namespace extension + { + template + struct segments_impl + { + template + struct apply {}; + }; + + template <> + struct segments_impl + { + template + struct apply : Sequence::template segments {}; + }; + + template <> + struct segments_impl; + } + + namespace result_of + { + template + struct segments + { + typedef typename traits::tag_of::type tag_type; + + typedef typename + extension::segments_impl::template apply::type + type; + }; + } + + template + inline typename + lazy_disable_if< + is_const + , result_of::segments + >::type + segments(Sequence& seq) + { + typedef typename traits::tag_of::type tag_type; + return extension::segments_impl::template apply::call(seq); + } + + template + inline typename result_of::segments::type + segments(Sequence const& seq) + { + typedef typename traits::tag_of::type tag_type; + return extension::segments_impl::template apply::call(seq); + } +}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/intrinsic/size.hpp b/3party/boost/boost/fusion/sequence/intrinsic/size.hpp index 2a3cb7f823..0a1c1659b2 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/size.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/size.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,8 +7,13 @@ #if !defined(FUSION_SIZE_05052005_0214) #define FUSION_SIZE_05052005_0214 +#include +#include #include +#include #include +#include +#include namespace boost { namespace fusion { @@ -24,8 +29,17 @@ namespace boost { namespace fusion template struct size_impl { + template + struct unsegmented_size : Sequence::size {}; + template - struct apply : Sequence::size {}; + struct apply + : mpl::if_< + traits::is_segmented + , detail::segmented_size + , unsegmented_size + >::type + {}; }; template <> diff --git a/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp b/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp index 7a385ae8f3..329f812484 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/swap.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp b/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp index 01cdc9d50a..ce314a8362 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/value_at.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -8,6 +8,7 @@ #define FUSION_VALUE_AT_05052005_0229 #include +#include #include namespace boost { namespace fusion diff --git a/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp index d7f84cd932..23d34ee6bc 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/value_at_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -9,6 +9,7 @@ #define FUSION_VALUE_AT_KEY_05052005_0229 #include +#include #include #include #include diff --git a/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp b/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp new file mode 100644 index 0000000000..57409a3917 --- /dev/null +++ b/3party/boost/boost/fusion/sequence/intrinsic_fwd.hpp @@ -0,0 +1,203 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED) +#define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED + +#include +#include +#include + +namespace boost { namespace fusion +{ + namespace extension + { + template + struct at_impl; + + template + struct begin_impl; + + template + struct empty_impl; + + template + struct end_impl; + + template + struct has_key_impl; + + template + struct segments_impl; + + template + struct size_impl; + + template + struct value_at_impl; + + template + struct at_key_impl; + + template + struct value_at_key_impl; + } + + namespace result_of + { + template + struct at; + + template + struct at_c; + + template + struct back; + + template + struct begin; + + template + struct empty; + + template + struct end; + + template + struct front; + + template + struct has_key; + + template + struct segments; + + template + struct size; + + template + struct value_at; + + template + struct value_at_c; + + template + struct at_key; + + template + struct value_at_key; + } + + template + typename + lazy_disable_if< + is_const + , result_of::at + >::type + at(Sequence& seq); + + template + typename result_of::at::type + at(Sequence const& seq); + + template + typename + lazy_disable_if< + is_const + , result_of::at_c + >::type + at_c(Sequence& seq); + + template + typename result_of::at_c::type + at_c(Sequence const& seq); + + template + typename result_of::back::type + back(Sequence& seq); + + template + typename result_of::back::type + back(Sequence const& seq); + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::begin + >::type const + begin(Sequence& seq); + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::begin + >::type const + begin(Sequence const& seq); + + template + typename result_of::empty::type + empty(Sequence const&); + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::end + >::type const + end(Sequence& seq); + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::end + >::type const + end(Sequence const& seq); + + template + typename result_of::front::type + front(Sequence& seq); + + template + typename result_of::front::type + front(Sequence const& seq); + + template + typename result_of::has_key::type + has_key(Sequence const& seq); + + template + typename + lazy_disable_if< + is_const + , result_of::segments + >::type + segments(Sequence& seq); + + template + typename result_of::segments::type + segments(Sequence const& seq); + + template + typename result_of::size::type + size(Sequence const&); + + template + typename + lazy_disable_if< + is_const + , result_of::at_key + >::type + at_key(Sequence& seq); + + template + typename result_of::at_key::type + at_key(Sequence const& seq); +}} + +#endif diff --git a/3party/boost/boost/fusion/sequence/io.hpp b/3party/boost/boost/fusion/sequence/io.hpp index 080bae3819..1c5925de17 100644 --- a/3party/boost/boost/fusion/sequence/io.hpp +++ b/3party/boost/boost/fusion/sequence/io.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/io/detail/in.hpp b/3party/boost/boost/fusion/sequence/io/detail/in.hpp index b0620284ed..38c4dd5fa5 100644 --- a/3party/boost/boost/fusion/sequence/io/detail/in.hpp +++ b/3party/boost/boost/fusion/sequence/io/detail/in.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/io/detail/manip.hpp b/3party/boost/boost/fusion/sequence/io/detail/manip.hpp index 988f8bc2bc..371d0d29f7 100644 --- a/3party/boost/boost/fusion/sequence/io/detail/manip.hpp +++ b/3party/boost/boost/fusion/sequence/io/detail/manip.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/io/detail/out.hpp b/3party/boost/boost/fusion/sequence/io/detail/out.hpp index 6d0c28a7ce..52caf00d7d 100644 --- a/3party/boost/boost/fusion/sequence/io/detail/out.hpp +++ b/3party/boost/boost/fusion/sequence/io/detail/out.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/sequence/io/in.hpp b/3party/boost/boost/fusion/sequence/io/in.hpp index 19142d46f3..73a1fffbff 100644 --- a/3party/boost/boost/fusion/sequence/io/in.hpp +++ b/3party/boost/boost/fusion/sequence/io/in.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -27,7 +27,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< fusion::traits::is_sequence , std::istream& >::type diff --git a/3party/boost/boost/fusion/sequence/io/out.hpp b/3party/boost/boost/fusion/sequence/io/out.hpp index 017f0e974e..988a39856a 100644 --- a/3party/boost/boost/fusion/sequence/io/out.hpp +++ b/3party/boost/boost/fusion/sequence/io/out.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi Copyright (c) 1999-2003 Jeremiah Willcock - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -29,7 +29,7 @@ namespace boost { namespace fusion { template inline typename - enable_if< + boost::enable_if< fusion::traits::is_sequence , std::ostream& >::type diff --git a/3party/boost/boost/fusion/sequence/sequence_facade.hpp b/3party/boost/boost/fusion/sequence/sequence_facade.hpp index af6faf5666..fd6b095eab 100644 --- a/3party/boost/boost/fusion/sequence/sequence_facade.hpp +++ b/3party/boost/boost/fusion/sequence/sequence_facade.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_FACADE_09252006_1044) @@ -17,10 +17,12 @@ namespace boost { namespace fusion template struct sequence_facade : sequence_base { + typedef fusion_sequence_tag tag; typedef sequence_facade_tag fusion_tag; typedef Derived derived_type; typedef Category category; typedef IsView is_view; + typedef mpl::false_ is_segmented; }; }} diff --git a/3party/boost/boost/fusion/support.hpp b/3party/boost/boost/fusion/support.hpp index 012ee10746..50bf924f9a 100644 --- a/3party/boost/boost/fusion/support.hpp +++ b/3party/boost/boost/fusion/support.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -18,5 +19,6 @@ #include #include #include +#include #endif diff --git a/3party/boost/boost/fusion/support/as_const.hpp b/3party/boost/boost/fusion/support/as_const.hpp new file mode 100644 index 0000000000..bb2a96a65d --- /dev/null +++ b/3party/boost/boost/fusion/support/as_const.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + Copyright (c) 2012 Nathan Ridge + + 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 BOOST_FUSION_SUPPORT_AS_CONST_HPP +#define BOOST_FUSION_SUPPORT_AS_CONST_HPP + +namespace boost { namespace fusion { namespace extension +{ + // A customization point that allows certain wrappers around + // Fusion sequence elements (e.g. adt_attribute_proxy) to be + // unwrapped in contexts where the element only needs to be + // read. The library wraps accesses to Fusion elements in + // such contexts with calls to this function. Users can + // specialize this function for their own wrappers. + template + const T& as_const(const T& obj) + { + return obj; + } + +}}} + +#endif diff --git a/3party/boost/boost/fusion/support/category_of.hpp b/3party/boost/boost/fusion/support/category_of.hpp index 73def5b0e0..805d895ba2 100644 --- a/3party/boost/boost/fusion/support/category_of.hpp +++ b/3party/boost/boost/fusion/support/category_of.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/deduce_sequence.hpp b/3party/boost/boost/fusion/support/deduce_sequence.hpp index 77631b79a3..ce02a3cd0d 100644 --- a/3party/boost/boost/fusion/support/deduce_sequence.hpp +++ b/3party/boost/boost/fusion/support/deduce_sequence.hpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace boost { namespace fusion { namespace traits @@ -29,6 +30,13 @@ namespace boost { namespace fusion { namespace traits struct result< Self(T) > : fusion::traits::deduce { }; + + // never called, but needed for decltype-based result_of (C++0x) +#ifndef BOOST_NO_RVALUE_REFERENCES + template + typename result< deducer(T) >::type + operator()(T&&) const; +#endif }; } diff --git a/3party/boost/boost/fusion/support/detail/access.hpp b/3party/boost/boost/fusion/support/detail/access.hpp index af7374ccc7..ced7cea18b 100644 --- a/3party/boost/boost/fusion/support/detail/access.hpp +++ b/3party/boost/boost/fusion/support/detail/access.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -15,7 +15,7 @@ namespace boost { namespace fusion { namespace detail template struct ref_result { - typedef typename add_reference::type type; + typedef typename add_reference::type type; }; template @@ -23,7 +23,7 @@ namespace boost { namespace fusion { namespace detail { typedef typename add_reference< - typename add_const::type + typename add_const::type >::type type; }; diff --git a/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp b/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp index 2d020644dd..96cf2d004e 100644 --- a/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp +++ b/3party/boost/boost/fusion/support/detail/as_fusion_element.hpp @@ -1,6 +1,6 @@ /*============================================================================= Copyright (c) 1999-2003 Jaakko Jarvi - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/detail/category_of.hpp b/3party/boost/boost/fusion/support/detail/category_of.hpp index 04102cfdf1..e7ac44e550 100644 --- a/3party/boost/boost/fusion/support/detail/category_of.hpp +++ b/3party/boost/boost/fusion/support/detail/category_of.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp b/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp index b7e792b395..376afc281c 100644 --- a/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp +++ b/3party/boost/boost/fusion/support/detail/is_mpl_sequence.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/support/detail/is_view.hpp b/3party/boost/boost/fusion/support/detail/is_view.hpp index 5fa2f24108..c518dfc460 100644 --- a/3party/boost/boost/fusion/support/detail/is_view.hpp +++ b/3party/boost/boost/fusion/support/detail/is_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/detail/mpl_iterator_category.hpp b/3party/boost/boost/fusion/support/detail/mpl_iterator_category.hpp index 37a7fe9481..fcb00a01ca 100644 --- a/3party/boost/boost/fusion/support/detail/mpl_iterator_category.hpp +++ b/3party/boost/boost/fusion/support/detail/mpl_iterator_category.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/detail/pp_round.hpp b/3party/boost/boost/fusion/support/detail/pp_round.hpp new file mode 100644 index 0000000000..e1a6161166 --- /dev/null +++ b/3party/boost/boost/fusion/support/detail/pp_round.hpp @@ -0,0 +1,71 @@ +/*============================================================================= + Copyright (c) 2011 Thomas Heller + + 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 BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP +#define BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP + +#include +#include +#include + +#define BOOST_FUSION_PP_ROUND_UP(N) \ + BOOST_PP_CAT(BOOST_FUSION_PP_DO_ROUND_UP_, N)() \ +/**/ + +#define BOOST_FUSION_PP_DO_ROUND_UP_0() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_1() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_2() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_3() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_4() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_5() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_6() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_7() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_8() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_9() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_10() 10 +#define BOOST_FUSION_PP_DO_ROUND_UP_11() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_12() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_13() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_14() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_15() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_16() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_17() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_18() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_19() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_20() 20 +#define BOOST_FUSION_PP_DO_ROUND_UP_21() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_22() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_23() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_24() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_25() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_26() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_27() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_28() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_29() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_30() 30 +#define BOOST_FUSION_PP_DO_ROUND_UP_31() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_32() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_33() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_34() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_35() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_36() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_37() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_38() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_39() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_40() 40 +#define BOOST_FUSION_PP_DO_ROUND_UP_41() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_42() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_43() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_44() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_45() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_46() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_47() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_48() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_49() 50 +#define BOOST_FUSION_PP_DO_ROUND_UP_50() 50 + +#endif diff --git a/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp b/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp new file mode 100644 index 0000000000..08096c16ae --- /dev/null +++ b/3party/boost/boost/fusion/support/detail/segmented_fold_until_impl.hpp @@ -0,0 +1,389 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_FOLD_UNTIL_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_IMPL_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// fun(seq, state, context) +// seq: a non-segmented range +// state: the state of the fold so far +// context: the path to the current range +// +// returns: (state', fcontinue) + +namespace boost { namespace fusion +{ + template + struct iterator_range; + + template + struct segmented_iterator; + + namespace result_of + { + template + struct make_segmented_iterator + { + typedef + iterator_range< + Cur + , typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Context::car_type::begin_type + >::type + >::type + >::type + >::type + > + range_type; + + typedef + segmented_iterator > + type; + }; + } + + template + typename result_of::make_segmented_iterator::type + make_segmented_iterator(Cur const& cur, Context const& context) + { + typedef result_of::make_segmented_iterator impl_type; + typedef typename impl_type::type type; + typedef typename impl_type::range_type range_type; + return type(cons(range_type(cur, fusion::end(*context.car.first)), context)); + } + + namespace detail + { + template < + typename Begin + , typename End + , typename State + , typename Context + , typename Fun + , bool IsEmpty + > + struct segmented_fold_until_iterate_skip_empty; + + template < + typename Begin + , typename End + , typename State + , typename Context + , typename Fun + , bool IsDone = result_of::equal_to::type::value + > + struct segmented_fold_until_iterate; + + template < + typename Sequence + , typename State + , typename Context + , typename Fun + , bool IsSegmented = traits::is_segmented::type::value + > + struct segmented_fold_until_impl; + + template + struct segmented_fold_until_on_segments; + + //auto push_context(cur, end, context) + //{ + // return push_back(context, segment_sequence(iterator_range(cur, end))); + //} + + template + struct push_context + { + typedef iterator_range range_type; + typedef cons type; + + static type call(Cur const& cur, End const& end, Context const& context) + { + return cons(range_type(cur, end), context); + } + }; + + //auto make_segmented_iterator(cur, end, context) + //{ + // return segmented_iterator(push_context(cur, end, context)); + //} + // + //auto segmented_fold_until_impl(seq, state, context, fun) + //{ + // if (is_segmented(seq)) + // { + // segmented_fold_until_on_segments(segments(seq), state, context, fun); + // } + // else + // { + // return fun(seq, state, context); + // } + //} + + template < + typename Sequence + , typename State + , typename Context + , typename Fun + , bool IsSegmented + > + struct segmented_fold_until_impl + { + typedef + segmented_fold_until_on_segments< + typename remove_reference< + typename add_const< + typename result_of::segments::type + >::type + >::type + , State + , Context + , Fun + > + impl; + + typedef typename impl::type type; + typedef typename impl::continue_type continue_type; + + static type call(Sequence& seq, State const& state, Context const& context, Fun const& fun) + { + return impl::call(fusion::segments(seq), state, context, fun); + } + }; + + template < + typename Sequence + , typename State + , typename Context + , typename Fun + > + struct segmented_fold_until_impl + { + typedef + typename Fun::template apply + apply_type; + + typedef typename apply_type::type type; + typedef typename apply_type::continue_type continue_type; + + static type call(Sequence& seq, State const& state, Context const& context, Fun const& fun) + { + return apply_type::call(seq, state, context, fun); + } + }; + + //auto segmented_fold_until_on_segments(segs, state, context, fun) + //{ + // auto cur = begin(segs), end = end(segs); + // for (; cur != end; ++cur) + // { + // if (empty(*cur)) + // continue; + // auto context` = push_context(cur, end, context); + // state = segmented_fold_until_impl(*cur, state, context`, fun); + // if (!second(state)) + // return state; + // } + //} + + template + struct continue_wrap + { + typedef typename Apply::continue_type type; + }; + + template + struct segmented_fold_until_iterate_skip_empty + { + // begin != end and !empty(*begin) + typedef + push_context + push_context_impl; + + typedef + typename push_context_impl::type + next_context_type; + + typedef + segmented_fold_until_impl< + typename remove_reference< + typename add_const< + typename result_of::deref::type + >::type + >::type + , State + , next_context_type + , Fun + > + fold_recurse_impl; + + typedef + typename fold_recurse_impl::type + next_state_type; + + typedef + segmented_fold_until_iterate< + typename result_of::next::type + , End + , next_state_type + , Context + , Fun + > + next_iteration_impl; + + typedef + typename mpl::eval_if< + typename fold_recurse_impl::continue_type + , next_iteration_impl + , mpl::identity + >::type + type; + + typedef + typename mpl::eval_if< + typename fold_recurse_impl::continue_type + , continue_wrap + , mpl::identity + >::type + continue_type; + + static type call(Begin const& beg, End const& end, State const& state + , Context const& context, Fun const& fun) + { + return call(beg, end, state, context, fun, typename fold_recurse_impl::continue_type()); + } + + static type call(Begin const& beg, End const& end, State const& state + , Context const& context, Fun const& fun, mpl::true_) // continue + { + return next_iteration_impl::call( + fusion::next(beg) + , end + , fold_recurse_impl::call( + *beg + , state + , push_context_impl::call(beg, end, context) + , fun) + , context + , fun); + } + + static type call(Begin const& beg, End const& end, State const& state + , Context const& context, Fun const& fun, mpl::false_) // break + { + return fold_recurse_impl::call( + *beg + , state + , push_context_impl::call(beg, end, context) + , fun); + } + }; + + template + struct segmented_fold_until_iterate_skip_empty + { + typedef + segmented_fold_until_iterate< + typename result_of::next::type + , End + , State + , Context + , Fun + > + impl; + + typedef typename impl::type type; + typedef typename impl::continue_type continue_type; + + static type call(Begin const& beg, End const& end, State const& state + , Context const& context, Fun const& fun) + { + return impl::call(fusion::next(beg), end, state, context, fun); + } + }; + + template + struct segmented_fold_until_iterate + { + typedef + typename result_of::empty< + typename remove_reference< + typename result_of::deref::type + >::type + >::type + empty_type; + + typedef + segmented_fold_until_iterate_skip_empty + impl; + + typedef typename impl::type type; + typedef typename impl::continue_type continue_type; + + static type call(Begin const& beg, End const& end, State const& state + , Context const& context, Fun const& fun) + { + return impl::call(beg, end, state, context, fun); + } + }; + + template + struct segmented_fold_until_iterate + { + typedef State type; + typedef mpl::true_ continue_type; + + static type call(Begin const&, End const&, State const& state + , Context const&, Fun const&) + { + return state; + } + }; + + template + struct segmented_fold_until_on_segments + { + typedef + segmented_fold_until_iterate< + typename result_of::begin::type + , typename result_of::end::type + , State + , Context + , Fun + > + impl; + + typedef typename impl::type type; + typedef typename impl::continue_type continue_type; + + static type call(Segments& segs, State const& state, Context const& context, Fun const& fun) + { + return impl::call(fusion::begin(segs), fusion::end(segs), state, context, fun); + } + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/support/detail/unknown_key.hpp b/3party/boost/boost/fusion/support/detail/unknown_key.hpp index 48ffcc2b1d..9466b9c045 100644 --- a/3party/boost/boost/fusion/support/detail/unknown_key.hpp +++ b/3party/boost/boost/fusion/support/detail/unknown_key.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/is_iterator.hpp b/3party/boost/boost/fusion/support/is_iterator.hpp index 9e775f4e52..f0272d05a9 100644 --- a/3party/boost/boost/fusion/support/is_iterator.hpp +++ b/3party/boost/boost/fusion/support/is_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/ext_/is_segmented.hpp b/3party/boost/boost/fusion/support/is_segmented.hpp similarity index 65% rename from 3party/boost/boost/fusion/support/ext_/is_segmented.hpp rename to 3party/boost/boost/fusion/support/is_segmented.hpp index 63330a4ae8..6e62eac430 100644 --- a/3party/boost/boost/fusion/support/ext_/is_segmented.hpp +++ b/3party/boost/boost/fusion/support/is_segmented.hpp @@ -7,30 +7,34 @@ #if !defined(FUSION_IS_SEGMENTED_03202006_0015) #define FUSION_IS_SEGMENTED_03202006_0015 +#include #include namespace boost { namespace fusion { // Special tags: struct sequence_facade_tag; - struct boost_tuple_tag; // boost::tuples::tuple tag - struct boost_array_tag; // boost::array tag - struct mpl_sequence_tag; // mpl sequence tag - struct std_pair_tag; // std::pair tag struct iterator_range_tag; namespace extension { - template + template struct is_segmented_impl { - template + template struct apply : mpl::false_ {}; }; - template<> + template <> + struct is_segmented_impl + { + template + struct apply : Sequence::is_segmented {}; + }; + + template <> struct is_segmented_impl; } @@ -38,8 +42,10 @@ namespace boost { namespace fusion { template struct is_segmented - : extension::is_segmented_impl::type>:: - template apply + : mpl::bool_< + (bool)extension::is_segmented_impl::type>:: + template apply::type::value + > { }; } diff --git a/3party/boost/boost/fusion/support/is_sequence.hpp b/3party/boost/boost/fusion/support/is_sequence.hpp index f57ca23b96..184bbbb6dc 100644 --- a/3party/boost/boost/fusion/support/is_sequence.hpp +++ b/3party/boost/boost/fusion/support/is_sequence.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -59,9 +59,11 @@ namespace boost { namespace fusion { template struct is_sequence - : extension::is_sequence_impl< + : mpl::bool_< + (bool)extension::is_sequence_impl< typename fusion::detail::tag_of::type - >::template apply + >::template apply::type::value + > {}; template diff --git a/3party/boost/boost/fusion/support/is_view.hpp b/3party/boost/boost/fusion/support/is_view.hpp index e2cf6eb4e7..4ec9e06528 100644 --- a/3party/boost/boost/fusion/support/is_view.hpp +++ b/3party/boost/boost/fusion/support/is_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,6 +7,7 @@ #if !defined(FUSION_IS_VIEW_03202006_0015) #define FUSION_IS_VIEW_03202006_0015 +#include #include #include @@ -54,8 +55,10 @@ namespace boost { namespace fusion { template struct is_view : - extension::is_view_impl::type>:: - template apply::type + mpl::bool_< + (bool)extension::is_view_impl::type>:: + template apply::type::value + > {}; } }} diff --git a/3party/boost/boost/fusion/support/iterator_base.hpp b/3party/boost/boost/fusion/support/iterator_base.hpp index 2f909b2e63..ad24d93f6f 100644 --- a/3party/boost/boost/fusion/support/iterator_base.hpp +++ b/3party/boost/boost/fusion/support/iterator_base.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/support/pair.hpp b/3party/boost/boost/fusion/support/pair.hpp index a4ad4ee546..11ad1ffe7e 100644 --- a/3party/boost/boost/fusion/support/pair.hpp +++ b/3party/boost/boost/fusion/support/pair.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Tobias Schwinger Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -8,6 +8,8 @@ #if !defined(FUSION_PAIR_07222005_1203) #define FUSION_PAIR_07222005_1203 +#include + #include #include #include @@ -74,17 +76,17 @@ namespace boost { namespace fusion return pair::type>(val); } - template - inline OStream& - operator<<(OStream& os, pair const& p) + template + inline std::ostream& + operator<<(std::ostream& os, pair const& p) { os << p.second; return os; } - template - inline IStream& - operator>>(IStream& is, pair& p) + template + inline std::istream& + operator>>(std::istream& is, pair& p) { is >> p.second; return is; diff --git a/3party/boost/boost/fusion/support/segmented_fold_until.hpp b/3party/boost/boost/fusion/support/segmented_fold_until.hpp new file mode 100644 index 0000000000..6ea58ac611 --- /dev/null +++ b/3party/boost/boost/fusion/support/segmented_fold_until.hpp @@ -0,0 +1,73 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_FOLD_UNTIL_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + //auto segmented_fold_until(seq, state, fun) + //{ + // return first(segmented_fold_until_impl(seq, state, nil, fun)); + //} + + namespace result_of + { + template + struct segmented_fold_until + { + typedef + detail::segmented_fold_until_impl< + Sequence + , State + , fusion::nil + , Fun + > + filter; + + typedef + typename filter::type + type; + }; + } + + template + typename + lazy_disable_if< + is_const + , result_of::segmented_fold_until + >::type + segmented_fold_until(Sequence& seq, State const& state, Fun const& fun) + { + typedef + typename result_of::segmented_fold_until::filter + filter; + + return filter::call(seq, state, fusion::nil(), fun); + } + + template + typename result_of::segmented_fold_until::type + segmented_fold_until(Sequence const& seq, State const& state, Fun const& fun) + { + typedef + typename result_of::segmented_fold_until::filter + filter; + + return filter::call(seq, state, fusion::nil(), fun); + } +}} + +#endif diff --git a/3party/boost/boost/fusion/support/sequence_base.hpp b/3party/boost/boost/fusion/support/sequence_base.hpp index 9a5186df78..89affab666 100644 --- a/3party/boost/boost/fusion/support/sequence_base.hpp +++ b/3party/boost/boost/fusion/support/sequence_base.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Tobias Schwinger Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/support/tag_of.hpp b/3party/boost/boost/fusion/support/tag_of.hpp index cba060672b..a3fef3ba20 100644 --- a/3party/boost/boost/fusion/support/tag_of.hpp +++ b/3party/boost/boost/fusion/support/tag_of.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -46,22 +46,29 @@ namespace boost { namespace fusion namespace detail { BOOST_MPL_HAS_XXX_TRAIT_DEF(fusion_tag) + + template + struct tag_of_impl + : mpl::if_, + mpl::identity, + mpl::identity >::type + {}; + + template + struct tag_of_impl< + Sequence + , typename boost::enable_if >::type> + { + typedef typename Sequence::fusion_tag type; + }; } namespace traits { template struct tag_of - : mpl::if_< fusion::detail::is_mpl_sequence, - mpl::identity, - mpl::identity >::type + : boost::fusion::detail::tag_of_impl {}; - - template - struct tag_of >::type> - { - typedef typename Sequence::fusion_tag type; - }; } namespace detail diff --git a/3party/boost/boost/fusion/support/tag_of_fwd.hpp b/3party/boost/boost/fusion/support/tag_of_fwd.hpp index e6c883d5dc..ba434d9334 100644 --- a/3party/boost/boost/fusion/support/tag_of_fwd.hpp +++ b/3party/boost/boost/fusion/support/tag_of_fwd.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/support/unused.hpp b/3party/boost/boost/fusion/support/unused.hpp index c62b738a34..8e0d5f2753 100644 --- a/3party/boost/boost/fusion/support/unused.hpp +++ b/3party/boost/boost/fusion/support/unused.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -7,6 +7,8 @@ #if !defined(BOOST_FUSION_SUPPORT_UNUSED_20070305_1038) #define BOOST_FUSION_SUPPORT_UNUSED_20070305_1038 +#include + #include #if defined(BOOST_MSVC) # pragma warning(push) @@ -65,14 +67,12 @@ namespace boost { namespace fusion }; } - template - inline Out& operator<<(Out& out, detail::unused_only const&) + inline std::ostream& operator<<(std::ostream& out, detail::unused_only const&) { return out; } - template - inline In& operator>>(In& in, unused_type&) + inline std::istream& operator>>(std::istream& in, unused_type&) { return in; } diff --git a/3party/boost/boost/fusion/support/void.hpp b/3party/boost/boost/fusion/support/void.hpp index 7dd11e5c74..7650519012 100644 --- a/3party/boost/boost/fusion/support/void.hpp +++ b/3party/boost/boost/fusion/support/void.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/tuple.hpp b/3party/boost/boost/fusion/tuple.hpp index affceccad0..3a4e7d01d4 100644 --- a/3party/boost/boost/fusion/tuple.hpp +++ b/3party/boost/boost/fusion/tuple.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple.hpp new file mode 100644 index 0000000000..6abb033688 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp new file mode 100644 index 0000000000..679af2f607 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp @@ -0,0 +1,81 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple::type> + make_tuple(T0 const& _0) + { + return tuple::type>( + _0); + } + template + inline tuple::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1) + { + return tuple::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp new file mode 100644 index 0000000000..6a3a733c4f --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp @@ -0,0 +1,151 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple::type> + make_tuple(T0 const& _0) + { + return tuple::type>( + _0); + } + template + inline tuple::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1) + { + return tuple::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp new file mode 100644 index 0000000000..358ed8094c --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp @@ -0,0 +1,221 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple::type> + make_tuple(T0 const& _0) + { + return tuple::type>( + _0); + } + template + inline tuple::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1) + { + return tuple::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp new file mode 100644 index 0000000000..420c41e465 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp @@ -0,0 +1,291 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple::type> + make_tuple(T0 const& _0) + { + return tuple::type>( + _0); + } + template + inline tuple::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1) + { + return tuple::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp new file mode 100644 index 0000000000..f387400fa4 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp @@ -0,0 +1,361 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple::type> + make_tuple(T0 const& _0) + { + return tuple::type>( + _0); + } + template + inline tuple::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1) + { + return tuple::type , typename detail::as_fusion_element::type>( + _0 , _1); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + template + inline tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type> + make_tuple(T0 const& _0 , T1 const& _1 , T2 const& _2 , T3 const& _3 , T4 const& _4 , T5 const& _5 , T6 const& _6 , T7 const& _7 , T8 const& _8 , T9 const& _9 , T10 const& _10 , T11 const& _11 , T12 const& _12 , T13 const& _13 , T14 const& _14 , T15 const& _15 , T16 const& _16 , T17 const& _17 , T18 const& _18 , T19 const& _19 , T20 const& _20 , T21 const& _21 , T22 const& _22 , T23 const& _23 , T24 const& _24 , T25 const& _25 , T26 const& _26 , T27 const& _27 , T28 const& _28 , T29 const& _29 , T30 const& _30 , T31 const& _31 , T32 const& _32 , T33 const& _33 , T34 const& _34 , T35 const& _35 , T36 const& _36 , T37 const& _37 , T38 const& _38 , T39 const& _39 , T40 const& _40 , T41 const& _41 , T42 const& _42 , T43 const& _43 , T44 const& _44 , T45 const& _45 , T46 const& _46 , T47 const& _47 , T48 const& _48 , T49 const& _49) + { + return tuple::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type , typename detail::as_fusion_element::type>( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp new file mode 100644 index 0000000000..8f9b94a5cd --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif \ No newline at end of file diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp new file mode 100644 index 0000000000..dc0b8de69c --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10.hpp @@ -0,0 +1,173 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + struct tuple : vector + { + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9> + base_type; + tuple() + : base_type() {} + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple(std::pair const& rhs) + : base_type(rhs) {} + explicit + tuple(typename detail::call_param::type _0) + : base_type(_0) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : base_type(_0 , _1) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : base_type(_0 , _1 , _2) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : base_type(_0 , _1 , _2 , _3) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : base_type(_0 , _1 , _2 , _3 , _4) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(T const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(std::pair const& rhs) + { + base_type::operator=(rhs); + return *this; + } + }; + template + struct tuple_size : result_of::size {}; + template + struct tuple_element : result_of::value_at_c {}; + template + inline typename + lazy_disable_if< + is_const + , result_of::at_c + >::type + get(Tuple& tup) + { + return at_c(tup); + } + template + inline typename result_of::at_c::type + get(Tuple const& tup) + { + return at_c(tup); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp new file mode 100644 index 0000000000..7ec319608b --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ + > + struct tuple; +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp new file mode 100644 index 0000000000..7ce38594d0 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20.hpp @@ -0,0 +1,283 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + struct tuple : vector + { + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19> + base_type; + tuple() + : base_type() {} + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple(std::pair const& rhs) + : base_type(rhs) {} + explicit + tuple(typename detail::call_param::type _0) + : base_type(_0) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : base_type(_0 , _1) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : base_type(_0 , _1 , _2) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : base_type(_0 , _1 , _2 , _3) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : base_type(_0 , _1 , _2 , _3 , _4) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(T const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(std::pair const& rhs) + { + base_type::operator=(rhs); + return *this; + } + }; + template + struct tuple_size : result_of::size {}; + template + struct tuple_element : result_of::value_at_c {}; + template + inline typename + lazy_disable_if< + is_const + , result_of::at_c + >::type + get(Tuple& tup) + { + return at_c(tup); + } + template + inline typename result_of::at_c::type + get(Tuple const& tup) + { + return at_c(tup); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp new file mode 100644 index 0000000000..3769f89020 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ + > + struct tuple; +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp new file mode 100644 index 0000000000..d0652931ed --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30.hpp @@ -0,0 +1,393 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + struct tuple : vector + { + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29> + base_type; + tuple() + : base_type() {} + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple(std::pair const& rhs) + : base_type(rhs) {} + explicit + tuple(typename detail::call_param::type _0) + : base_type(_0) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : base_type(_0 , _1) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : base_type(_0 , _1 , _2) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : base_type(_0 , _1 , _2 , _3) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : base_type(_0 , _1 , _2 , _3 , _4) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(T const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(std::pair const& rhs) + { + base_type::operator=(rhs); + return *this; + } + }; + template + struct tuple_size : result_of::size {}; + template + struct tuple_element : result_of::value_at_c {}; + template + inline typename + lazy_disable_if< + is_const + , result_of::at_c + >::type + get(Tuple& tup) + { + return at_c(tup); + } + template + inline typename result_of::at_c::type + get(Tuple const& tup) + { + return at_c(tup); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp new file mode 100644 index 0000000000..b9f3e017c3 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ + > + struct tuple; +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp new file mode 100644 index 0000000000..fca8b24f84 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40.hpp @@ -0,0 +1,503 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + struct tuple : vector + { + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39> + base_type; + tuple() + : base_type() {} + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple(std::pair const& rhs) + : base_type(rhs) {} + explicit + tuple(typename detail::call_param::type _0) + : base_type(_0) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : base_type(_0 , _1) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : base_type(_0 , _1 , _2) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : base_type(_0 , _1 , _2 , _3) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : base_type(_0 , _1 , _2 , _3 , _4) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(T const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(std::pair const& rhs) + { + base_type::operator=(rhs); + return *this; + } + }; + template + struct tuple_size : result_of::size {}; + template + struct tuple_element : result_of::value_at_c {}; + template + inline typename + lazy_disable_if< + is_const + , result_of::at_c + >::type + get(Tuple& tup) + { + return at_c(tup); + } + template + inline typename result_of::at_c::type + get(Tuple const& tup) + { + return at_c(tup); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp new file mode 100644 index 0000000000..200bf5db50 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ + > + struct tuple; +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp new file mode 100644 index 0000000000..34ba8d4a02 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50.hpp @@ -0,0 +1,613 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + struct tuple : vector + { + typedef vector< + T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 , T40 , T41 , T42 , T43 , T44 , T45 , T46 , T47 , T48 , T49> + base_type; + tuple() + : base_type() {} + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple(std::pair const& rhs) + : base_type(rhs) {} + explicit + tuple(typename detail::call_param::type _0) + : base_type(_0) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1) + : base_type(_0 , _1) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2) + : base_type(_0 , _1 , _2) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3) + : base_type(_0 , _1 , _2 , _3) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4) + : base_type(_0 , _1 , _2 , _3 , _4) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5) + : base_type(_0 , _1 , _2 , _3 , _4 , _5) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple(typename detail::call_param::type _0 , typename detail::call_param::type _1 , typename detail::call_param::type _2 , typename detail::call_param::type _3 , typename detail::call_param::type _4 , typename detail::call_param::type _5 , typename detail::call_param::type _6 , typename detail::call_param::type _7 , typename detail::call_param::type _8 , typename detail::call_param::type _9 , typename detail::call_param::type _10 , typename detail::call_param::type _11 , typename detail::call_param::type _12 , typename detail::call_param::type _13 , typename detail::call_param::type _14 , typename detail::call_param::type _15 , typename detail::call_param::type _16 , typename detail::call_param::type _17 , typename detail::call_param::type _18 , typename detail::call_param::type _19 , typename detail::call_param::type _20 , typename detail::call_param::type _21 , typename detail::call_param::type _22 , typename detail::call_param::type _23 , typename detail::call_param::type _24 , typename detail::call_param::type _25 , typename detail::call_param::type _26 , typename detail::call_param::type _27 , typename detail::call_param::type _28 , typename detail::call_param::type _29 , typename detail::call_param::type _30 , typename detail::call_param::type _31 , typename detail::call_param::type _32 , typename detail::call_param::type _33 , typename detail::call_param::type _34 , typename detail::call_param::type _35 , typename detail::call_param::type _36 , typename detail::call_param::type _37 , typename detail::call_param::type _38 , typename detail::call_param::type _39 , typename detail::call_param::type _40 , typename detail::call_param::type _41 , typename detail::call_param::type _42 , typename detail::call_param::type _43 , typename detail::call_param::type _44 , typename detail::call_param::type _45 , typename detail::call_param::type _46 , typename detail::call_param::type _47 , typename detail::call_param::type _48 , typename detail::call_param::type _49) + : base_type(_0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49) {} + template + tuple(tuple const& rhs) + : base_type(rhs) {} + template + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(T const& rhs) + { + base_type::operator=(rhs); + return *this; + } + tuple& operator=(tuple const& rhs) + { + base_type::operator=(rhs); + return *this; + } + template + tuple& operator=(std::pair const& rhs) + { + base_type::operator=(rhs); + return *this; + } + }; + template + struct tuple_size : result_of::size {}; + template + struct tuple_element : result_of::value_at_c {}; + template + inline typename + lazy_disable_if< + is_const + , result_of::at_c + >::type + get(Tuple& tup) + { + return at_c(tup); + } + template + inline typename result_of::at_c::type + get(Tuple const& tup) + { + return at_c(tup); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp new file mode 100644 index 0000000000..18fd75c408 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp @@ -0,0 +1,16 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + struct void_; + template < + typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_ , typename T30 = void_ , typename T31 = void_ , typename T32 = void_ , typename T33 = void_ , typename T34 = void_ , typename T35 = void_ , typename T36 = void_ , typename T37 = void_ , typename T38 = void_ , typename T39 = void_ , typename T40 = void_ , typename T41 = void_ , typename T42 = void_ , typename T43 = void_ , typename T44 = void_ , typename T45 = void_ , typename T46 = void_ , typename T47 = void_ , typename T48 = void_ , typename T49 = void_ + > + struct tuple; +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp new file mode 100644 index 0000000000..234936c587 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp new file mode 100644 index 0000000000..5898c6b978 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp @@ -0,0 +1,21 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +#if FUSION_MAX_VECTOR_SIZE <= 10 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 20 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 30 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 40 +#include +#elif FUSION_MAX_VECTOR_SIZE <= 50 +#include +#else +#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers" +#endif diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp new file mode 100644 index 0000000000..be8c547871 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp @@ -0,0 +1,81 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple + tie(T0 & _0) + { + return tuple( + _0); + } + template + inline tuple + tie(T0 & _0 , T1 & _1) + { + return tuple( + _0 , _1); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return tuple( + _0 , _1 , _2); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return tuple( + _0 , _1 , _2 , _3); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return tuple( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp new file mode 100644 index 0000000000..f14060ec75 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp @@ -0,0 +1,151 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple + tie(T0 & _0) + { + return tuple( + _0); + } + template + inline tuple + tie(T0 & _0 , T1 & _1) + { + return tuple( + _0 , _1); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return tuple( + _0 , _1 , _2); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return tuple( + _0 , _1 , _2 , _3); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return tuple( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp new file mode 100644 index 0000000000..513c78069d --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp @@ -0,0 +1,221 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple + tie(T0 & _0) + { + return tuple( + _0); + } + template + inline tuple + tie(T0 & _0 , T1 & _1) + { + return tuple( + _0 , _1); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return tuple( + _0 , _1 , _2); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return tuple( + _0 , _1 , _2 , _3); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return tuple( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp new file mode 100644 index 0000000000..be56add684 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp @@ -0,0 +1,291 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple + tie(T0 & _0) + { + return tuple( + _0); + } + template + inline tuple + tie(T0 & _0 , T1 & _1) + { + return tuple( + _0 , _1); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return tuple( + _0 , _1 , _2); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return tuple( + _0 , _1 , _2 , _3); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return tuple( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp new file mode 100644 index 0000000000..164db79761 --- /dev/null +++ b/3party/boost/boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp @@ -0,0 +1,361 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ +namespace boost { namespace fusion +{ + template + inline tuple + tie(T0 & _0) + { + return tuple( + _0); + } + template + inline tuple + tie(T0 & _0 , T1 & _1) + { + return tuple( + _0 , _1); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2) + { + return tuple( + _0 , _1 , _2); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3) + { + return tuple( + _0 , _1 , _2 , _3); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4) + { + return tuple( + _0 , _1 , _2 , _3 , _4); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48); + } + template + inline tuple + tie(T0 & _0 , T1 & _1 , T2 & _2 , T3 & _3 , T4 & _4 , T5 & _5 , T6 & _6 , T7 & _7 , T8 & _8 , T9 & _9 , T10 & _10 , T11 & _11 , T12 & _12 , T13 & _13 , T14 & _14 , T15 & _15 , T16 & _16 , T17 & _17 , T18 & _18 , T19 & _19 , T20 & _20 , T21 & _21 , T22 & _22 , T23 & _23 , T24 & _24 , T25 & _25 , T26 & _26 , T27 & _27 , T28 & _28 , T29 & _29 , T30 & _30 , T31 & _31 , T32 & _32 , T33 & _33 , T34 & _34 , T35 & _35 , T36 & _36 , T37 & _37 , T38 & _38 , T39 & _39 , T40 & _40 , T41 & _41 , T42 & _42 , T43 & _43 , T44 & _44 , T45 & _45 , T46 & _46 , T47 & _47 , T48 & _48 , T49 & _49) + { + return tuple( + _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , _20 , _21 , _22 , _23 , _24 , _25 , _26 , _27 , _28 , _29 , _30 , _31 , _32 , _33 , _34 , _35 , _36 , _37 , _38 , _39 , _40 , _41 , _42 , _43 , _44 , _45 , _46 , _47 , _48 , _49); + } +}} diff --git a/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp b/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp index 806515f92d..e23c2e4fe0 100644 --- a/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp +++ b/3party/boost/boost/fusion/tuple/detail/tuple_expand.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/tuple/make_tuple.hpp b/3party/boost/boost/fusion/tuple/make_tuple.hpp index 32fd912eec..b2defa27bf 100644 --- a/3party/boost/boost/fusion/tuple/make_tuple.hpp +++ b/3party/boost/boost/fusion/tuple/make_tuple.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -21,7 +21,30 @@ namespace boost { namespace fusion { return tuple<>(); } +}} +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_tuple" FUSION_MAX_VECTOR_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + +namespace boost { namespace fusion +{ #define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \ typename detail::as_fusion_element::type @@ -33,6 +56,12 @@ namespace boost { namespace fusion }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/tuple/tuple.hpp b/3party/boost/boost/fusion/tuple/tuple.hpp index a97cadeb03..62350721a0 100644 --- a/3party/boost/boost/fusion/tuple/tuple.hpp +++ b/3party/boost/boost/fusion/tuple/tuple.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -18,6 +18,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/tuple" FUSION_MAX_VECTOR_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { template @@ -85,4 +105,10 @@ namespace boost { namespace fusion } }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/tuple/tuple_fwd.hpp b/3party/boost/boost/fusion/tuple/tuple_fwd.hpp index 1a127cab10..e4dbbd2802 100644 --- a/3party/boost/boost/fusion/tuple/tuple_fwd.hpp +++ b/3party/boost/boost/fusion/tuple/tuple_fwd.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2005 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_TUPLE_FORWARD_10032005_0956) @@ -10,6 +10,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/tuple" FUSION_MAX_VECTOR_SIZE_STR "_fwd.hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { struct void_; @@ -21,4 +41,10 @@ namespace boost { namespace fusion struct tuple; }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif diff --git a/3party/boost/boost/fusion/tuple/tuple_tie.hpp b/3party/boost/boost/fusion/tuple/tuple_tie.hpp index b6c21eff5b..726a5528a5 100644 --- a/3party/boost/boost/fusion/tuple/tuple_tie.hpp +++ b/3party/boost/boost/fusion/tuple/tuple_tie.hpp @@ -1,7 +1,7 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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 BOOST_PP_IS_ITERATING @@ -14,6 +14,26 @@ #include #include +#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES) +#include +#else +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/tuple_tie" FUSION_MAX_VECTOR_SIZE_STR ".hpp") +#endif + +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + 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) + + This is an auto-generated file. Do not edit! +==============================================================================*/ + +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(preserve: 1) +#endif + namespace boost { namespace fusion { #define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)& @@ -21,11 +41,17 @@ namespace boost { namespace fusion #define BOOST_PP_FILENAME_1 #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() - + #undef BOOST_FUSION_REF }} +#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES) +#pragma wave option(output: null) +#endif + +#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES + #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/view.hpp b/3party/boost/boost/fusion/view.hpp index f1d837cf86..36ecf1cd1f 100644 --- a/3party/boost/boost/fusion/view.hpp +++ b/3party/boost/boost/fusion/view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp b/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp index 0ba5d8a1a7..7b7c976048 100644 --- a/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp +++ b/3party/boost/boost/fusion/view/detail/strictest_traversal.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -8,6 +8,7 @@ #if !defined(FUSION_STRICTEST_TRAVERSAL_20060123_2101) #define FUSION_STRICTEST_TRAVERSAL_20060123_2101 +#include #include #include #include @@ -53,6 +54,13 @@ namespace boost { namespace fusion typedef typename stricter_traversal::type type; }; + + // never called, but needed for decltype-based result_of (C++0x) +#ifndef BOOST_NO_RVALUE_REFERENCES + template + typename result::type + operator()(StrictestSoFar&&, Next&&) const; +#endif }; template diff --git a/3party/boost/boost/fusion/view/ext_/multiple_view.hpp b/3party/boost/boost/fusion/view/ext_/multiple_view.hpp deleted file mode 100644 index e34b1d6285..0000000000 --- a/3party/boost/boost/fusion/view/ext_/multiple_view.hpp +++ /dev/null @@ -1,178 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2006 Eric Niebler - - 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 FUSION_MULTIPLE_VIEW_05052005_0335 -#define FUSION_MULTIPLE_VIEW_05052005_0335 - -#include -#include -#include -#include -#include -#include -#include - -namespace boost { namespace fusion -{ - struct multiple_view_tag; - struct forward_traversal_tag; - struct fusion_sequence_tag; - - template - struct multiple_view - : sequence_base > - { - typedef multiple_view_tag fusion_tag; - typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef forward_traversal_tag category; - typedef mpl::true_ is_view; - typedef mpl::int_ size; - typedef T value_type; - - multiple_view() - : val() - {} - - explicit multiple_view(typename detail::call_param::type val) - : val(val) - {} - - value_type val; - }; - - template - inline multiple_view::type> - make_multiple_view(T const& v) - { - return multiple_view::type>(v); - } - - struct multiple_view_iterator_tag; - struct forward_traversal_tag; - - template - struct multiple_view_iterator - : iterator_base > - { - typedef multiple_view_iterator_tag fusion_tag; - typedef forward_traversal_tag category; - typedef typename MultipleView::value_type value_type; - typedef MultipleView multiple_view_type; - typedef Index index; - - explicit multiple_view_iterator(multiple_view_type const &view_) - : view(view_) - {} - - multiple_view_type view; - }; - - namespace extension - { - template - struct next_impl; - - template <> - struct next_impl - { - template - struct apply - { - typedef multiple_view_iterator< - typename mpl::next::type - , typename Iterator::multiple_view_type - > type; - - static type - call(Iterator const &where) - { - return type(where.view); - } - }; - }; - - template - struct end_impl; - - template <> - struct end_impl - { - template - struct apply - { - typedef multiple_view_iterator< - typename Sequence::size - , Sequence - > type; - - static type - call(Sequence &seq) - { - return type(seq); - } - }; - }; - - template - struct deref_impl; - - template <> - struct deref_impl - { - template - struct apply - { - typedef typename Iterator::value_type type; - - static type - call(Iterator const& i) - { - return i.view.val; - } - }; - }; - - template - struct begin_impl; - - template <> - struct begin_impl - { - template - struct apply - { - typedef multiple_view_iterator< - mpl::int_<0> - , Sequence - > type; - - static type - call(Sequence &seq) - { - return type(seq); - } - }; - }; - - template - struct value_of_impl; - - template <> - struct value_of_impl - { - template - struct apply - { - typedef typename Iterator::multiple_view_type multiple_view_type; - typedef typename multiple_view_type::value_type type; - }; - }; - } -}} - -#endif - - diff --git a/3party/boost/boost/fusion/view/ext_/segmented_iterator.hpp b/3party/boost/boost/fusion/view/ext_/segmented_iterator.hpp deleted file mode 100644 index 79bc707e4d..0000000000 --- a/3party/boost/boost/fusion/view/ext_/segmented_iterator.hpp +++ /dev/null @@ -1,448 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - Use, modification and distribution is subject to 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 FUSION_SEGMENTED_ITERATOR_EAN_05032006_1027 -#define FUSION_SEGMENTED_ITERATOR_EAN_05032006_1027 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // for nil -#include -#include -#include -#include -#include - -namespace boost { namespace fusion -{ - struct fusion_sequence_tag; - - namespace detail - { - using mpl::_; - using mpl::not_; - - //////////////////////////////////////////////////////////////////////////// - template - struct is_empty - : result_of::equal_to< - typename result_of::begin::type - , typename result_of::end::type - > - {}; - - template - struct is_empty - : is_empty - {}; - - //////////////////////////////////////////////////////////////////////////// - struct not_is_empty_pred - { - template - struct apply - : not_ > - {}; - }; - - struct segmented_range_tag; - - //////////////////////////////////////////////////////////////////////////// - template - struct segmented_range - : sequence_base > - { - BOOST_MPL_ASSERT_NOT((is_reference)); - typedef mpl::bool_ is_segmented; - typedef segmented_range_tag fusion_tag; - typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef mpl::true_ is_view; - - // If this is a range of segments, skip over the empty ones - typedef typename mpl::if_< - is_segmented - , filter_view - , Sequence - >::type sequence_non_ref_type; - - typedef typename mpl::if_< - traits::is_view - , sequence_non_ref_type - , sequence_non_ref_type & - >::type sequence_type; - - typedef - typename fusion::result_of::advance< - typename fusion::result_of::begin::type - , Index - >::type - iterator_type; - - typedef typename traits::category_of::type category; - - explicit segmented_range(Sequence &sequence_) - : sequence(sequence_type(sequence_)) - {} - - segmented_range(sequence_type sequence_, int) - : sequence(sequence_) - {} - - iterator_type where_() const - { - return fusion::advance( - fusion::begin(const_cast(this->sequence)) - ); - } - - sequence_type sequence; - - private: - segmented_range &operator =(segmented_range const &); - }; - } - - namespace extension - { - template<> - struct is_segmented_impl - { - template - struct apply - : Sequence::is_segmented - {}; - }; - - template<> - struct size_impl - { - template - struct apply - : mpl::int_< - result_of::distance< - typename Sequence::iterator_type - , typename result_of::end::type - >::value - > - {}; - }; - - template<> - struct segments_impl - { - template - struct apply - { - typedef Sequence &type; - static type call(Sequence &seq) - { - return seq; - } - }; - }; - - template<> - struct begin_impl - { - template - struct apply - { - typedef typename Sequence::iterator_type type; - static type call(Sequence &seq) - { - return seq.where_(); - } - }; - }; - - template<> - struct end_impl - { - template - struct apply - { - typedef typename Sequence::sequence_non_ref_type sequence; - typedef typename result_of::end::type type; - - static type call(Sequence &seq) - { - return fusion::end(seq.sequence); - } - }; - }; - } - - namespace detail - { - /////////////////////////////////////////////////////////////////////// - template - struct range_next; - - template - struct range_next > - { - typedef typename mpl::next::type index_type; - typedef segmented_range type; - - static type call(segmented_range const &rng) - { - return type(rng.sequence, 0); - } - }; - - /////////////////////////////////////////////////////////////////////// - template - struct is_range_next_empty - : is_empty::type> - {}; - - template<> - struct is_range_next_empty - : mpl::true_ - {}; - - /////////////////////////////////////////////////////////////////////// - template::value> - struct as_segmented_range - { - typedef typename result_of::segments::type segments; - typedef typename remove_reference::type sequence; - typedef segmented_range, true> type; - - static type call(Sequence &seq) - { - segments segs(fusion::segments(seq)); - return type(segs); - } - }; - - template - struct as_segmented_range - { - typedef typename remove_reference::type sequence; - typedef segmented_range, false> type; - - static type call(Sequence &seq) - { - return type(seq); - } - }; - - template - struct as_segmented_range, IsSegmented> - { - typedef segmented_range type; - static type &call(type &seq) - { - return seq; - } - }; - - /////////////////////////////////////////////////////////////////////// - template< - typename Sequence - , typename State = nil - , bool IsSegmented = traits::is_segmented::value - > - struct push_segments - { - typedef typename as_segmented_range::type range; - typedef typename result_of::begin::type begin; - typedef typename result_of::deref::type next_ref; - typedef typename remove_reference::type next; - typedef push_segments > push; - typedef typename push::type type; - - static type call(Sequence &seq, State const &state) - { - range rng(as_segmented_range::call(seq)); - next_ref nxt(*fusion::begin(rng)); - return push::call(nxt, fusion::make_cons(rng, state)); - } - }; - - template - struct push_segments - { - typedef typename as_segmented_range::type range; - typedef cons type; - - static type call(Sequence &seq, State const &state) - { - range rng(as_segmented_range::call(seq)); - return fusion::make_cons(rng, state); - } - }; - - /////////////////////////////////////////////////////////////////////// - template::value> - struct pop_segments - { - typedef range_next next; - typedef push_segments push; - typedef typename push::type type; - - static type call(State const &state) - { - typename next::type rng(next::call(state.car)); - return push::call(rng, state.cdr); - } - }; - - template - struct pop_segments - { - typedef pop_segments pop; - typedef typename pop::type type; - - static type call(State const &state) - { - return pop::call(state.cdr); - } - }; - - template<> - struct pop_segments - { - typedef nil type; - - static type call(nil const &) - { - return nil(); - } - }; - } // namespace detail - - struct segmented_iterator_tag; - - //////////////////////////////////////////////////////////////////////////// - template - struct segmented_iterator - : fusion::iterator_base > - { - typedef segmented_iterator_tag fusion_tag; - typedef fusion::forward_traversal_tag category; - - typedef Cons cons_type; - typedef typename Cons::car_type car_type; - typedef typename Cons::cdr_type cdr_type; - - explicit segmented_iterator(Cons const &c) - : cons_(c) - {} - - cons_type const &cons() const { return this->cons_; }; - car_type const &car() const { return this->cons_.car; }; - cdr_type const &cdr() const { return this->cons_.cdr; }; - - private: - Cons cons_; - }; - - /////////////////////////////////////////////////////////////////////////// - template - struct segmented_begin - { - typedef typename detail::push_segments push; - typedef segmented_iterator type; - - static type call(Sequence &seq) - { - return type(push::call(seq, nil())); - } - }; - - /////////////////////////////////////////////////////////////////////////// - template - struct segmented_end - { - typedef segmented_iterator type; - - static type call(Sequence &) - { - return type(nil()); - } - }; - - namespace extension - { - template<> - struct value_of_impl - { - template - struct apply - { - typedef typename result_of::begin::type begin; - typedef typename result_of::value_of::type type; - }; - }; - - template<> - struct deref_impl - { - template - struct apply - { - typedef typename result_of::begin::type begin; - typedef typename result_of::deref::type type; - - static type call(Iterator const &it) - { - return *fusion::begin(it.car()); - } - }; - }; - - // discards the old head, expands the right child of the new head - // and pushes the result to the head of the list. - - template<> - struct next_impl - { - template< - typename Iterator - , bool IsSegmentDone = detail::is_range_next_empty::value - > - struct apply - { - typedef typename Iterator::cdr_type cdr_type; - typedef detail::range_next next; - typedef segmented_iterator > type; - - static type call(Iterator const &it) - { - return type(fusion::make_cons(next::call(it.car()), it.cdr())); - } - }; - - template - struct apply // segment done, move to next segment - { - typedef typename Iterator::cdr_type cdr_type; - typedef typename detail::pop_segments pop; - typedef segmented_iterator type; - - static type call(Iterator const &it) - { - return type(pop::call(it.cdr())); - } - }; - }; - } -}} // namespace boost::fusion - -#endif diff --git a/3party/boost/boost/fusion/view/ext_/segmented_iterator_range.hpp b/3party/boost/boost/fusion/view/ext_/segmented_iterator_range.hpp deleted file mode 100644 index 803e642ba0..0000000000 --- a/3party/boost/boost/fusion/view/ext_/segmented_iterator_range.hpp +++ /dev/null @@ -1,537 +0,0 @@ -/*============================================================================= - Copyright (c) 2006 Eric Niebler - - Use, modification and distribution is subject to 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 FUSION_SEGMENTED_ITERATOR_RANGE_EAN_05032006_1027 -#define FUSION_SEGMENTED_ITERATOR_RANGE_EAN_05032006_1027 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { namespace fusion -{ - namespace detail - { - //////////////////////////////////////////////////////////////////////////// - template - struct reverse_cons; - - template - struct reverse_cons, State> - { - typedef reverse_cons > reverse; - typedef typename reverse::type type; - - static type call(cons const &cons, State const &state = State()) - { - return reverse::call(cons.cdr, fusion::make_cons(cons.car, state)); - } - }; - - template - struct reverse_cons - { - typedef State type; - - static State const &call(nil const &, State const &state = State()) - { - return state; - } - }; - - //////////////////////////////////////////////////////////////////////////// - // tags - struct full_view {}; - struct left_view {}; - struct right_view {}; - struct center_view {}; - - template - struct segmented_view_tag; - - //////////////////////////////////////////////////////////////////////////// - // a segmented view of that includes all elements either to the - // right or the left of a segmented iterator. - template - struct segmented_view - : sequence_base > - { - typedef segmented_view_tag fusion_tag; - typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef mpl::true_ is_view; - typedef forward_traversal_tag category; - - explicit segmented_view(Cons1 const &cons) - : cons(cons) - {} - - typedef Cons1 cons_type; - cons_type const &cons; - }; - - // a segmented view that contains all the elements in between - // two segmented iterators - template - struct segmented_view - : sequence_base > - { - typedef segmented_view_tag fusion_tag; - typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef mpl::true_ is_view; - typedef forward_traversal_tag category; - - segmented_view(Cons1 const &lcons, Cons2 const &rcons) - : left_cons(lcons) - , right_cons(rcons) - {} - - typedef Cons1 left_cons_type; - typedef Cons2 right_cons_type; - - left_cons_type const &left_cons; - right_cons_type const &right_cons; - }; - - //////////////////////////////////////////////////////////////////////////// - // Used to transform a sequence of segments. The first segment is - // bounded by RightCons, and the last segment is bounded by LeftCons - // and all the others are passed through unchanged. - template - struct segments_transform - { - explicit segments_transform(RightCons const &cons_) - : right_cons(cons_) - , left_cons(cons_) - {} - - segments_transform(RightCons const &right_cons_, LeftCons const &left_cons_) - : right_cons(right_cons_) - , left_cons(left_cons_) - {} - - template - struct result_; - - template - struct result_ - { - typedef segmented_view type; - }; - - template - struct result_ - { - typedef segmented_view type; - }; - - template - struct result_ - { - typedef Second type; - }; - - template - struct result; - - template - struct result - : result_< - typename remove_cv::type>::type - , typename remove_cv::type>::type - > - {}; - - template - segmented_view operator ()(right_view, Second &second) const - { - return segmented_view(this->right_cons); - } - - template - segmented_view operator ()(left_view, Second &second) const - { - return segmented_view(this->left_cons); - } - - template - Second &operator ()(full_view, Second &second) const - { - return second; - } - - private: - RightCons const &right_cons; - LeftCons const &left_cons; - }; - - } // namespace detail - - namespace extension - { - //////////////////////////////////////////////////////////////////////////// - template - struct is_segmented_impl > - { - template - struct apply - : mpl::true_ - {}; - }; - - //////////////////////////////////////////////////////////////////////////// - template<> - struct segments_impl > - { - template< - typename Sequence - , typename Cdr = typename Sequence::cons_type::cdr_type - > - struct apply - { - typedef typename Sequence::cons_type::car_type segmented_range; - typedef typename result_of::size::type size; - typedef typename mpl::prior::type size_minus_1; - typedef detail::segments_transform tfx; - typedef joint_view< - single_view const - , multiple_view const - > mask; - typedef transform_view type; - - static type call(Sequence &seq) - { - return type( - mask( - make_single_view(detail::right_view()) - , make_multiple_view(detail::full_view()) - ) - , seq.cons.car - , tfx(seq.cons.cdr) - ); - } - }; - - template - struct apply - { - typedef typename Sequence::cons_type::car_type segmented_range; - typedef typename segmented_range::iterator_type begin; - typedef typename segmented_range::sequence_non_ref_type sequence_type; - typedef typename result_of::end::type end; - typedef iterator_range range; - typedef single_view type; - - static type call(Sequence &seq) - { - return type(range(seq.cons.car.where_, fusion::end(seq.cons.car.sequence))); - } - }; - }; - - //////////////////////////////////////////////////////////////////////////// - template<> - struct segments_impl > - { - template< - typename Sequence - , typename Cdr = typename Sequence::cons_type::cdr_type - > - struct apply - { - typedef typename Sequence::cons_type::car_type right_segmented_range; - typedef typename right_segmented_range::sequence_type sequence_type; - typedef typename right_segmented_range::iterator_type iterator_type; - - typedef iterator_range< - typename result_of::begin::type - , typename result_of::next::type - > segmented_range; - - typedef detail::segments_transform tfx; - typedef typename result_of::size::type size; - typedef typename mpl::prior::type size_minus_1; - typedef joint_view< - multiple_view const - , single_view const - > mask; - typedef transform_view type; - - static type call(Sequence &seq) - { - return type( - mask( - make_multiple_view(detail::full_view()) - , make_single_view(detail::left_view()) - ) - , segmented_range(fusion::begin(seq.cons.car.sequence), fusion::next(seq.cons.car.where_)) - , tfx(seq.cons.cdr) - ); - } - }; - - template - struct apply - { - typedef typename Sequence::cons_type::car_type segmented_range; - typedef typename segmented_range::sequence_non_ref_type sequence_type; - typedef typename result_of::begin::type begin; - typedef typename segmented_range::iterator_type end; - typedef iterator_range range; - typedef single_view type; - - static type call(Sequence &seq) - { - return type(range(fusion::begin(seq.cons.car.sequence), seq.cons.car.where_)); - } - }; - }; - - //////////////////////////////////////////////////////////////////////////// - template<> - struct segments_impl > - { - template - struct apply - { - typedef typename Sequence::right_cons_type right_cons_type; - typedef typename Sequence::left_cons_type left_cons_type; - typedef typename right_cons_type::car_type right_segmented_range; - typedef typename left_cons_type::car_type left_segmented_range; - - typedef iterator_range< - typename result_of::begin::type - , typename result_of::next::type>::type - > segmented_range; - - typedef typename mpl::minus< - typename result_of::size::type - , mpl::int_<2> - >::type size_minus_2; - - BOOST_MPL_ASSERT_RELATION(0, <=, size_minus_2::value); - - typedef detail::segments_transform< - typename left_cons_type::cdr_type - , typename right_cons_type::cdr_type - > tfx; - - typedef joint_view< - multiple_view const - , single_view const - > left_mask; - - typedef joint_view< - single_view const - , left_mask const - > mask; - - typedef transform_view type; - - static type call(Sequence &seq) - { - left_mask lmask( - make_multiple_view(detail::full_view()) - , make_single_view(detail::left_view()) - ); - return type( - mask(make_single_view(detail::right_view()), lmask) - , segmented_range(fusion::begin(seq.left_cons.car), fusion::next(fusion::begin(seq.right_cons.car))) - , tfx(seq.left_cons.cdr, seq.right_cons.cdr) - ); - } - }; - }; - } - - // specialize iterator_range for use with segmented iterators, so that - // it presents a segmented view of the range. - template - struct iterator_range; - - template - struct iterator_range, segmented_iterator > - : sequence_base, segmented_iterator > > - { - typedef typename convert_iterator >::type begin_type; - typedef typename convert_iterator >::type end_type; - typedef typename detail::reverse_cons::type begin_cons_type; - typedef typename detail::reverse_cons::type end_cons_type; - typedef iterator_range_tag fusion_tag; - typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef typename traits::category_of::type category; - typedef typename result_of::distance::type size; - typedef mpl::true_ is_view; - - iterator_range(segmented_iterator const& first_, segmented_iterator const& last_) - : first(convert_iterator >::call(first_)) - , last(convert_iterator >::call(last_)) - , first_cons(detail::reverse_cons::call(first_.cons())) - , last_cons(detail::reverse_cons::call(last_.cons())) - {} - - begin_type first; - end_type last; - - begin_cons_type first_cons; - end_cons_type last_cons; - }; - - namespace detail - { - - template - struct same_segment - : mpl::false_ - {}; - - template - struct same_segment, cons > - : mpl::and_< - traits::is_segmented - , is_same - > - {}; - - //////////////////////////////////////////////////////////////////////////// - template - struct segments_gen; - - //////////////////////////////////////////////////////////////////////////// - template - struct segments_gen2 - { - typedef segments_gen gen; - typedef typename gen::type type; - - static type call(Cons1 const &cons1, Cons2 const &cons2) - { - return gen::call(cons1.cdr, cons2.cdr); - } - }; - - template - struct segments_gen2 - { - typedef segmented_view view; - typedef typename result_of::segments::type type; - - static type call(Cons1 const &cons1, Cons2 const &cons2) - { - view v(cons1, cons2); - return fusion::segments(v); - } - }; - - template - struct segments_gen2, cons, false> - { - typedef iterator_range< - typename Car1::iterator_type - , typename Car2::iterator_type - > range; - - typedef single_view type; - - static type call(cons const &cons1, cons const &cons2) - { - return type(range(cons1.car.where_, cons2.car.where_)); - } - }; - - //////////////////////////////////////////////////////////////////////////// - template - struct segments_gen - : segments_gen2::value> - {}; - - template - struct segments_gen, nil> - { - typedef segmented_view > view; - typedef typename result_of::segments::type type; - - static type call(cons const &cons, nil const &) - { - view v(cons); - return fusion::segments(v); - } - }; - - template<> - struct segments_gen - { - typedef nil type; - - static type call(nil const &, nil const &) - { - return nil(); - } - }; - } // namespace detail - - namespace extension - { - template - struct is_segmented_impl; - - // An iterator_range of segmented_iterators is segmented - template<> - struct is_segmented_impl - { - template - struct is_segmented_iterator : mpl::false_ {}; - - template - struct is_segmented_iterator > : mpl::true_ {}; - - template - struct apply - : mpl::and_< - is_segmented_iterator - , is_segmented_iterator - > - {}; - }; - - template - struct segments_impl; - - template<> - struct segments_impl - { - template - struct apply - { - typedef typename Sequence::begin_cons_type begin_cons; - typedef typename Sequence::end_cons_type end_cons; - - typedef detail::segments_gen gen; - typedef typename gen::type type; - - static type call(Sequence &sequence) - { - return gen::call(sequence.first_cons, sequence.last_cons); - } - }; - }; - } - -}} - -#endif diff --git a/3party/boost/boost/fusion/view/filter_view.hpp b/3party/boost/boost/fusion/view/filter_view.hpp index c649407f0b..3986d7d9b1 100644 --- a/3party/boost/boost/fusion/view/filter_view.hpp +++ b/3party/boost/boost/fusion/view/filter_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp index 7d94261de1..cb1a08c687 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp index 3e6447c530..c535b7f272 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp index baabbd451c..195cb0a40b 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/equal_to_impl.hpp index 5d7b2932bf..2836a2512b 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/equal_to_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/equal_to_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp index a436bfc260..ae1e0f0dae 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -65,7 +65,7 @@ namespace boost { namespace fusion static type call(Iterator const& i) { - return type(filter::call(i.first)); + return type(filter::iter_call(i.first)); } }; }; diff --git a/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp index 1c5a0acae0..158ee01363 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp index f9188f6f80..ad4ba611bc 100644 --- a/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/view/filter_view/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/filter_view.hpp b/3party/boost/boost/fusion/view/filter_view/filter_view.hpp index 76ce031a2a..6b6ad4b718 100644 --- a/3party/boost/boost/fusion/view/filter_view/filter_view.hpp +++ b/3party/boost/boost/fusion/view/filter_view/filter_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp b/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp index 8ce63cbdd9..66975bd5a1 100644 --- a/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp +++ b/3party/boost/boost/fusion/view/filter_view/filter_view_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -55,7 +55,7 @@ namespace boost { namespace fusion typedef Pred pred_type; filter_iterator(First const& in_first) - : first(filter::call(first_converter::call(in_first))) {} + : first(filter::iter_call(first_converter::call(in_first))) {} first_type first; diff --git a/3party/boost/boost/fusion/view/iterator_range.hpp b/3party/boost/boost/fusion/view/iterator_range.hpp index f8d302217d..800600704e 100644 --- a/3party/boost/boost/fusion/view/iterator_range.hpp +++ b/3party/boost/boost/fusion/view/iterator_range.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp index 5f882aaa51..1b425231ec 100644 --- a/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/view/iterator_range/detail/at_impl.hpp @@ -33,7 +33,7 @@ namespace boost { namespace fusion static type call(Seq& s) { - return * advance(s.first); + return * fusion::advance(s.first); } }; }; diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp index 32341369b3..2902e73bc1 100644 --- a/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/iterator_range/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp index dacbe191df..3147afe107 100644 --- a/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/iterator_range/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp new file mode 100644 index 0000000000..032225dc2b --- /dev/null +++ b/3party/boost/boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp @@ -0,0 +1,66 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED) +#define BOOST_FUSION_ITERATOR_RANGE_IS_SEGMENTED_HPP_INCLUDED + +#include +#include + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + template + struct segmented_iterator; + + namespace extension + { + template + struct is_segmented_impl; + + // An iterator_range of segmented_iterators is segmented + template <> + struct is_segmented_impl + { + private: + template + struct is_segmented_iterator + : mpl::false_ + {}; + + template + struct is_segmented_iterator + : is_segmented_iterator + {}; + + template + struct is_segmented_iterator + : is_segmented_iterator + {}; + + template + struct is_segmented_iterator > + : mpl::true_ + {}; + + public: + template + struct apply + : is_segmented_iterator + { + BOOST_MPL_ASSERT_RELATION( + is_segmented_iterator::value + , == + , is_segmented_iterator::value); + }; + }; + } +}} + +#endif + + diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp new file mode 100644 index 0000000000..9bf459c4ec --- /dev/null +++ b/3party/boost/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp @@ -0,0 +1,532 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED) +#define BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Invariants: +// - Each segmented iterator has a stack +// - Each value in the stack is an iterator range +// - The range at the top of the stack points to values +// - All other ranges point to ranges +// - The front of each range in the stack (besides the +// topmost) is the range above it + +namespace boost { namespace fusion +{ + template + struct iterator_range; + + namespace result_of + { + template + struct push_back; + + template + struct push_front; + } + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::push_back + >::type + push_back(Sequence const& seq, T const& x); + + template + typename + lazy_enable_if< + traits::is_sequence + , result_of::push_front + >::type + push_front(Sequence const& seq, T const& x); +}} + +namespace boost { namespace fusion { namespace detail +{ + //auto make_segment_sequence_front(stack_begin) + //{ + // switch (size(stack_begin)) + // { + // case 1: + // return nil; + // case 2: + // // car(cdr(stack_begin)) is a range over values. + // assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin)))); + // return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin)))); + // default: + // // car(cdr(stack_begin)) is a range over segments. We replace the + // // front with a view that is restricted. + // assert(end(segments(front(car(stack_begin)))) == end(car(cdr(stack_begin)))); + // return segment_sequence( + // push_front( + // // The following could be a segment_sequence. It then gets wrapped + // // in a single_view, and push_front puts it in a join_view with the + // // following iterator_range. + // iterator_range(next(begin(car(cdr(stack_begin)))), end(segments(front(car(stack_begin))))), + // make_segment_sequence_front(cdr(stack_begin)))); + // } + //} + + template + struct make_segment_sequence_front + { + // assert(end(segments(front(car(stack_begin)))) == end(car(cdr(stack_begin)))); + BOOST_MPL_ASSERT(( + result_of::equal_to< + typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::segments< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + >::type + >::type + >::type + , typename Stack::cdr_type::car_type::end_type + >)); + + typedef + iterator_range< + typename result_of::next< + typename Stack::cdr_type::car_type::begin_type + >::type + , typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::segments< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + >::type + >::type + >::type + > + rest_type; + + typedef + make_segment_sequence_front + recurse; + + typedef + segment_sequence< + typename result_of::push_front< + rest_type const + , typename recurse::type + >::type + > + type; + + static type call(Stack const& stack) + { + //return segment_sequence( + // push_front( + // iterator_range(next(begin(car(cdr(stack_begin)))), end(segments(front(car(stack_begin))))), + // make_segment_sequence_front(cdr(stack_begin)))); + return type( + fusion::push_front( + rest_type(fusion::next(stack.cdr.car.first), fusion::end(fusion::segments(*stack.car.first))) + , recurse::call(stack.cdr))); + } + }; + + template + struct make_segment_sequence_front + { + // assert(end(front(car(stack_begin))) == end(car(cdr(stack_begin)))); + BOOST_MPL_ASSERT(( + result_of::equal_to< + typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + , typename Stack::cdr_type::car_type::end_type + >)); + + typedef + iterator_range< + typename Stack::cdr_type::car_type::begin_type + , typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + > + type; + + static type call(Stack const& stack) + { + // return iterator_range(begin(car(cdr(stack_begin))), end(front(car(stack_begin)))); + return type(stack.cdr.car.first, fusion::end(*stack.car.first)); + } + }; + + template + struct make_segment_sequence_front + { + typedef typename Stack::cdr_type type; // nil + + static type call(Stack const &stack) + { + return stack.cdr; + } + }; + + //auto make_segment_sequence_back(stack_end) + //{ + // switch (size(stack_end)) + // { + // case 1: + // return nil; + // case 2: + // // car(cdr(stack_back)) is a range over values. + // assert(end(front(car(stack_end))) == end(car(cdr(stack_end)))); + // return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end)))); + // default: + // // car(cdr(stack_begin)) is a range over segments. We replace the + // // back with a view that is restricted. + // assert(end(segments(front(car(stack_end)))) == end(car(cdr(stack_end)))); + // return segment_sequence( + // push_back( + // iterator_range(begin(segments(front(car(stack_end)))), begin(car(cdr(stack_end)))), + // make_segment_sequence_back(cdr(stack_end)))); + // } + //} + + template + struct make_segment_sequence_back + { + // assert(end(segments(front(car(stack_begin)))) == end(car(cdr(stack_begin)))); + BOOST_MPL_ASSERT(( + result_of::equal_to< + typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::segments< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + >::type + >::type + >::type + , typename Stack::cdr_type::car_type::end_type + >)); + + typedef + iterator_range< + typename result_of::begin< + typename remove_reference< + typename add_const< + typename result_of::segments< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + >::type + >::type + >::type + , typename Stack::cdr_type::car_type::begin_type + > + rest_type; + + typedef + make_segment_sequence_back + recurse; + + typedef + segment_sequence< + typename result_of::push_back< + rest_type const + , typename recurse::type + >::type + > + type; + + static type call(Stack const& stack) + { + // return segment_sequence( + // push_back( + // iterator_range(begin(segments(front(car(stack_end)))), begin(car(cdr(stack_end)))), + // make_segment_sequence_back(cdr(stack_end)))); + return type( + fusion::push_back( + rest_type(fusion::begin(fusion::segments(*stack.car.first)), stack.cdr.car.first) + , recurse::call(stack.cdr))); + } + }; + + template + struct make_segment_sequence_back + { + // assert(end(front(car(stack_end))) == end(car(cdr(stack_end)))); + BOOST_MPL_ASSERT(( + result_of::equal_to< + typename result_of::end< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + , typename Stack::cdr_type::car_type::end_type + >)); + + typedef + iterator_range< + typename result_of::begin< + typename remove_reference< + typename add_const< + typename result_of::deref< + typename Stack::car_type::begin_type + >::type + >::type + >::type + >::type + , typename Stack::cdr_type::car_type::begin_type + > + type; + + static type call(Stack const& stack) + { + // return iterator_range(begin(front(car(stack_end))), begin(car(cdr(stack_end)))); + return type(fusion::begin(*stack.car.first), stack.cdr.car.first); + } + }; + + template + struct make_segment_sequence_back + { + typedef typename Stack::cdr_type type; // nil + + static type call(Stack const& stack) + { + return stack.cdr; + } + }; + + //auto make_segmented_range_reduce(stack_begin, stack_end) + //{ + // if (size(stack_begin) == 1 && size(stack_end) == 1) + // { + // return segment_sequence( + // single_view( + // iterator_range(begin(car(stack_begin)), begin(car(stack_end))))); + // } + // else + // { + // // We are in the case where both begin_stack and/or end_stack have + // // more than one element. Throw away any part of the tree where + // // begin and end refer to the same segment. + // if (begin(car(stack_begin)) == begin(car(stack_end))) + // { + // return make_segmented_range_reduce(cdr(stack_begin), cdr(stack_end)); + // } + // else + // { + // // We are in the case where begin_stack and end_stack (a) have + // // more than one element each, and (b) they point to different + // // segments. We must construct a segmented sequence. + // return segment_sequence( + // push_back( + // push_front( + // iterator_range( + // fusion::next(begin(car(stack_begin))), + // begin(car(stack_end))), // a range of (possibly segmented) ranges. + // make_segment_sequence_front(stack_begin)), // should be a (possibly segmented) range. + // make_segment_sequence_back(stack_end))); // should be a (possibly segmented) range. + // } + // } + //} + + template < + typename StackBegin + , typename StackEnd + , int StackBeginSize = StackBegin::size::value + , int StackEndSize = StackEnd::size::value> + struct make_segmented_range_reduce; + + template < + typename StackBegin + , typename StackEnd + , bool SameSegment = + result_of::equal_to< + typename StackBegin::car_type::begin_type + , typename StackEnd::car_type::begin_type + >::type::value> + struct make_segmented_range_reduce2 + { + typedef + iterator_range< + typename result_of::next< + typename StackBegin::car_type::begin_type + >::type + , typename StackEnd::car_type::begin_type + > + rest_type; + + typedef + segment_sequence< + typename result_of::push_back< + typename result_of::push_front< + rest_type const + , typename make_segment_sequence_front::type + >::type const + , typename make_segment_sequence_back::type + >::type + > + type; + + static type call(StackBegin stack_begin, StackEnd stack_end) + { + //return segment_sequence( + // push_back( + // push_front( + // iterator_range( + // fusion::next(begin(car(stack_begin))), + // begin(car(stack_end))), // a range of (possibly segmented) ranges. + // make_segment_sequence_front(stack_begin)), // should be a (possibly segmented) range. + // make_segment_sequence_back(stack_end))); // should be a (possibly segmented) range. + return type( + fusion::push_back( + fusion::push_front( + rest_type(fusion::next(stack_begin.car.first), stack_end.car.first) + , make_segment_sequence_front::call(stack_begin)) + , make_segment_sequence_back::call(stack_end))); + } + }; + + template + struct make_segmented_range_reduce2 + { + typedef + make_segmented_range_reduce< + typename StackBegin::cdr_type + , typename StackEnd::cdr_type + > + impl; + + typedef + typename impl::type + type; + + static type call(StackBegin stack_begin, StackEnd stack_end) + { + return impl::call(stack_begin.cdr, stack_end.cdr); + } + }; + + template + struct make_segmented_range_reduce + : make_segmented_range_reduce2 + {}; + + template + struct make_segmented_range_reduce + { + typedef + iterator_range< + typename StackBegin::car_type::begin_type + , typename StackEnd::car_type::begin_type + > + range_type; + + typedef + single_view + segment_type; + + typedef + segment_sequence + type; + + static type call(StackBegin stack_begin, StackEnd stack_end) + { + //return segment_sequence( + // single_view( + // iterator_range(begin(car(stack_begin)), begin(car(stack_end))))); + return type(segment_type(range_type(stack_begin.car.first, stack_end.car.first))); + } + }; + + //auto make_segmented_range(begin, end) + //{ + // return make_segmented_range_reduce(reverse(begin.context), reverse(end.context)); + //} + + template + struct make_segmented_range + { + typedef reverse_cons reverse_begin_cons; + typedef reverse_cons reverse_end_cons; + + typedef + make_segmented_range_reduce< + typename reverse_begin_cons::type + , typename reverse_end_cons::type + > + impl; + + typedef typename impl::type type; + + static type call(Begin const& begin, End const& end) + { + return impl::call( + reverse_begin_cons::call(begin.context) + , reverse_end_cons::call(end.context)); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp new file mode 100644 index 0000000000..ede49683d0 --- /dev/null +++ b/3party/boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp @@ -0,0 +1,52 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_ITERATOR_RANGE_SEGMENTS_HPP_INCLUDED) +#define BOOST_FUSION_ITERATOR_RANGE_SEGMENTS_HPP_INCLUDED + +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + namespace extension + { + template + struct segments_impl; + + template <> + struct segments_impl + { + template + struct apply + { + typedef + detail::make_segmented_range< + typename Sequence::begin_type + , typename Sequence::end_type + > + impl; + + BOOST_MPL_ASSERT((traits::is_segmented)); + + typedef + typename result_of::segments::type + type; + + static type call(Sequence & seq) + { + return fusion::segments(impl::call(seq.first, seq.last)); + } + }; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp b/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp new file mode 100644 index 0000000000..90951b2ff9 --- /dev/null +++ b/3party/boost/boost/fusion/view/iterator_range/detail/size_impl.hpp @@ -0,0 +1,37 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ + +#if !defined(BOOST_FUSION_ITERATOR_RANGE_SIZE_IMPL_HPP_INCLUDED) +#define BOOST_FUSION_ITERATOR_RANGE_SIZE_IMPL_HPP_INCLUDED + +#include + +namespace boost { namespace fusion +{ + struct iterator_range_tag; + + namespace extension + { + template + struct size_impl; + + template <> + struct size_impl + { + template + struct apply + : result_of::distance< + typename Seq::begin_type, + typename Seq::end_type + > + {}; + }; + } +}} + +#endif + diff --git a/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp b/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp index 4d16ca6c8d..4f517c8d8a 100644 --- a/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp +++ b/3party/boost/boost/fusion/view/iterator_range/iterator_range.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) @@ -15,7 +15,10 @@ #include #include #include +#include #include +#include +#include #include #include @@ -36,7 +39,6 @@ namespace boost { namespace fusion typedef typename convert_iterator::type end_type; typedef iterator_range_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef typename result_of::distance::type size; typedef mpl::true_ is_view; typedef typename traits::category_of::type category; diff --git a/3party/boost/boost/fusion/view/joint_view.hpp b/3party/boost/boost/fusion/view/joint_view.hpp index cd1b857104..457926ad1f 100644 --- a/3party/boost/boost/fusion/view/joint_view.hpp +++ b/3party/boost/boost/fusion/view/joint_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp index 140d3756d1..a85a7e152e 100644 --- a/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/joint_view/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp index 7eb471849e..ea4055de8a 100644 --- a/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/view/joint_view/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp index 5bdeb02e5c..7b88e56c48 100644 --- a/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/joint_view/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp index 2313faa0d8..47b4d486f2 100644 --- a/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/view/joint_view/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp index 53afe1c934..98637e4e5f 100644 --- a/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/view/joint_view/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/joint_view/joint_view.hpp b/3party/boost/boost/fusion/view/joint_view/joint_view.hpp index e0d5c0902b..11b74f9c26 100644 --- a/3party/boost/boost/fusion/view/joint_view/joint_view.hpp +++ b/3party/boost/boost/fusion/view/joint_view/joint_view.hpp @@ -1,12 +1,13 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(FUSION_JOINT_VIEW_07162005_0140) #define FUSION_JOINT_VIEW_07162005_0140 +#include #include #include #include @@ -50,7 +51,9 @@ namespace boost { namespace fusion typedef typename result_of::end::type last_type; typedef typename result_of::begin::type concat_type; typedef typename result_of::end::type concat_last_type; - typedef typename mpl::plus, result_of::size >::type size; + typedef typename mpl::int_< + result_of::size::value + result_of::size::value> + size; joint_view(Sequence1& in_seq1, Sequence2& in_seq2) : seq1(in_seq1) diff --git a/3party/boost/boost/fusion/view/joint_view/joint_view_fwd.hpp b/3party/boost/boost/fusion/view/joint_view/joint_view_fwd.hpp new file mode 100644 index 0000000000..c3e3b45e83 --- /dev/null +++ b/3party/boost/boost/fusion/view/joint_view/joint_view_fwd.hpp @@ -0,0 +1,18 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_JOINT_VIEW_FWD_HPP_INCLUDED) +#define BOOST_FUSION_JOINT_VIEW_FWD_HPP_INCLUDED + +namespace boost { namespace fusion +{ + struct joint_view_tag; + + template + struct joint_view; +}} + +#endif diff --git a/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp b/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp index 79b4d11527..6f5824851f 100644 --- a/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp +++ b/3party/boost/boost/fusion/view/joint_view/joint_view_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/nview.hpp b/3party/boost/boost/fusion/view/nview.hpp index 92e2f26a57..28d85e0f7d 100644 --- a/3party/boost/boost/fusion/view/nview.hpp +++ b/3party/boost/boost/fusion/view/nview.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Copyright (c) 2009 Hartmut Kaiser diff --git a/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp index 03aa49f4cf..555c34eac1 100644 --- a/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp +++ b/3party/boost/boost/fusion/view/nview/detail/nview_impl.hpp @@ -1,7 +1,7 @@ /*============================================================================= Copyright (c) 2009 Hartmut Kaiser - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ @@ -27,7 +27,7 @@ namespace boost { namespace fusion { namespace result_of { template + , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_VECTOR_SIZE, int I, INT_MAX)> struct as_nview { typedef mpl::vector_c< diff --git a/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp b/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp index 0c83402662..e367f89925 100644 --- a/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/view/nview/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/nview/nview.hpp b/3party/boost/boost/fusion/view/nview/nview.hpp index 02422e0b86..2355b68857 100644 --- a/3party/boost/boost/fusion/view/nview/nview.hpp +++ b/3party/boost/boost/fusion/view/nview/nview.hpp @@ -23,6 +23,8 @@ #include #include +#include + namespace boost { namespace fusion { namespace detail @@ -35,12 +37,21 @@ namespace boost { namespace fusion template struct result : add_reference {}; +#ifdef BOOST_NO_RVALUE_REFERENCES template typename add_reference::type operator()(T& x) const { return x; } +#else + template + typename result::type + operator()(T&& x) const + { + return x; + } +#endif }; struct addconstref diff --git a/3party/boost/boost/fusion/view/reverse_view.hpp b/3party/boost/boost/fusion/view/reverse_view.hpp index 634b398c77..5ba6773036 100644 --- a/3party/boost/boost/fusion/view/reverse_view.hpp +++ b/3party/boost/boost/fusion/view/reverse_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp index 8785881e50..cd0a730966 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/advance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp index b7968f5696..5c83eefb7a 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp index 97cb8915af..3a82145ea4 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp index 5edc749942..13421d8d01 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/distance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp index 916e49d066..bf4ddfb476 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp index c036510ce4..18817280c0 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp index 317054fc5a..014267259b 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/prior_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp index bf9b2ade31..3cb7258187 100644 --- a/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp b/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp index f3e8ffea94..e5716a40f0 100644 --- a/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/reverse_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp b/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp index ddf2e9bed7..4c249438fe 100644 --- a/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp +++ b/3party/boost/boost/fusion/view/reverse_view/reverse_view_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/single_view.hpp b/3party/boost/boost/fusion/view/single_view.hpp index 3640fae896..1d9696fe12 100644 --- a/3party/boost/boost/fusion/view/single_view.hpp +++ b/3party/boost/boost/fusion/view/single_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp new file mode 100644 index 0000000000..d0846ec4e5 --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/advance_impl.hpp @@ -0,0 +1,47 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ + +#if !defined(BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM) +#define BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM + +#include + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + template + struct single_view_iterator; + + namespace extension + { + template + struct advance_impl; + + template<> + struct advance_impl + { + template + struct apply + { + typedef single_view_iterator< + typename Iterator::single_view_type, + typename mpl::plus::type> + type; + + static type + call(Iterator const& i) + { + return type(i.view); + } + }; + }; + } + +}} + +#endif diff --git a/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp new file mode 100644 index 0000000000..3e0915fce6 --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/at_impl.hpp @@ -0,0 +1,44 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ + +#if !defined(BOOST_FUSION_SINGLE_VIEW_AT_IMPL_JUL_07_2011_1348PM) +#define BOOST_FUSION_SINGLE_VIEW_AT_IMPL_JUL_07_2011_1348PM + +#include +#include +#include + +namespace boost { namespace fusion +{ + struct single_view_tag; + + namespace extension + { + template + struct at_impl; + + template<> + struct at_impl + { + template + struct apply + { + BOOST_MPL_ASSERT((mpl::equal_to >)); + typedef typename Sequence::value_type type; + + static type + call(Sequence& seq) + { + return seq.val; + } + }; + }; + } + +}} + +#endif diff --git a/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp index 395992bee9..eb1a3eee26 100644 --- a/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/single_view/detail/begin_impl.hpp @@ -1,17 +1,20 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) ==============================================================================*/ -#if !defined(FUSION_BEGIN_IMPL_05052005_0305) -#define FUSION_BEGIN_IMPL_05052005_0305 +#if !defined(BOOST_FUSION_SINGLE_VIEW_BEGIN_IMPL_05052005_0305) +#define BOOST_FUSION_SINGLE_VIEW_BEGIN_IMPL_05052005_0305 + +#include namespace boost { namespace fusion { struct single_view_tag; - template + template struct single_view_iterator; namespace extension @@ -25,12 +28,12 @@ namespace boost { namespace fusion template struct apply { - typedef single_view_iterator type; + typedef single_view_iterator > type; static type - call(Sequence& s) + call(Sequence& seq) { - return type(s); + return type(seq); } }; }; diff --git a/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp index 355cf6ac24..b5b37a6128 100644 --- a/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/view/single_view/detail/deref_impl.hpp @@ -1,15 +1,16 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) ==============================================================================*/ -#if !defined(FUSION_DEREF_IMPL_05052005_0258) -#define FUSION_DEREF_IMPL_05052005_0258 +#if !defined(BOOST_FUSION_SINGLE_VIEW_DEREF_IMPL_05052005_0258) +#define BOOST_FUSION_SINGLE_VIEW_DEREF_IMPL_05052005_0258 -#include -#include -#include +#include +#include +#include namespace boost { namespace fusion { @@ -26,12 +27,13 @@ namespace boost { namespace fusion template struct apply { + BOOST_MPL_ASSERT((mpl::equal_to >)); typedef typename Iterator::value_type type; static type call(Iterator const& i) { - return i.val; + return i.view.val; } }; }; diff --git a/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp new file mode 100644 index 0000000000..fec204cd02 --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/distance_impl.hpp @@ -0,0 +1,43 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ + +#if !defined(BOOST_FUSION_SINGLE_VIEW_DISTANCE_IMPL_JUL_07_2011_1348PM) +#define BOOST_FUSION_SINGLE_VIEW_DISTANCE_IMPL_JUL_07_2011_1348PM + +#include + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + namespace extension + { + template + struct distance_impl; + + template<> + struct distance_impl + { + template + struct apply + : mpl::minus + { + typedef typename mpl::minus::type type; + + static type + call(First const& /*first*/, Last const& /*last*/) + { + return type(); + } + }; + }; + } + +}} + +#endif diff --git a/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp index d239c242d3..e069b24d96 100644 --- a/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/single_view/detail/end_impl.hpp @@ -1,18 +1,21 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) ==============================================================================*/ -#if !defined(FUSION_END_IMPL_05052005_0332) -#define FUSION_END_IMPL_05052005_0332 +#if !defined(BOOST_FUSION_SINGLE_VIEW_END_IMPL_05052005_0332) +#define BOOST_FUSION_SINGLE_VIEW_END_IMPL_05052005_0332 + +#include namespace boost { namespace fusion { struct single_view_tag; - template - struct single_view_iterator_end; + template + struct single_view_iterator; namespace extension { @@ -25,12 +28,12 @@ namespace boost { namespace fusion template struct apply { - typedef single_view_iterator_end type; + typedef single_view_iterator > type; static type - call(Sequence&) + call(Sequence& seq) { - return type(); + return type(seq); } }; }; diff --git a/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp new file mode 100644 index 0000000000..c9a7ebdeb2 --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/equal_to_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ + +#if !defined(BOOST_FUSION_SINGLE_VIEW_ITERATOR_JUL_07_2011_1348PM) +#define BOOST_FUSION_SINGLE_VIEW_ITERATOR_JUL_07_2011_1348PM + +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + namespace extension + { + template + struct equal_to_impl; + + template<> + struct equal_to_impl + { + template + struct apply + : mpl::equal_to + { + BOOST_MPL_ASSERT((is_same::type, + typename add_const::type>)); + }; + }; + } +}} + +#endif diff --git a/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp index c9cdafdf8a..1ebc502bfb 100644 --- a/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/view/single_view/detail/next_impl.hpp @@ -1,20 +1,21 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ -#if !defined(FUSION_NEXT_IMPL_05052005_0331) -#define FUSION_NEXT_IMPL_05052005_0331 +#if !defined(BOOST_FUSION_SINGLE_VIEW_NEXT_IMPL_05052005_0331) +#define BOOST_FUSION_SINGLE_VIEW_NEXT_IMPL_05052005_0331 + +#include +#include namespace boost { namespace fusion { struct single_view_iterator_tag; - template - struct single_view_iterator_end; - - template + template struct single_view_iterator; namespace extension @@ -26,16 +27,18 @@ namespace boost { namespace fusion struct next_impl { template - struct apply + struct apply { - typedef single_view_iterator_end< - typename Iterator::single_view_type> + typedef single_view_iterator< + typename Iterator::single_view_type, + typename mpl::next::type> type; - + static type - call(Iterator) + call(Iterator const& i) { - return type(); + BOOST_STATIC_ASSERT((type::position::value < 2)); + return type(i.view); } }; }; diff --git a/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp new file mode 100644 index 0000000000..ece6795d7a --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/prior_impl.hpp @@ -0,0 +1,46 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(BOOST_FUSION_SINGLE_VIEW_PRIOR_IMPL_JUL_07_2011_1348PM) +#define BOOST_FUSION_SINGLE_VIEW_PRIOR_IMPL_JUL_07_2011_1348PM + +#include + +namespace boost { namespace fusion +{ + struct single_view_iterator_tag; + + template + struct single_view_iterator; + + namespace extension + { + template + struct prior_impl; + + template <> + struct prior_impl + { + template + struct apply + { + typedef single_view_iterator< + typename Iterator::single_view_type, + typename mpl::prior::type> + type; + + static type + call(Iterator const& i) + { + return type(i.view); + } + }; + }; + } + +}} + +#endif diff --git a/3party/boost/boost/fusion/view/single_view/detail/size_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/size_impl.hpp new file mode 100644 index 0000000000..eba89cdd8d --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/size_impl.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ +#if !defined(FUSION_SINGLE_VIEW_SIZE_IMPL_JUL_07_2011_1348PM) +#define FUSION_SINGLE_VIEW_SIZE_IMPL_JUL_07_2011_1348PM + +namespace boost { namespace fusion +{ + struct single_view_tag; + + namespace extension + { + template + struct size_impl; + + template <> + struct size_impl + { + template + struct apply + { + typedef mpl::int_<1> type; + }; + }; + } +}} + +#endif + + diff --git a/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp new file mode 100644 index 0000000000..a8c20ad5fa --- /dev/null +++ b/3party/boost/boost/fusion/view/single_view/detail/value_at_impl.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2011 Eric Niebler + + 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) +==============================================================================*/ + +#if !defined(BOOST_FUSION_SINGLE_VIEW_VALUE_AT_IMPL_JUL_07_2011_1348PM) +#define BOOST_FUSION_SINGLE_VIEW_VALUE_AT_IMPL_JUL_07_2011_1348PM + +#include +#include +#include +#include + +namespace boost { namespace fusion +{ + struct single_view_tag; + + namespace extension + { + template + struct value_at_impl; + + template<> + struct value_at_impl + { + template + struct apply + { + BOOST_MPL_ASSERT((mpl::equal_to >)); + typedef typename Sequence::value_type type; + }; + }; + } + +}} + +#endif diff --git a/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp index f975eb149e..81e8817962 100644 --- a/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/view/single_view/detail/value_of_impl.hpp @@ -1,11 +1,16 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) ==============================================================================*/ -#if !defined(FUSION_VALUE_IMPL_05052005_0324) -#define FUSION_VALUE_IMPL_05052005_0324 +#if !defined(BOOST_FUSION_SINGLE_VIEW_VALUE_OF_IMPL_05052005_0324) +#define BOOST_FUSION_SINGLE_VIEW_VALUE_OF_IMPL_05052005_0324 + +#include +#include +#include namespace boost { namespace fusion { @@ -22,8 +27,8 @@ namespace boost { namespace fusion template struct apply { - typedef typename Iterator::single_view_type single_view_type; - typedef typename single_view_type::value_type type; + BOOST_MPL_ASSERT((mpl::equal_to >)); + typedef typename Iterator::value_type type; }; }; } diff --git a/3party/boost/boost/fusion/view/single_view/single_view.hpp b/3party/boost/boost/fusion/view/single_view/single_view.hpp index 03087cd626..5e7e5ab5cc 100644 --- a/3party/boost/boost/fusion/view/single_view/single_view.hpp +++ b/3party/boost/boost/fusion/view/single_view/single_view.hpp @@ -1,18 +1,22 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) ==============================================================================*/ -#if !defined(FUSION_SINGLE_VIEW_05052005_0335) -#define FUSION_SINGLE_VIEW_05052005_0335 +#if !defined(BOOST_FUSION_SINGLE_VIEW_05052005_0335) +#define BOOST_FUSION_SINGLE_VIEW_05052005_0335 #include #include #include #include +#include #include #include +#include +#include #include #include #include @@ -25,7 +29,7 @@ namespace boost { namespace fusion { struct single_view_tag; - struct forward_traversal_tag; + struct random_access_traversal_tag; struct fusion_sequence_tag; template @@ -33,7 +37,7 @@ namespace boost { namespace fusion { typedef single_view_tag fusion_tag; typedef fusion_sequence_tag tag; // this gets picked up by MPL - typedef forward_traversal_tag category; + typedef random_access_traversal_tag category; typedef mpl::true_ is_view; typedef mpl::int_<1> size; typedef T value_type; diff --git a/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp b/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp index fa24901542..77b508a0f9 100644 --- a/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp +++ b/3party/boost/boost/fusion/view/single_view/single_view_iterator.hpp @@ -1,16 +1,21 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2011 Eric Niebler 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) ==============================================================================*/ -#if !defined(FUSION_SINGLE_VIEW_ITERATOR_05052005_0340) -#define FUSION_SINGLE_VIEW_ITERATOR_05052005_0340 +#if !defined(BOOST_FUSION_SINGLE_VIEW_ITERATOR_05052005_0340) +#define BOOST_FUSION_SINGLE_VIEW_ITERATOR_05052005_0340 #include #include #include #include +#include +#include +#include +#include #include #include @@ -22,29 +27,25 @@ namespace boost { namespace fusion { struct single_view_iterator_tag; - struct forward_traversal_tag; + struct random_access_traversal_tag; - template - struct single_view_iterator_end - : iterator_base > - { - typedef single_view_iterator_tag fusion_tag; - typedef forward_traversal_tag category; - }; - - template + template struct single_view_iterator - : iterator_base > + : iterator_base > { typedef single_view_iterator_tag fusion_tag; - typedef forward_traversal_tag category; + typedef random_access_traversal_tag category; typedef typename SingleView::value_type value_type; + typedef Pos position; typedef SingleView single_view_type; - explicit single_view_iterator(single_view_type const& view) - : val(view.val) {} + explicit single_view_iterator(single_view_type& in_view) + : view(in_view) {} - value_type val; + SingleView& view; + + private: + single_view_iterator& operator=(single_view_iterator const&); }; }} diff --git a/3party/boost/boost/fusion/view/transform_view.hpp b/3party/boost/boost/fusion/view/transform_view.hpp index 744d063cf7..b64395e377 100644 --- a/3party/boost/boost/fusion/view/transform_view.hpp +++ b/3party/boost/boost/fusion/view/transform_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp index 6b3234844f..9027226f5b 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/advance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp b/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp index 73be3045f2..100055c4a5 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/apply_transform_result.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2007 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp index 620d96feaf..5133de8b07 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp index 75b043829e..09fe8897e5 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp index 3849f80aff..dcdf04eff3 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp index d5ae0adcb9..12a2d7976b 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/distance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp index 465a2cbe18..0c19403797 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp index 063a00edfe..b1f0ae2db7 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/equal_to_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp index 4d6ec74385..5c61a6055b 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp index f7d49966ac..772b3e5075 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/prior_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp index bd4409f7a9..445bbd0b6c 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp index 08bbf20961..108586293e 100644 --- a/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/view/transform_view/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/transform_view.hpp b/3party/boost/boost/fusion/view/transform_view/transform_view.hpp index 3d330b769f..1049f11e5c 100644 --- a/3party/boost/boost/fusion/view/transform_view/transform_view.hpp +++ b/3party/boost/boost/fusion/view/transform_view/transform_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/transform_view_fwd.hpp b/3party/boost/boost/fusion/view/transform_view/transform_view_fwd.hpp index 7dca304ae7..c52cf6e1c3 100644 --- a/3party/boost/boost/fusion/view/transform_view/transform_view_fwd.hpp +++ b/3party/boost/boost/fusion/view/transform_view/transform_view_fwd.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp b/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp index 2c31b261eb..af9d52be51 100644 --- a/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp +++ b/3party/boost/boost/fusion/view/transform_view/transform_view_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman 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) diff --git a/3party/boost/boost/fusion/view/zip_view.hpp b/3party/boost/boost/fusion/view/zip_view.hpp index f7a16ea0df..50209a9fb0 100644 --- a/3party/boost/boost/fusion/view/zip_view.hpp +++ b/3party/boost/boost/fusion/view/zip_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp index 9aa00debf3..2e4e1a7895 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/advance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp index b01b8cfad9..89df542f1f 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp index 674dea38cc..43852d79c6 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/begin_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp index 69cc882550..c24e1452d5 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/deref_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp index b2febd5be2..8c9789330e 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/distance_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp index fa9c31db10..6423a88f18 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/end_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -62,7 +62,7 @@ namespace boost { namespace fusion { template typename result::type - operator()(Seq const& seq) + operator()(Seq const& seq) const { return fusion::advance(fusion::begin(seq)); } diff --git a/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp index c3962a63da..0349d814e5 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/equal_to_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp index 1c9c024577..56bf853d65 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/next_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp index 49b99397ab..875e7d2853 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/prior_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/size_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/size_impl.hpp index 70798d28ec..f8f3569259 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/size_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/size_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp index 7905b063ac..13e0274f6d 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/value_at_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -16,6 +16,7 @@ #include #include #include +#include namespace boost { namespace fusion { @@ -35,6 +36,13 @@ namespace boost { namespace fusion { mpl::identity, result_of::value_at::type, N> > {}; + + // never called, but needed for decltype-based result_of (C++0x) +#ifndef BOOST_NO_RVALUE_REFERENCES + template + typename result::type + operator()(Seq&&) const; +#endif }; } diff --git a/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp b/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp index 4ba4c3c535..5571155e25 100644 --- a/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp +++ b/3party/boost/boost/fusion/view/zip_view/detail/value_of_impl.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -16,6 +16,7 @@ #include #include #include +#include namespace boost { namespace fusion { @@ -34,6 +35,13 @@ namespace boost { namespace fusion mpl::identity, result_of::value_of > {}; + + // never called, but needed for decltype-based result_of (C++0x) +#ifndef BOOST_NO_RVALUE_REFERENCES + template + typename result::type + operator()(It&&) const; +#endif }; } diff --git a/3party/boost/boost/fusion/view/zip_view/zip_view.hpp b/3party/boost/boost/fusion/view/zip_view/zip_view.hpp index 340feafb30..e9a0222df5 100644 --- a/3party/boost/boost/fusion/view/zip_view/zip_view.hpp +++ b/3party/boost/boost/fusion/view/zip_view/zip_view.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying @@ -37,6 +37,8 @@ #include #include +#include + namespace boost { namespace fusion { namespace detail @@ -64,6 +66,13 @@ namespace boost { namespace fusion { result_of::size, mpl::int_ >::type type; }; + + // never called, but needed for decltype-based result_of (C++0x) +#ifndef BOOST_NO_RVALUE_REFERENCES + template + typename result::type + operator()(Seq&&) const; +#endif }; struct poly_min @@ -78,6 +87,13 @@ namespace boost { namespace fusion { typedef typename remove_reference::type rhs; typedef typename mpl::min::type type; }; + + // never called, but needed for decltype-based result_of (C++0x) +#ifndef BOOST_NO_RVALUE_REFERENCES + template + typename result::type + operator()(Lhs&&, Rhs&&) const; +#endif }; template diff --git a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp index 66b514dc3a..bf0b8a39e5 100644 --- a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp +++ b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp index e2b9a7d4c3..d2bfff2388 100644 --- a/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp +++ b/3party/boost/boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp @@ -1,5 +1,5 @@ /*============================================================================= - Copyright (c) 2001-2006 Joel de Guzman + Copyright (c) 2001-2011 Joel de Guzman Copyright (c) 2006 Dan Marsden Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/3party/boost/boost/geometry/algorithms/append.hpp b/3party/boost/boost/geometry/algorithms/append.hpp index ad315e47f2..72b2bbadab 100644 --- a/3party/boost/boost/geometry/algorithms/append.hpp +++ b/3party/boost/boost/geometry/algorithms/append.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -38,7 +38,7 @@ namespace detail { namespace append template struct append_no_action { - static inline void apply(Geometry& geometry, Point const& point, + static inline void apply(Geometry& , Point const& , int = 0, int = 0) { } @@ -178,14 +178,18 @@ struct append_range // Default: append a range (or linestring or ring or whatever) to any geometry -template +template +< + typename Geometry, typename RangeOrPoint, + typename TagRangeOrPoint = typename tag::type +> struct append : splitted_dispatch::append_range::type, Geometry, RangeOrPoint> {}; // Specialization for point to append a point to any geometry template -struct append +struct append : splitted_dispatch::append_point::type, Geometry, RangeOrPoint> {}; @@ -217,7 +221,6 @@ inline void append(Geometry& geometry, RangeOrPoint const& range_or_point, dispatch::append < - typename tag::type, Geometry, RangeOrPoint >::apply(geometry, range_or_point, ring_index, multi_index); diff --git a/3party/boost/boost/geometry/algorithms/area.hpp b/3party/boost/boost/geometry/algorithms/area.hpp index 641d9adfba..8193200ab9 100644 --- a/3party/boost/boost/geometry/algorithms/area.hpp +++ b/3party/boost/boost/geometry/algorithms/area.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -19,7 +19,6 @@ #include #include - #include #include #include @@ -30,6 +29,7 @@ #include #include +// #include #include #include @@ -92,7 +92,7 @@ struct ring_area // An open ring has at least three points, // A closed ring has at least four points, // if not, there is no (zero) area - if (boost::size(ring) + if (int(boost::size(ring)) < core_detail::closure::minimum_ring_size::value) { return type(); @@ -135,9 +135,16 @@ namespace dispatch template < - typename Tag, typename Geometry, - typename Strategy + typename Strategy = typename strategy::area::services::default_strategy + < + typename cs_tag + < + typename point_type::type + >::type, + typename point_type::type + >::type, + typename Tag = typename tag::type > struct area : detail::calculate_null @@ -153,7 +160,7 @@ template typename Geometry, typename Strategy > -struct area +struct area : detail::area::box_area {}; @@ -163,7 +170,7 @@ template typename Ring, typename Strategy > -struct area +struct area : detail::area::ring_area < Ring, @@ -179,7 +186,7 @@ template typename Polygon, typename Strategy > -struct area +struct area : detail::calculate_polygon_sum < typename Strategy::return_type, @@ -234,11 +241,11 @@ inline typename default_area_result::type area(Geometry const& geometr point_type >::type strategy_type; + // detail::throw_on_empty_input(geometry); + return dispatch::area < - typename tag::type, - Geometry, - strategy_type + Geometry >::apply(geometry, strategy_type()); } @@ -272,9 +279,10 @@ inline typename Strategy::return_type area( { concept::check(); + // detail::throw_on_empty_input(geometry); + return dispatch::area < - typename tag::type, Geometry, Strategy >::apply(geometry, strategy); diff --git a/3party/boost/boost/geometry/algorithms/assign.hpp b/3party/boost/boost/geometry/algorithms/assign.hpp index df5cd663df..8c153c878d 100644 --- a/3party/boost/boost/geometry/algorithms/assign.hpp +++ b/3party/boost/boost/geometry/algorithms/assign.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -25,22 +25,21 @@ #include #include +#include +#include #include #include - -#include #include #include +#include #include #include #include #include - #include - namespace boost { namespace geometry { @@ -122,124 +121,6 @@ inline void assign_zero(Geometry& geometry) >::apply(geometry); } - -#ifndef DOXYGEN_NO_DETAIL -namespace detail -{ -// Note: this is moved to namespace detail because the names and parameter orders -// are not yet 100% clear. - -/*! -\brief Assign the four points of a 2D box -\ingroup assign -\note The order is crucial. Most logical is LOWER, UPPER and sub-order LEFT, RIGHT - so this is how it is implemented. -\tparam Box \tparam_box -\tparam Point \tparam_point -\param box \param_box -\param lower_left point being assigned to lower left coordinates of the box -\param lower_right point being assigned to lower right coordinates of the box -\param upper_left point being assigned to upper left coordinates of the box -\param upper_right point being assigned to upper right coordinates of the box - -\qbk{ -[heading Example] -[assign_box_corners] [assign_box_corners_output] -} -*/ -template -inline void assign_box_corners(Box const& box, - Point& lower_left, Point& lower_right, - Point& upper_left, Point& upper_right) -{ - concept::check(); - concept::check(); - - detail::assign::assign_box_2d_corner - (box, lower_left); - detail::assign::assign_box_2d_corner - (box, lower_right); - detail::assign::assign_box_2d_corner - (box, upper_left); - detail::assign::assign_box_2d_corner - (box, upper_right); -} - -template -inline void assign_box_corners_oriented(Box const& box, Range& corners) -{ - if (Reverse) - { - // make counterclockwise ll,lr,ur,ul - assign_box_corners(box, corners[0], corners[1], corners[3], corners[2]); - } - else - { - // make clockwise ll,ul,ur,lr - assign_box_corners(box, corners[0], corners[3], corners[1], corners[2]); - } -} - - -/*! -\brief Assign a box or segment with the value of a point -\ingroup assign -\tparam Index indicates which box-corner, min_corner (0) or max_corner (1) - or which point of segment (0/1) -\tparam Point \tparam_point -\tparam Geometry \tparam_box_or_segment -\param point \param_point -\param geometry \param_box_or_segment - -\qbk{ -[heading Example] -[assign_point_to_index] [assign_point_to_index_output] -} -*/ -template -inline void assign_point_to_index(Point const& point, Geometry& geometry) -{ - concept::check(); - concept::check(); - - detail::assign::assign_point_to_index - < - Geometry, Point, Index, 0, dimension::type::value - >::apply(point, geometry); -} - - -/*! -\brief Assign a point with a point of a box or segment -\ingroup assign -\tparam Index indicates which box-corner, min_corner (0) or max_corner (1) - or which point of segment (0/1) -\tparam Geometry \tparam_box_or_segment -\tparam Point \tparam_point -\param geometry \param_box_or_segment -\param point \param_point - -\qbk{ -[heading Example] -[assign_point_from_index] [assign_point_from_index_output] -} -*/ -template -inline void assign_point_from_index(Geometry const& geometry, Point& point) -{ - concept::check(); - concept::check(); - - detail::assign::assign_point_from_index - < - Geometry, Point, Index, 0, dimension::type::value - >::apply(geometry, point); -} - -} // namespace detail -#endif // DOXYGEN_NO_DETAIL - - /*! \brief Assigns one geometry to another geometry \details The assign algorithm assigns one geometry, e.g. a BOX, to another geometry, e.g. a RING. This only @@ -263,14 +144,23 @@ inline void assign(Geometry1& geometry1, Geometry2 const& geometry2) { concept::check_concepts_and_equal_dimensions(); - dispatch::convert - < - typename tag::type, - typename tag::type, - dimension::type::value, - Geometry2, - Geometry1 - >::apply(geometry2, geometry1); + bool const same_point_order = + point_order::value == point_order::value; + bool const same_closure = + closure::value == closure::value; + + BOOST_MPL_ASSERT_MSG + ( + same_point_order, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_POINT_ORDER + , (types) + ); + BOOST_MPL_ASSERT_MSG + ( + same_closure, ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_CLOSURE + , (types) + ); + + dispatch::convert::apply(geometry2, geometry1); } diff --git a/3party/boost/boost/geometry/algorithms/buffer.hpp b/3party/boost/boost/geometry/algorithms/buffer.hpp index 543d273359..e22e36addc 100644 --- a/3party/boost/boost/geometry/algorithms/buffer.hpp +++ b/3party/boost/boost/geometry/algorithms/buffer.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -83,7 +83,7 @@ template struct buffer { static inline void apply(BoxIn const& box_in, T const& distance, - T const& chord_length, BoxIn& box_out) + T const& , BoxIn& box_out) { detail::buffer::buffer_box(box_in, distance, box_out); } diff --git a/3party/boost/boost/geometry/algorithms/centroid.hpp b/3party/boost/boost/geometry/algorithms/centroid.hpp index a400e2e0ba..69ad9fe829 100644 --- a/3party/boost/boost/geometry/algorithms/centroid.hpp +++ b/3party/boost/boost/geometry/algorithms/centroid.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -191,7 +191,7 @@ struct centroid_range_state it != end; ++previous, ++it) { - Strategy::apply(*previous, *it, state); + strategy.apply(*previous, *it, state); } } }; @@ -211,7 +211,7 @@ struct centroid_range Closure, Strategy >::apply(range, strategy, state); - Strategy::result(state, centroid); + strategy.result(state, centroid); } } }; @@ -262,7 +262,7 @@ struct centroid_polygon Polygon, Strategy >::apply(poly, strategy, state); - Strategy::result(state, centroid); + strategy.result(state, centroid); } } }; diff --git a/3party/boost/boost/geometry/algorithms/clear.hpp b/3party/boost/boost/geometry/algorithms/clear.hpp index d4cf7fd776..d7336587ee 100644 --- a/3party/boost/boost/geometry/algorithms/clear.hpp +++ b/3party/boost/boost/geometry/algorithms/clear.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -79,7 +79,11 @@ struct no_action namespace dispatch { -template +template +< + typename Geometry, + typename Tag = typename tag_cast::type, multi_tag>::type +> struct clear { BOOST_MPL_ASSERT_MSG @@ -91,34 +95,34 @@ struct clear // Point/box/segment do not have clear. So specialize to do nothing. template -struct clear +struct clear : detail::clear::no_action {}; template -struct clear +struct clear : detail::clear::no_action {}; template -struct clear +struct clear : detail::clear::no_action {}; template -struct clear +struct clear : detail::clear::collection_clear {}; template -struct clear +struct clear : detail::clear::collection_clear {}; // Polygon can (indirectly) use std for clear template -struct clear +struct clear : detail::clear::polygon_clear {}; @@ -145,11 +149,7 @@ inline void clear(Geometry& geometry) { concept::check(); - dispatch::clear - < - typename tag_cast::type, multi_tag>::type, - Geometry - >::apply(geometry); + dispatch::clear::apply(geometry); } diff --git a/3party/boost/boost/geometry/algorithms/comparable_distance.hpp b/3party/boost/boost/geometry/algorithms/comparable_distance.hpp index fa48942727..3467045ca2 100644 --- a/3party/boost/boost/geometry/algorithms/comparable_distance.hpp +++ b/3party/boost/boost/geometry/algorithms/comparable_distance.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/convert.hpp b/3party/boost/boost/geometry/algorithms/convert.hpp index b90e008c1d..fbbf74c17f 100644 --- a/3party/boost/boost/geometry/algorithms/convert.hpp +++ b/3party/boost/boost/geometry/algorithms/convert.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,23 +11,33 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_HPP -#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_HPP +#ifndef BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP +#define BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP #include #include #include +#include #include +#include #include #include #include #include +#include +#include #include +#include + +#include +#include #include +#include +#include #include @@ -76,6 +86,123 @@ struct point_to_box {} }; +template +struct box_to_range +{ + static inline void apply(Box const& box, Range& range) + { + traits::resize::apply(range, Close ? 5 : 4); + assign_box_corners_oriented(box, range); + if (Close) + { + range[4] = range[0]; + } + } +}; + +template +struct segment_to_range +{ + static inline void apply(Segment const& segment, Range& range) + { + traits::resize::apply(range, 2); + + typename boost::range_iterator::type it = boost::begin(range); + + assign_point_from_index<0>(segment, *it); + ++it; + assign_point_from_index<1>(segment, *it); + } +}; + +template +< + typename Range1, + typename Range2, + bool Reverse = false +> +struct range_to_range +{ + typedef typename reversible_view + < + Range1 const, + Reverse ? iterate_reverse : iterate_forward + >::type rview_type; + typedef typename closeable_view + < + rview_type const, + geometry::closure::value + >::type view_type; + + static inline void apply(Range1 const& source, Range2& destination) + { + geometry::clear(destination); + + rview_type rview(source); + + // We consider input always as closed, and skip last + // point for open output. + view_type view(rview); + + int n = boost::size(view); + if (geometry::closure::value == geometry::open) + { + n--; + } + + int i = 0; + for (typename boost::range_iterator::type it + = boost::begin(view); + it != boost::end(view) && i < n; + ++it, ++i) + { + geometry::append(destination, *it); + } + } +}; + +template +struct polygon_to_polygon +{ + typedef range_to_range + < + typename geometry::ring_type::type, + typename geometry::ring_type::type, + geometry::point_order::value + != geometry::point_order::value + > per_ring; + + static inline void apply(Polygon1 const& source, Polygon2& destination) + { + // Clearing managed per ring, and in the resizing of interior rings + + per_ring::apply(geometry::exterior_ring(source), + geometry::exterior_ring(destination)); + + // Container should be resizeable + traits::resize + < + typename boost::remove_reference + < + typename traits::interior_mutable_type::type + >::type + >::apply(interior_rings(destination), num_interior_rings(source)); + + typename interior_return_type::type rings_source + = interior_rings(source); + typename interior_return_type::type rings_dest + = interior_rings(destination); + + BOOST_AUTO_TPL(it_source, boost::begin(rings_source)); + BOOST_AUTO_TPL(it_dest, boost::begin(rings_dest)); + + for ( ; it_source != boost::end(rings_source); ++it_source, ++it_dest) + { + per_ring::apply(*it_source, *it_dest); + } + } +}; + }} // namespace detail::conversion #endif // DOXYGEN_NO_DETAIL @@ -87,25 +214,26 @@ namespace dispatch template < - typename Tag1, typename Tag2, - std::size_t DimensionCount, - typename Geometry1, typename Geometry2 + typename Geometry1, typename Geometry2, + typename Tag1 = typename tag_cast::type, multi_tag>::type, + typename Tag2 = typename tag_cast::type, multi_tag>::type, + std::size_t DimensionCount = dimension::type::value, + bool UseAssignment = boost::is_same::value + && !boost::is_array::value > -struct convert -{ -}; +struct convert: not_implemented > +{}; template < + typename Geometry1, typename Geometry2, typename Tag, - std::size_t DimensionCount, - typename Geometry1, typename Geometry2 + std::size_t DimensionCount > -struct convert +struct convert { - // Same geometry type -> copy coordinates from G1 to G2 - // Actually: we try now to just copy it + // Same geometry type -> copy whole geometry static inline void apply(Geometry1 const& source, Geometry2& destination) { destination = source; @@ -115,60 +243,75 @@ struct convert template < - std::size_t DimensionCount, - typename Geometry1, typename Geometry2 + typename Geometry1, typename Geometry2, + std::size_t DimensionCount > -struct convert +struct convert : detail::conversion::point_to_point {}; -template -struct convert -{ - static inline void apply(Ring1 const& source, Ring2& destination) - { - geometry::clear(destination); - for (typename boost::range_iterator::type it - = boost::begin(source); - it != boost::end(source); - ++it) - { - geometry::append(destination, *it); - } - } -}; +template +< + typename Box1, typename Box2, + std::size_t DimensionCount +> +struct convert + : detail::conversion::indexed_to_indexed +{}; +template +< + typename Segment1, typename Segment2, + std::size_t DimensionCount +> +struct convert + : detail::conversion::indexed_to_indexed +{}; + + +template +struct convert + : detail::conversion::segment_to_range +{}; + + +template +struct convert + : detail::conversion::range_to_range + < + Ring1, + Ring2, + geometry::point_order::value + != geometry::point_order::value + > +{}; + +template +struct convert + : detail::conversion::range_to_range +{}; + +template +struct convert + : detail::conversion::polygon_to_polygon +{}; + template -struct convert -{ - static inline void apply(Box const& box, Ring& ring) - { - // go from box to ring -> add coordinates in correct order - geometry::clear(ring); - typename point_type::type point; - - geometry::assign_values(point, get(box), get(box)); - geometry::append(ring, point); - - geometry::assign_values(point, get(box), get(box)); - geometry::append(ring, point); - - geometry::assign_values(point, get(box), get(box)); - geometry::append(ring, point); - - geometry::assign_values(point, get(box), get(box)); - geometry::append(ring, point); - - geometry::assign_values(point, get(box), get(box)); - geometry::append(ring, point); - } -}; +struct convert + : detail::conversion::box_to_range + < + Box, + Ring, + geometry::closure::value == closed, + geometry::point_order::value == counterclockwise + > +{}; template -struct convert +struct convert { static inline void apply(Box const& box, Polygon& polygon) { @@ -176,15 +319,16 @@ struct convert convert < + Box, ring_type, box_tag, ring_tag, - 2, Box, ring_type + 2, false >::apply(box, exterior_ring(polygon)); } }; -template -struct convert +template +struct convert { static inline void apply(Point const& point, Box& box) { @@ -200,23 +344,24 @@ struct convert }; -template -struct convert +template +struct convert { static inline void apply(Ring const& ring, Polygon& polygon) { typedef typename ring_type::type ring_type; convert < - ring_tag, ring_tag, DimensionCount, - Ring, ring_type + Ring, ring_type, + ring_tag, ring_tag, + DimensionCount, false >::apply(ring, exterior_ring(polygon)); } }; -template -struct convert +template +struct convert { static inline void apply(Polygon const& polygon, Ring& ring) { @@ -224,8 +369,9 @@ struct convert convert < - ring_tag, ring_tag, DimensionCount, - ring_type, Ring + ring_type, Ring, + ring_tag, ring_tag, + DimensionCount, false >::apply(exterior_ring(polygon), ring); } }; @@ -237,8 +383,11 @@ struct convert /*! \brief Converts one geometry to another geometry -\details The convert algorithm converts one geometry, e.g. a BOX, to another geometry, e.g. a RING. This only -if it is possible and applicable. +\details The convert algorithm converts one geometry, e.g. a BOX, to another +geometry, e.g. a RING. This only if it is possible and applicable. +If the point-order is different, or the closure is different between two +geometry types, it will be converted correctly by explicitly reversing the +points or closing or opening the polygon rings. \ingroup convert \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry @@ -252,18 +401,11 @@ inline void convert(Geometry1 const& geometry1, Geometry2& geometry2) { concept::check_concepts_and_equal_dimensions(); - dispatch::convert - < - typename tag::type, - typename tag::type, - dimension::type::value, - Geometry1, - Geometry2 - >::apply(geometry1, geometry2); + dispatch::convert::apply(geometry1, geometry2); } }} // namespace boost::geometry -#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_HPP +#endif // BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP diff --git a/3party/boost/boost/geometry/algorithms/convex_hull.hpp b/3party/boost/boost/geometry/algorithms/convex_hull.hpp index ac10e89c4c..56b87c8c15 100644 --- a/3party/boost/boost/geometry/algorithms/convex_hull.hpp +++ b/3party/boost/boost/geometry/algorithms/convex_hull.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -14,7 +14,7 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP #define BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP - +#include #include #include @@ -27,12 +27,15 @@ #include +#include #include +#include namespace boost { namespace geometry { + #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace convex_hull { @@ -63,11 +66,11 @@ struct hull_insert template < typename Geometry, - typename OutputGeometry, typename Strategy > struct hull_to_geometry { + template static inline void apply(Geometry const& geometry, OutputGeometry& out, Strategy const& strategy) { @@ -87,6 +90,17 @@ struct hull_to_geometry }; +// Helper metafunction for default strategy retrieval +template +struct default_strategy + : strategy_convex_hull + < + Geometry, + typename point_type::type + > +{}; + + }} // namespace detail::convex_hull #endif // DOXYGEN_NO_DETAIL @@ -98,24 +112,50 @@ namespace dispatch template < - typename Tag1, typename Geometry, - typename Output, - typename Strategy + typename Strategy = typename detail::convex_hull::default_strategy::type, + typename Tag = typename tag::type > struct convex_hull - : detail::convex_hull::hull_to_geometry + : detail::convex_hull::hull_to_geometry {}; +template +< + typename Box, + typename Strategy +> +struct convex_hull +{ + template + static inline void apply(Box const& box, OutputGeometry& out, + Strategy const& ) + { + static bool const Close + = geometry::closure::value == closed; + static bool const Reverse + = geometry::point_order::value == counterclockwise; + + // A hull for boxes is trivial. Any strategy is (currently) skipped. + boost::array::type, 4> range; + geometry::detail::assign_box_corners_oriented(box, range); + geometry::append(out, range); + if (Close) + { + geometry::append(out, *boost::begin(range)); + } + } +}; + + template < - typename GeometryTag, order_selector Order, - typename GeometryIn, typename Strategy - > + typename Geometry, typename Strategy +> struct convex_hull_insert - : detail::convex_hull::hull_insert + : detail::convex_hull::hull_insert {}; @@ -123,24 +163,27 @@ struct convex_hull_insert #endif // DOXYGEN_NO_DISPATCH -template -inline void convex_hull(Geometry1 const& geometry, - Geometry2& out, Strategy const& strategy) +template +inline void convex_hull(Geometry const& geometry, + OutputGeometry& out, Strategy const& strategy) { concept::check_concepts_and_equal_dimensions < - const Geometry1, - Geometry2 + const Geometry, + OutputGeometry >(); BOOST_CONCEPT_ASSERT( (geometry::concept::ConvexHullStrategy) ); + if (geometry::num_points(geometry) == 0) + { + // Leave output empty + return; + } dispatch::convex_hull < - typename tag::type, - Geometry1, - Geometry2, + Geometry, Strategy >::apply(geometry, out, strategy); } @@ -157,24 +200,17 @@ inline void convex_hull(Geometry1 const& geometry, \qbk{[include reference/algorithms/convex_hull.qbk]} */ -template -inline void convex_hull(Geometry1 const& geometry, - Geometry2& hull) +template +inline void convex_hull(Geometry const& geometry, + OutputGeometry& hull) { concept::check_concepts_and_equal_dimensions < - const Geometry1, - Geometry2 + const Geometry, + OutputGeometry >(); - typedef typename point_type::type point_type; - - typedef typename strategy_convex_hull - < - typename cs_tag::type, - Geometry1, - point_type - >::type strategy_type; + typedef typename detail::convex_hull::default_strategy::type strategy_type; convex_hull(geometry, hull, strategy_type()); } @@ -196,7 +232,6 @@ inline OutputIterator convex_hull_insert(Geometry const& geometry, return dispatch::convex_hull_insert < - typename tag::type, geometry::point_order::value, Geometry, Strategy >::apply(geometry, out, strategy); @@ -224,14 +259,7 @@ inline OutputIterator convex_hull_insert(Geometry const& geometry, concept::check(); concept::check::type>(); - typedef typename point_type::type point_type; - - typedef typename strategy_convex_hull - < - typename cs_tag::type, - Geometry, - point_type - >::type strategy_type; + typedef typename detail::convex_hull::default_strategy::type strategy_type; return convex_hull_insert(geometry, out, strategy_type()); } diff --git a/3party/boost/boost/geometry/algorithms/correct.hpp b/3party/boost/boost/geometry/algorithms/correct.hpp index cc7911f3c1..583e395f8e 100644 --- a/3party/boost/boost/geometry/algorithms/correct.hpp +++ b/3party/boost/boost/geometry/algorithms/correct.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -80,7 +80,7 @@ struct correct_box_loop template struct correct_box_loop { - static inline void apply(Box& box) + static inline void apply(Box& ) {} }; @@ -147,7 +147,8 @@ struct correct_ring } // Check area Predicate predicate; - coordinate_type const zero = 0; + typedef typename default_area_result::type area_result_type; + area_result_type const zero = area_result_type(); if (predicate(ring_area_type::apply(r, strategy_type()), zero)) { std::reverse(boost::begin(r), boost::end(r)); @@ -161,14 +162,14 @@ template struct correct_polygon { typedef typename ring_type::type ring_type; - typedef typename coordinate_type::type coordinate_type; + typedef typename default_area_result::type area_result_type; static inline void apply(Polygon& poly) { correct_ring < ring_type, - std::less + std::less >::apply(exterior_ring(poly)); typename interior_return_type::type rings @@ -178,7 +179,7 @@ struct correct_polygon correct_ring < ring_type, - std::greater + std::greater >::apply(*it); } } @@ -193,48 +194,42 @@ struct correct_polygon namespace dispatch { -template -struct correct -{ - BOOST_MPL_ASSERT_MSG - ( - false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE - , (types) - ); -}; +template ::type> +struct correct: not_implemented +{}; template -struct correct +struct correct : detail::correct::correct_nop {}; template -struct correct +struct correct : detail::correct::correct_nop {}; template -struct correct +struct correct : detail::correct::correct_nop {}; template -struct correct +struct correct : detail::correct::correct_box {}; template -struct correct +struct correct : detail::correct::correct_ring < Ring, - std::less::type> + std::less::type> > {}; template -struct correct +struct correct : detail::correct::correct_polygon {}; @@ -260,7 +255,7 @@ inline void correct(Geometry& geometry) { concept::check(); - dispatch::correct::type, Geometry>::apply(geometry); + dispatch::correct::apply(geometry); } diff --git a/3party/boost/boost/geometry/algorithms/covered_by.hpp b/3party/boost/boost/geometry/algorithms/covered_by.hpp new file mode 100644 index 0000000000..c3c406c4ca --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/covered_by.hpp @@ -0,0 +1,195 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP +#define BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP + + +#include + +#include +#include + +#include +#include + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch +{ + +template +< + typename Geometry1, + typename Geometry2, + typename Tag1 = typename tag::type, + typename Tag2 = typename tag::type +> +struct covered_by: not_implemented +{}; + + +template +struct covered_by +{ + template + static inline bool apply(Point const& point, Box const& box, Strategy const& strategy) + { + return strategy.apply(point, box); + } +}; + +template +struct covered_by +{ + template + static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy) + { + assert_dimension_equal(); + return strategy.apply(box1, box2); + } +}; + + + +template +struct covered_by +{ + template + static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy) + { + return detail::within::point_in_ring + < + Point, + Ring, + order_as_direction::value>::value, + geometry::closure::value, + Strategy + >::apply(point, ring, strategy) >= 0; + } +}; + +template +struct covered_by +{ + template + static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy) + { + return detail::within::point_in_polygon + < + Point, + Polygon, + order_as_direction::value>::value, + geometry::closure::value, + Strategy + >::apply(point, polygon, strategy) >= 0; + } +}; + +} // namespace dispatch +#endif // DOXYGEN_NO_DISPATCH + + +/*! +\brief \brief_check12{is inside or on border} +\ingroup covered_by +\details \details_check12{covered_by, is inside or on border}. +\tparam Geometry1 \tparam_geometry +\tparam Geometry2 \tparam_geometry +\param geometry1 \param_geometry which might be inside or on the border of the second geometry +\param geometry2 \param_geometry which might cover the first geometry +\return true if geometry1 is inside of or on the border of geometry2, + else false +\note The default strategy is used for covered_by detection + +\qbk{[include reference/algorithms/covered_by.qbk]} + + */ +template +inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2) +{ + concept::check(); + concept::check(); + assert_dimension_equal(); + + typedef typename point_type::type point_type1; + typedef typename point_type::type point_type2; + + typedef typename strategy::covered_by::services::default_strategy + < + typename tag::type, + typename tag::type, + typename tag::type, + typename tag_cast::type, areal_tag>::type, + typename tag_cast + < + typename cs_tag::type, spherical_tag + >::type, + typename tag_cast + < + typename cs_tag::type, spherical_tag + >::type, + Geometry1, + Geometry2 + >::type strategy_type; + + return dispatch::covered_by + < + Geometry1, + Geometry2 + >::apply(geometry1, geometry2, strategy_type()); +} + +/*! +\brief \brief_check12{is inside or on border} \brief_strategy +\ingroup covered_by +\details \details_check12{covered_by, is inside or on border}, \brief_strategy. \details_strategy_reasons +\tparam Geometry1 \tparam_geometry +\tparam Geometry2 \tparam_geometry +\param geometry1 \param_geometry which might be inside or on the border of the second geometry +\param geometry2 \param_geometry which might cover the first geometry +\param strategy strategy to be used +\return true if geometry1 is inside of or on the border of geometry2, + else false + +\qbk{distinguish,with strategy} +\qbk{[include reference/algorithms/covered_by.qbk]} + +*/ +template +inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2, + Strategy const& strategy) +{ + concept::within::check + < + typename tag::type, + typename tag::type, + typename tag_cast::type, areal_tag>::type, + Strategy + >(); + concept::check(); + concept::check(); + assert_dimension_equal(); + + return dispatch::covered_by + < + Geometry1, + Geometry2 + >::apply(geometry1, geometry2, strategy); +} + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/as_range.hpp b/3party/boost/boost/geometry/algorithms/detail/as_range.hpp index 6311e23f63..d0dfb07e43 100644 --- a/3party/boost/boost/geometry/algorithms/detail/as_range.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/as_range.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp b/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp new file mode 100644 index 0000000000..1fd41733f2 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp @@ -0,0 +1,93 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP + + +#include + +#include +#include + + + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ +// Note: this is moved to namespace detail because the names and parameter orders +// are not yet 100% clear. + +/*! +\brief Assign the four points of a 2D box +\ingroup assign +\note The order is crucial. Most logical is LOWER, UPPER and sub-order LEFT, RIGHT + so this is how it is implemented. +\tparam Box \tparam_box +\tparam Point \tparam_point +\param box \param_box +\param lower_left point being assigned to lower left coordinates of the box +\param lower_right point being assigned to lower right coordinates of the box +\param upper_left point being assigned to upper left coordinates of the box +\param upper_right point being assigned to upper right coordinates of the box + +\qbk{ +[heading Example] +[assign_box_corners] [assign_box_corners_output] +} +*/ +template +inline void assign_box_corners(Box const& box, + Point& lower_left, Point& lower_right, + Point& upper_left, Point& upper_right) +{ + concept::check(); + concept::check(); + + detail::assign::assign_box_2d_corner + (box, lower_left); + detail::assign::assign_box_2d_corner + (box, lower_right); + detail::assign::assign_box_2d_corner + (box, upper_left); + detail::assign::assign_box_2d_corner + (box, upper_right); +} + +template +inline void assign_box_corners_oriented(Box const& box, Range& corners) +{ + if (Reverse) + { + // make counterclockwise ll,lr,ur,ul + assign_box_corners(box, corners[0], corners[1], corners[3], corners[2]); + } + else + { + // make clockwise ll,ul,ur,lr + assign_box_corners(box, corners[0], corners[3], corners[1], corners[2]); + } +} + + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp b/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp new file mode 100644 index 0000000000..a1cffb80a7 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp @@ -0,0 +1,94 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP + + +#include + +#include +#include + + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ + +/*! +\brief Assign a box or segment with the value of a point +\ingroup assign +\tparam Index indicates which box-corner, min_corner (0) or max_corner (1) + or which point of segment (0/1) +\tparam Point \tparam_point +\tparam Geometry \tparam_box_or_segment +\param point \param_point +\param geometry \param_box_or_segment + +\qbk{ +[heading Example] +[assign_point_to_index] [assign_point_to_index_output] +} +*/ +template +inline void assign_point_to_index(Point const& point, Geometry& geometry) +{ + concept::check(); + concept::check(); + + detail::assign::assign_point_to_index + < + Geometry, Point, Index, 0, dimension::type::value + >::apply(point, geometry); +} + + +/*! +\brief Assign a point with a point of a box or segment +\ingroup assign +\tparam Index indicates which box-corner, min_corner (0) or max_corner (1) + or which point of segment (0/1) +\tparam Geometry \tparam_box_or_segment +\tparam Point \tparam_point +\param geometry \param_box_or_segment +\param point \param_point + +\qbk{ +[heading Example] +[assign_point_from_index] [assign_point_from_index_output] +} +*/ +template +inline void assign_point_from_index(Geometry const& geometry, Point& point) +{ + concept::check(); + concept::check(); + + detail::assign::assign_point_from_index + < + Geometry, Point, Index, 0, dimension::type::value + >::apply(geometry, point); +} + + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp b/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp index d9c6fc49d6..ed4713493f 100644 --- a/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/assign_values.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -90,14 +90,7 @@ struct assign_inverse_box_or_segment static inline void apply(BoxOrSegment& geometry) { - typedef typename coordinate_type::type coordinate_type; - - typedef typename boost::mpl::if_ - < - typename boost::is_arithmetic::type, - coordinate_type, - double - >::type bound_type; + typedef typename coordinate_type::type bound_type; initialize < @@ -207,7 +200,7 @@ struct assign_point_from_index { geometry::set( point, boost::numeric_cast < - typename coordinate_type::type + typename coordinate_type::type >(geometry::get(geometry))); assign_point_from_index diff --git a/3party/boost/boost/geometry/algorithms/detail/calculate_null.hpp b/3party/boost/boost/geometry/algorithms/detail/calculate_null.hpp index aa64a5e92d..4b48d62fc2 100644 --- a/3party/boost/boost/geometry/algorithms/detail/calculate_null.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/calculate_null.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp b/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp index a95fb0122a..2ad349080b 100644 --- a/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/calculate_sum.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp b/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp new file mode 100644 index 0000000000..d39824a61d --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp @@ -0,0 +1,80 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP + + +#include + +#include +#include +#include +#include + + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace conversion +{ + + +template +< + typename Source, + typename Destination, + std::size_t Dimension, + std::size_t DimensionCount +> +struct indexed_to_indexed +{ + static inline void apply(Source const& source, Destination& destination) + { + typedef typename coordinate_type::type coordinate_type; + + geometry::set(destination, + boost::numeric_cast( + geometry::get(source))); + geometry::set(destination, + boost::numeric_cast( + geometry::get(source))); + + indexed_to_indexed + < + Source, Destination, + Dimension + 1, DimensionCount + >::apply(source, destination); + } +}; + +template +< + typename Source, + typename Destination, + std::size_t DimensionCount +> +struct indexed_to_indexed +{ + static inline void apply(Source const& , Destination& ) + {} +}; + + +}} // namespace detail::conversion +#endif // DOXYGEN_NO_DETAIL + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp b/3party/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp index 0c42fd936f..c7d37b6ca4 100644 --- a/3party/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp b/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp index 8d565bc0fd..2ced5b1ce3 100644 --- a/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/disjoint.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp b/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp index 2bfec728b9..9c2fe28057 100644 --- a/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp b/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp index 461bb17cea..7cb01fa9b4 100644 --- a/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/for_each_range.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -15,13 +15,14 @@ #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP +#include #include - #include #include #include +#include namespace boost { namespace geometry @@ -59,6 +60,17 @@ struct fe_range_polygon } }; +template +struct fe_range_box +{ + static inline void apply( + typename add_const_if_c::type& box, + Actor& actor) + { + actor.apply(box_view(box)); + } +}; + }} // namespace detail::for_each #endif // DOXYGEN_NO_DETAIL @@ -76,7 +88,14 @@ template typename Actor, bool IsConst > -struct for_each_range {}; +struct for_each_range +{ + BOOST_MPL_ASSERT_MSG + ( + false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE + , (types) + ); +}; template @@ -96,6 +115,11 @@ struct for_each_range : detail::for_each::fe_range_polygon {}; +template +struct for_each_range + : detail::for_each::fe_range_box +{}; + } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH diff --git a/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp new file mode 100644 index 0000000000..62f0f7f0f4 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/get_left_turns.hpp @@ -0,0 +1,367 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP + +#include + +namespace boost { namespace geometry +{ + + +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ + +// TODO: move this to /util/ +template +static inline std::pair ordered_pair(T const& first, T const& second) +{ + return first < second ? std::make_pair(first, second) : std::make_pair(second, first); +} + +template +inline void debug_left_turn(AngleInfo const& ai, AngleInfo const& previous) +{ +#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION + std::cout << "Angle: " << (ai.incoming ? "i" : "o") + << " " << si(ai.seg_id) + << " " << (math::r2d * (ai.angle) ) + << " turn: " << ai.turn_index << "[" << ai.operation_index << "]" + ; + + if (ai.turn_index != previous.turn_index + || ai.operation_index != previous.operation_index) + { + std::cout << " diff: " << math::r2d * math::abs(previous.angle - ai.angle); + } + std::cout << std::endl; +#endif +} + +template +inline void debug_left_turn(std::string const& caption, AngleInfo const& ai, AngleInfo const& previous, + int code = -99, int code2 = -99, int code3 = -99, int code4 = -99) +{ +#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION + std::cout << " " << caption + << " turn: " << ai.turn_index << "[" << ai.operation_index << "]" + << " " << si(ai.seg_id) + << " " << (ai.incoming ? "i" : "o") + << " " << (math::r2d * (ai.angle) ) + << " turn: " << previous.turn_index << "[" << previous.operation_index << "]" + << " " << si(previous.seg_id) + << " " << (previous.incoming ? "i" : "o") + << " " << (math::r2d * (previous.angle) ) + ; + + if (code != -99) + { + std::cout << " code: " << code << " , " << code2 << " , " << code3 << " , " << code4; + } + std::cout << std::endl; +#endif +} + + +template +inline bool include_operation(Operation const& op, + segment_identifier const& outgoing_seg_id, + segment_identifier const& incoming_seg_id) +{ + return op.seg_id == outgoing_seg_id + && op.other_id == incoming_seg_id + && (op.operation == detail::overlay::operation_union + ||op.operation == detail::overlay::operation_continue) + ; +} + +template +inline bool process_include(segment_identifier const& outgoing_seg_id, segment_identifier const& incoming_seg_id, + int turn_index, Turn& turn, + std::set& keep_indices, int priority) +{ + bool result = false; + for (int i = 0; i < 2; i++) + { + if (include_operation(turn.operations[i], outgoing_seg_id, incoming_seg_id)) + { + turn.operations[i].include_in_occupation_map = true; + if (priority > turn.priority) + { + turn.priority = priority; + } + keep_indices.insert(turn_index); + result = true; + } + } + return result; +} + +template +inline bool include_left_turn_of_all( + AngleInfo const& outgoing, AngleInfo const& incoming, + Turns& turns, TurnSegmentIndices const& turn_segment_indices, + std::set& keep_indices, int priority) +{ + segment_identifier const& outgoing_seg_id = turns[outgoing.turn_index].operations[outgoing.operation_index].seg_id; + segment_identifier const& incoming_seg_id = turns[incoming.turn_index].operations[incoming.operation_index].seg_id; + + if (outgoing.turn_index == incoming.turn_index) + { + return process_include(outgoing_seg_id, incoming_seg_id, outgoing.turn_index, turns[outgoing.turn_index], keep_indices, priority); + } + + bool result = false; + std::pair pair = ordered_pair(outgoing_seg_id, incoming_seg_id); + auto it = turn_segment_indices.find(pair); + if (it != turn_segment_indices.end()) + { + for (auto sit = it->second.begin(); sit != it->second.end(); ++sit) + { + if (process_include(outgoing_seg_id, incoming_seg_id, *sit, turns[*sit], keep_indices, priority)) + { + result = true; + } + } + } + return result; +} + +template +inline bool corresponds(Turn const& turn, segment_identifier const& seg_id) +{ + return turn.operations[Index].operation == detail::overlay::operation_union + && turn.operations[Index].seg_id == seg_id; +} + + +template +inline bool prefer_by_other(Turns const& turns, + TurnSegmentIndices const& turn_segment_indices, + std::set& indices) +{ + std::map map; + for (auto sit = indices.begin(); sit != indices.end(); ++sit) + { + map[turns[*sit].operations[0].seg_id]++; + map[turns[*sit].operations[1].seg_id]++; + } + + std::set segment_occuring_once; + for (auto mit = map.begin(); mit != map.end(); ++mit) + { + if (mit->second == 1) + { + segment_occuring_once.insert(mit->first); + } +#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_PREFER + std::cout << si(mit->first) << " " << mit->second << std::endl; +#endif + } + + if (segment_occuring_once.size() == 2) + { + // Try to find within all turns a turn with these two segments + + std::set::const_iterator soo_it = segment_occuring_once.begin(); + segment_identifier front = *soo_it; + soo_it++; + segment_identifier back = *soo_it; + + std::pair pair = ordered_pair(front, back); + auto it = turn_segment_indices.find(pair); + if (it != turn_segment_indices.end()) + { + // debug_turns_by_indices("Found", it->second); + // Check which is the union/continue + segment_identifier good; + for (auto sit = it->second.begin(); sit != it->second.end(); ++sit) + { + if (turns[*sit].operations[0].operation == detail::overlay::operation_union) + { + good = turns[*sit].operations[0].seg_id; + } + else if (turns[*sit].operations[1].operation == detail::overlay::operation_union) + { + good = turns[*sit].operations[1].seg_id; + } + } + +#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_PREFER + std::cout << "Good: " << si(good) << std::endl; +#endif + + // Find in indexes-to-keep this segment with the union. Discard the other one + std::set ok_indices; + for (auto sit = indices.begin(); sit != indices.end(); ++sit) + { + if (corresponds<0>(turns[*sit], good) || corresponds<1>(turns[*sit], good)) + { + ok_indices.insert(*sit); + } + } + if (ok_indices.size() > 0 && ok_indices.size() < indices.size()) + { + indices = ok_indices; + std::cout << "^"; + return true; + } + } + } + return false; +} + +template +inline void prefer_by_priority(Turns const& turns, std::set& indices) +{ + // Find max prio + int min_prio = 1024, max_prio = 0; + for (auto sit = indices.begin(); sit != indices.end(); ++sit) + { + if (turns[*sit].priority > max_prio) + { + max_prio = turns[*sit].priority; + } + if (turns[*sit].priority < min_prio) + { + min_prio = turns[*sit].priority; + } + } + + if (min_prio == max_prio) + { + return; + } + + // Only keep indices with high prio + std::set ok_indices; + for (auto sit = indices.begin(); sit != indices.end(); ++sit) + { + if (turns[*sit].priority >= max_prio) + { + ok_indices.insert(*sit); + } + } + if (ok_indices.size() > 0 && ok_indices.size() < indices.size()) + { + indices = ok_indices; + std::cout << "%"; + } +} + +template +inline void calculate_left_turns(Angles const& angles, + Turns& turns, TurnSegmentIndices const& turn_segment_indices, + std::set& keep_indices) +{ + bool debug_indicate_size = false; + + typedef typename strategy::side::services::default_strategy + < + typename cs_tag::type + >::type side_strategy; + + std::size_t i = 0; + std::size_t n = boost::size(angles); + + typedef geometry::ever_circling_range_iterator circling_iterator; + circling_iterator cit(angles); + + debug_left_turn(*cit, *cit); + for(circling_iterator prev = cit++; i < n; prev = cit++, i++) + { + debug_left_turn(*cit, *prev); + + bool const include = ! geometry::math::equals(prev->angle, cit->angle) + && ! prev->incoming + && cit->incoming; + + if (include) + { + // Go back to possibly include more same left outgoing angles: + // Because we check on side too we can take a large "epsilon" + circling_iterator back = prev - 1; + + typename AngleInfo::angle_type eps = 0.00001; + int b = 1; + for(std::size_t d = 0; + math::abs(prev->angle - back->angle) < eps + && ! back->incoming + && d < n; + d++) + { + --back; + ++b; + } + + // Same but forward to possibly include more incoming angles + int f = 1; + circling_iterator forward = cit + 1; + for(std::size_t d = 0; + math::abs(cit->angle - forward->angle) < eps + && forward->incoming + && d < n; + d++) + { + ++forward; + ++f; + } + +#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION + std::cout << "HANDLE " << b << "/" << f << " ANGLES" << std::endl; +#endif + for(circling_iterator bit = prev; bit != back; --bit) + { + int code = side_strategy::apply(bit->direction_point, prev->intersection_point, prev->direction_point); + int code2 = side_strategy::apply(prev->direction_point, bit->intersection_point, bit->direction_point); + for(circling_iterator fit = cit; fit != forward; ++fit) + { + int code3 = side_strategy::apply(fit->direction_point, cit->intersection_point, cit->direction_point); + int code4 = side_strategy::apply(cit->direction_point, fit->intersection_point, fit->direction_point); + + int priority = 2; + if (code == -1 && code2 == 1) + { + // This segment is lying right of the other one. + // Cannot ignore it (because of robustness, see a.o. #rt_p21 from unit test). + // But if we find more we can prefer later by priority + // (a.o. necessary for #rt_o2 from unit test) + priority = 1; + } + + bool included = include_left_turn_of_all(*bit, *fit, turns, turn_segment_indices, keep_indices, priority); + debug_left_turn(included ? "KEEP" : "SKIP", *fit, *bit, code, code2, code3, code4); + } + } + } + } + + if (debug_indicate_size) + { + std::cout << " size=" << keep_indices.size(); + } + + if (keep_indices.size() >= 2) + { + prefer_by_other(turns, turn_segment_indices, keep_indices); + } + if (keep_indices.size() >= 2) + { + prefer_by_priority(turns, keep_indices); + } +} + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp b/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp index 38493878c9..1e6215ed93 100644 --- a/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -21,7 +21,7 @@ #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS # include -# include +# include #endif @@ -59,11 +59,10 @@ namespace detail { namespace overlay template inline bool has_self_intersections(Geometry const& geometry) { - using namespace boost::geometry; typedef typename point_type::type point_type; typedef detail::overlay::turn_info turn_info; std::deque turns; - detail::get_turns::no_interrupt_policy policy; + detail::disjoint::disjoint_interrupt_policy policy; geometry::self_turns(geometry, turns, policy); #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS diff --git a/3party/boost/boost/geometry/algorithms/detail/not.hpp b/3party/boost/boost/geometry/algorithms/detail/not.hpp index cd50f28f4f..abc3a4e168 100644 --- a/3party/boost/boost/geometry/algorithms/detail/not.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/not.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp b/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp new file mode 100644 index 0000000000..e147ba12d8 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/occupation_info.hpp @@ -0,0 +1,329 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP + +#if ! defined(NDEBUG) + #define BOOST_GEOMETRY_DEBUG_BUFFER_OCCUPATION +#endif + +#include +#include + +#include +#include + +#include +#include + +#include + + +namespace boost { namespace geometry +{ + + +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ + +template +class relaxed_less +{ + typedef typename geometry::coordinate_type

::type coordinate_type; + + coordinate_type epsilon; + +public : + + inline relaxed_less() + { + // TODO: adapt for ttmath, and maybe build the map in another way + // (e.g. exact constellations of segment-id's), maybe adaptive. + epsilon = std::numeric_limits::epsilon() * 100.0; + } + + inline bool operator()(P const& a, P const& b) const + { + coordinate_type const dx = math::abs(geometry::get<0>(a) - geometry::get<0>(b)); + coordinate_type const dy = math::abs(geometry::get<1>(a) - geometry::get<1>(b)); + + + if (dx < epsilon && dy < epsilon) + { + return false; + } + if (dx < epsilon) + { + return geometry::get<1>(a) < geometry::get<1>(b); + } + + return geometry::get<0>(a) < geometry::get<0>(b); + } + + inline bool equals(P const& a, P const& b) const + { + typedef typename geometry::coordinate_type

::type coordinate_type; + + coordinate_type const dx = math::abs(geometry::get<0>(a) - geometry::get<0>(b)); + coordinate_type const dy = math::abs(geometry::get<1>(a) - geometry::get<1>(b)); + + return dx < epsilon && dy < epsilon; + }; +}; + + +template +inline T calculate_angle(P1 const& from_point, P2 const& to_point) +{ + typedef P1 vector_type; + vector_type v = from_point; + geometry::subtract_point(v, to_point); + return atan2(geometry::get<1>(v), geometry::get<0>(v)); +} + +template +inline Iterator advance_circular(Iterator it, Vector const& vector, segment_identifier& seg_id, bool forward = true) +{ + int const increment = forward ? 1 : -1; + if (it == boost::begin(vector) && increment < 0) + { + it = boost::end(vector); + seg_id.segment_index = boost::size(vector); + } + it += increment; + seg_id.segment_index += increment; + if (it == boost::end(vector)) + { + seg_id.segment_index = 0; + it = boost::begin(vector); + } + return it; +} + +template +struct angle_info +{ + typedef T angle_type; + typedef Point point_type; + + segment_identifier seg_id; + int turn_index; + int operation_index; + Point intersection_point; + Point direction_point; + T angle; + bool incoming; +}; + +template +class occupation_info +{ + typedef std::vector collection_type; + + struct angle_sort + { + inline bool operator()(AngleInfo const& left, AngleInfo const& right) const + { + // In this case we can compare even double using equals + // return geometry::math::equals(left.angle, right.angle) + return left.angle == right.angle + ? int(left.incoming) < int(right.incoming) + : left.angle < right.angle + ; + } + }; + +public : + collection_type angles; +private : + bool m_occupied; + bool m_calculated; + + inline bool is_occupied() + { + if (boost::size(angles) <= 1) + { + return false; + } + + std::sort(angles.begin(), angles.end(), angle_sort()); + + typedef geometry::closing_iterator closing_iterator; + closing_iterator vit(angles); + closing_iterator end(angles, true); + + closing_iterator prev = vit++; + for( ; vit != end; prev = vit++) + { + if (! geometry::math::equals(prev->angle, vit->angle) + && ! prev->incoming + && vit->incoming) + { + return false; + } + } + return true; + } + +public : + inline occupation_info() + : m_occupied(false) + , m_calculated(false) + {} + + template + inline void add(PointC const& map_point, Point1 const& direction_point, Point2 const& intersection_point, + int turn_index, int operation_index, + segment_identifier const& seg_id, bool incoming) + { + //std::cout << "-> adding angle " << geometry::wkt(direction_point) << " .. " << geometry::wkt(intersection_point) << " " << int(incoming) << std::endl; + if (geometry::equals(direction_point, intersection_point)) + { + //std::cout << "EQUAL! Skipping" << std::endl; + return; + } + + AngleInfo info; + info.incoming = incoming; + info.angle = calculate_angle(direction_point, map_point); + info.seg_id = seg_id; + info.turn_index = turn_index; + info.operation_index = operation_index; + info.intersection_point = intersection_point; + info.direction_point = direction_point; + angles.push_back(info); + + m_calculated = false; + } + + inline bool occupied() + { + if (! m_calculated) + { + m_occupied = is_occupied(); + m_calculated = true; + } + return m_occupied; + } + + template + inline void get_left_turns( + Turns& turns, TurnSegmentIndices const& turn_segment_indices, + std::set& keep_indices) + { + std::sort(angles.begin(), angles.end(), angle_sort()); + calculate_left_turns(angles, turns, turn_segment_indices, keep_indices); + } +}; + + +template +inline void add_incoming_and_outgoing_angles(Point const& map_point, Point const& intersection_point, + Ring const& ring, + int turn_index, + int operation_index, + segment_identifier seg_id, + Info& info) +{ + typedef typename boost::range_iterator + < + Ring const + >::type iterator_type; + + int const n = boost::size(ring); + if (seg_id.segment_index >= n || seg_id.segment_index < 0) + { + return; + } + + segment_identifier real_seg_id = seg_id; + iterator_type it = boost::begin(ring) + seg_id.segment_index; + + // TODO: if we use turn-info ("to", "middle"), we know if to advance without resorting to equals + relaxed_less comparator; + + if (comparator.equals(intersection_point, *it)) + { + // It should be equal only once. But otherwise we skip it (in "add") + it = advance_circular(it, ring, seg_id, false); + } + + info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, true); + + if (comparator.equals(intersection_point, *it)) + { + it = advance_circular(it, ring, real_seg_id); + } + else + { + // Don't upgrade the ID + it = advance_circular(it, ring, seg_id); + } + for (int defensive_check = 0; + comparator.equals(intersection_point, *it) && defensive_check < n; + defensive_check++) + { + it = advance_circular(it, ring, real_seg_id); + } + + info.add(map_point, *it, intersection_point, turn_index, operation_index, real_seg_id, false); +} + + +// Map in two senses of the word: it is a std::map where the key is a point. +// Per point an "occupation_info" record is kept +// Used for the buffer (but will also be used for intersections/unions having complex self-tangencies) +template +class occupation_map +{ +public : + typedef std::map > map_type; + + map_type map; + std::set turn_indices; + + inline OccupationInfo& find_or_insert(Point const& point, Point& mapped_point) + { + typename map_type::iterator it = map.find(point); + if (it == boost::end(map)) + { + std::pair pair + = map.insert(std::make_pair(point, OccupationInfo())); + it = pair.first; + } + mapped_point = it->first; + return it->second; + } + + inline bool contains(Point const& point) const + { + typename map_type::const_iterator it = map.find(point); + return it != boost::end(map); + } + + inline bool contains_turn_index(int index) const + { + return turn_indices.count(index) > 0; + } + + inline void insert_turn_index(int index) + { + turn_indices.insert(index); + } +}; + + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp index 12248393f5..74595fedd0 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -9,6 +9,8 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP +#include +#include #include #include @@ -73,6 +75,21 @@ inline OutputIterator add_rings(SelectionMap const& map, OutputIterator out) { typedef typename SelectionMap::const_iterator iterator; + typedef typename SelectionMap::mapped_type property_type; + typedef typename property_type::area_type area_type; + + area_type const zero = 0; + std::size_t const min_num_points = core_detail::closure::minimum_ring_size + < + geometry::closure + < + typename boost::range_value + < + RingCollection const + >::type + >::value + >::value; + for (iterator it = boost::begin(map); it != boost::end(map); @@ -99,7 +116,16 @@ inline OutputIterator add_rings(SelectionMap const& map, *child_it, mit->second.reversed, true); } } - *out++ = result; + + // Only add rings if they satisfy minimal requirements. + // This cannot be done earlier (during traversal), not + // everything is figured out yet (sum of positive/negative rings) + // TODO: individual rings can still contain less than 3 points. + if (geometry::num_points(result) >= min_num_points + && math::larger(geometry::area(result), zero)) + { + *out++ = result; + } } } return out; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp new file mode 100644 index 0000000000..2c0f88e2aa --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp @@ -0,0 +1,53 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP + + +#include + +#include +#include + + + +namespace boost { namespace geometry +{ + + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace overlay +{ + +template +inline void append_no_duplicates(Range& range, Point const& point, bool force = false) +{ + if (boost::size(range) == 0 + || force + || ! geometry::detail::equals::equals_point_point(*(boost::end(range)-1), point)) + { +#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION + std::cout << " add: (" + << geometry::get<0>(point) << ", " << geometry::get<1>(point) << ")" + << std::endl; +#endif + geometry::append(range, point); + } +} + + +}} // namespace detail::overlay +#endif // DOXYGEN_NO_DETAIL + + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp index 423e051f96..5063f49eb4 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include @@ -42,23 +42,22 @@ static inline bool within_selected_input(Item const& item2, ring_identifier cons typedef typename geometry::tag::type tag1; typedef typename geometry::tag::type tag2; - int code = -1; switch (ring_id.source_index) { case 0 : - code = point_in_ring(item2.point, + return geometry::within(item2.point, get_ring::apply(ring_id, geometry1)); break; case 1 : - code = point_in_ring(item2.point, + return geometry::within(item2.point, get_ring::apply(ring_id, geometry2)); break; case 2 : - code = point_in_ring(item2.point, + return geometry::within(item2.point, get_ring::apply(ring_id, collection)); break; } - return code == 1; + return false; } @@ -77,7 +76,7 @@ struct ring_info_helper {} inline ring_info_helper(ring_identifier i, area_type a) - : id(i), real_area(a), abs_area(abs(a)) + : id(i), real_area(a), abs_area(geometry::math::abs(a)) {} }; @@ -131,7 +130,7 @@ struct assign_visitor return; } - if (outer.real_area > 0) + if (math::larger(outer.real_area, 0)) { if (inner.real_area < 0 || m_check_for_orientation) { @@ -318,13 +317,14 @@ template > inline void assign_parents(Geometry const& geometry, RingCollection const& collection, - RingMap& ring_map) + RingMap& ring_map, + bool check_for_orientation) { // Call it with an empty geometry // (ring_map should be empty for source_id==1) Geometry empty; - assign_parents(geometry, empty, collection, ring_map, true); + assign_parents(geometry, empty, collection, ring_map, check_for_orientation); } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp new file mode 100644 index 0000000000..012b3aca30 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp @@ -0,0 +1,170 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP + +#include +#include + +#include + +#include +#include +#include +#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT) +# include +# include +#endif + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace overlay +{ + +template +inline void clear_visit_info(Turns& turns) +{ + typedef typename boost::range_value::type tp_type; + + for (typename boost::range_iterator::type + it = boost::begin(turns); + it != boost::end(turns); + ++it) + { + for (typename boost::range_iterator + < + typename tp_type::container_type + >::type op_it = boost::begin(it->operations); + op_it != boost::end(it->operations); + ++op_it) + { + op_it->visited.clear(); + } + it->discarded = false; + } +} + +struct backtrack_state +{ + bool m_good; + + inline backtrack_state() : m_good(true) {} + inline void reset() { m_good = true; } + inline bool good() const { return m_good; } +}; + + +template +< + typename Geometry1, + typename Geometry2 +> +class backtrack_check_self_intersections +{ + struct state : public backtrack_state + { + bool m_checked; + inline state() + : m_checked() + {} + }; +public : + typedef state state_type; + + template + static inline void apply(std::size_t size_at_start, + Rings& rings, typename boost::range_value::type& ring, + Turns& turns, Operation& operation, + std::string const& , + Geometry1 const& geometry1, + Geometry2 const& geometry2, + state_type& state + ) + { + state.m_good = false; + + // Check self-intersections and throw exception if appropriate + if (! state.m_checked) + { + state.m_checked = true; + has_self_intersections(geometry1); + has_self_intersections(geometry2); + } + + // Make bad output clean + rings.resize(size_at_start); + ring.clear(); + + // Reject this as a starting point + operation.visited.set_rejected(); + + // And clear all visit info + clear_visit_info(turns); + } +}; + +#ifdef BOOST_GEOMETRY_OVERLAY_REPORT_WKT +template +< + typename Geometry1, + typename Geometry2 +> +class backtrack_debug +{ +public : + typedef backtrack_state state_type; + + template + static inline void apply(std::size_t size_at_start, + Rings& rings, typename boost::range_value::type& ring, + Turns& turns, Operation& operation, + std::string const& reason, + Geometry1 const& geometry1, + Geometry2 const& geometry2, + state_type& state + ) + { + std::cout << " REJECT " << reason << std::endl; + + state.m_good = false; + + rings.resize(size_at_start); + ring.clear(); + operation.visited.set_rejected(); + clear_visit_info(turns); + + int c = 0; + for (int i = 0; i < turns.size(); i++) + { + for (int j = 0; j < 2; j++) + { + if (turns[i].operations[j].visited.rejected()) + { + c++; + } + } + } + std::cout << "BACKTRACK (" << reason << " )" + << " " << c << " of " << turns.size() << " rejected" + << std::endl; + std::cout + << geometry::wkt(geometry1) << std::endl + << geometry::wkt(geometry2) << std::endl; + } +}; +#endif // BOOST_GEOMETRY_OVERLAY_REPORT_WKT + +}} // namespace detail::overlay +#endif // DOXYGEN_NO_DETAIL + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp index a88060efb5..2003d2350d 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/calculate_distance_policy.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -10,7 +10,7 @@ #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CALCULATE_DISTANCE_POLICY_HPP -#include +#include namespace boost { namespace geometry @@ -30,13 +30,25 @@ namespace detail { namespace overlay */ struct calculate_distance_policy { - template - static inline void apply(Info& info, Point1 const& p1, Point2 const& p2) + static bool const include_no_turn = false; + static bool const include_degenerate = false; + static bool const include_opposite = false; + + template + < + typename Info, + typename Point1, + typename Point2, + typename IntersectionInfo, + typename DirInfo + > + static inline void apply(Info& info, Point1 const& p1, Point2 const& p2, + IntersectionInfo const&, DirInfo const&) { info.operations[0].enriched.distance - = geometry::distance(info.point, p1); + = geometry::comparable_distance(info.point, p1); info.operations[1].enriched.distance - = geometry::distance(info.point, p2); + = geometry::comparable_distance(info.point, p2); } }; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp index ddb3394c01..b210fd04b1 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp index 6e8a7f6c37..fc4f657322 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -11,10 +11,11 @@ #include -#include #include #include +#include + #include #include @@ -215,9 +216,9 @@ OutputIterator clip_range_with_box(Box const& b, Range const& range, // b. Add p1 only if it is the first point, then add p2 if (boost::empty(line_out)) { - geometry::append(line_out, p1); + detail::overlay::append_no_duplicates(line_out, p1, true); } - geometry::append(line_out, p2); + detail::overlay::append_no_duplicates(line_out, p2); // c. If c2 is clipped, finish the line if (c2) diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp index d81826f51e..05bd721e7f 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp index ead7862801..5e18d0453a 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -55,14 +55,14 @@ struct copy_segment_point_range if (second) { index++; - if (index >= boost::size(range)) + if (index >= int(boost::size(range))) { index = 0; } } // Exception? - if (index >= boost::size(range)) + if (index >= int(boost::size(range))) { return false; } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp index 36cc9f5fb6..805f3923e3 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -27,6 +27,7 @@ #include #include +#include namespace boost { namespace geometry { @@ -77,7 +78,7 @@ struct copy_segments_ring int const from_index = seg_id.segment_index + 1; // Sanity check - BOOST_ASSERT(from_index < boost::size(view)); + BOOST_ASSERT(from_index < int(boost::size(view))); ec_iterator it(boost::begin(view), boost::end(view), boost::begin(view) + from_index); @@ -88,20 +89,50 @@ struct copy_segments_ring typedef typename boost::range_difference::type size_type; size_type const count = from_index <= to_index ? to_index - from_index + 1 - : boost::size(view) - from_index + to_index + 1; + : int(boost::size(view)) - from_index + to_index + 1; for (size_type i = 0; i < count; ++i, ++it) { -#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION - std::cout << " add: (" - << geometry::get<0>(*it) << ", " << geometry::get<1>(*it) << ")" - << std::endl; -#endif - geometry::append(current_output, *it); + detail::overlay::append_no_duplicates(current_output, *it); } } }; +template +< + typename LineString, + bool Reverse, + typename SegmentIdentifier, + typename RangeOut +> +struct copy_segments_linestring +{ + + typedef typename boost::range_iterator::type iterator; + + static inline void apply(LineString const& ls, + SegmentIdentifier const& seg_id, int to_index, + RangeOut& current_output) + { + int const from_index = seg_id.segment_index + 1; + + // Sanity check + if (from_index > to_index || from_index < 0 || to_index >= int(boost::size(ls))) + { + return; + } + + typedef typename boost::range_difference::type size_type; + size_type const count = to_index - from_index + 1; + + typename boost::range_iterator::type it = boost::begin(ls) + from_index; + + for (size_type i = 0; i < count; ++i, ++it) + { + detail::overlay::append_no_duplicates(current_output, *it); + } + } +}; template < @@ -164,7 +195,8 @@ struct copy_segments_box // (see comments in ring-version) for (int i = 0; i < count; i++, index++) { - geometry::append(current_output, bp[index % 5]); + detail::overlay::append_no_duplicates(current_output, bp[index % 5]); + } } }; @@ -211,6 +243,21 @@ struct copy_segments {}; + +template +< + typename LineString, + bool Reverse, + typename SegmentIdentifier, + typename RangeOut +> +struct copy_segments + : detail::copy_segments::copy_segments_linestring + < + LineString, Reverse, SegmentIdentifier, RangeOut + > +{}; + template < typename Polygon, diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp index 9359c8f65b..0cc34255ca 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -28,6 +28,7 @@ inline char method_char(detail::overlay::method_type const& method) case method_touch_interior : return 'm'; case method_collinear : return 'c'; case method_equal : return 'e'; + case method_error : return '!'; default : return '?'; } } @@ -42,6 +43,7 @@ inline char operation_char(detail::overlay::operation_type const& operation) case operation_intersection : return 'i'; case operation_blocked : return 'x'; case operation_continue : return 'c'; + case operation_opposite : return 'o'; default : return '?'; } } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp index 5a13b52404..e4842d35f1 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -9,7 +9,6 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP - #include #include #include @@ -19,26 +18,21 @@ #ifdef BOOST_GEOMETRY_DEBUG_ENRICH # include # include -# include +# include # define BOOST_GEOMETRY_DEBUG_IDENTIFIER #endif #include #include - - #include #include #include - #include - #ifdef BOOST_GEOMETRY_DEBUG_ENRICH # include #endif - namespace boost { namespace geometry { @@ -300,9 +294,9 @@ template > inline void enrich_assign(Container& operations, TurnPoints& turn_points, - operation_type for_operation, - Geometry1 const& geometry1, Geometry2 const& geometry2, - Strategy const& strategy) + operation_type , + Geometry1 const& , Geometry2 const& , + Strategy const& ) { typedef typename IndexType::type operations_type; typedef typename boost::range_iterator::type iterator_type; @@ -524,8 +518,6 @@ inline void enrich_intersection_points(TurnPoints& turn_points, } - }} // namespace boost::geometry - #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp index 132b2dbf19..8c8ed96189 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -10,7 +10,7 @@ #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP -#include +#include namespace boost { namespace geometry @@ -23,15 +23,25 @@ namespace detail { namespace overlay /*! - \brief Keeps info to enrich intersection info (per source) - \details Class to keep information necessary for traversal phase (a phase - of the overlay process). The information is gathered during the - enrichment phase +\brief Keeps info to enrich intersection info (per source) +\details Class to keep information necessary for traversal phase (a phase + of the overlay process). The information is gathered during the + enrichment phase */ template struct enrichment_info { - typedef typename default_distance_result::type distance_type; + typedef typename strategy::distance::services::return_type + < + typename strategy::distance::services::comparable_type + < + typename strategy::distance::services::default_strategy + < + point_tag, + P + >::type + >::type + >::type distance_type; inline enrichment_info() : travels_to_vertex_index(-1) diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp new file mode 100644 index 0000000000..b110cc9602 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/follow.hpp @@ -0,0 +1,416 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP + +#include + +#include +#include + +#include +#include +#include +#include + +#include + + +namespace boost { namespace geometry +{ + + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace overlay +{ + +namespace following +{ + +template +static inline bool is_entering(Turn const& /* TODO remove this parameter */, Operation const& op) +{ + // (Blocked means: blocked for polygon/polygon intersection, because + // they are reversed. But for polygon/line it is similar to continue) + return op.operation == operation_intersection + || op.operation == operation_continue + || op.operation == operation_blocked + ; +} + +template +< + typename Turn, + typename Operation, + typename LineString, + typename Polygon +> +static inline bool last_covered_by(Turn const& turn, Operation const& op, + LineString const& linestring, Polygon const& polygon) +{ + // Check any point between the this one and the first IP + typedef typename geometry::point_type::type point_type; + point_type point_in_between; + detail::point_on_border::midpoint_helper + < + point_type, + 0, dimension::value + >::apply(point_in_between, linestring[op.seg_id.segment_index], turn.point); + + return geometry::covered_by(point_in_between, polygon); +} + + +template +< + typename Turn, + typename Operation, + typename LineString, + typename Polygon +> +static inline bool is_leaving(Turn const& turn, Operation const& op, + bool entered, bool first, + LineString const& linestring, Polygon const& polygon) +{ + if (op.operation == operation_union) + { + return entered + || turn.method == method_crosses + || (first && last_covered_by(turn, op, linestring, polygon)) + ; + } + return false; +} + + +template +< + typename Turn, + typename Operation, + typename LineString, + typename Polygon +> +static inline bool is_staying_inside(Turn const& turn, Operation const& op, + bool entered, bool first, + LineString const& linestring, Polygon const& polygon) +{ + if (turn.method == method_crosses) + { + // The normal case, this is completely covered with entering/leaving + // so stay out of this time consuming "covered_by" + return false; + } + + if (is_entering(turn, op)) + { + return entered || (first && last_covered_by(turn, op, linestring, polygon)); + } + + return false; +} + +template +< + typename Turn, + typename Operation, + typename Linestring, + typename Polygon +> +static inline bool was_entered(Turn const& turn, Operation const& op, bool first, + Linestring const& linestring, Polygon const& polygon) +{ + if (first && (turn.method == method_collinear || turn.method == method_equal)) + { + return last_covered_by(turn, op, linestring, polygon); + } + return false; +} + + +// Template specialization structure to call the right actions for the right type +template +struct action_selector +{ + // If you get here the overlay type is not intersection or difference + // BOOST_MPL_ASSERT(false); +}; + +// Specialization for intersection, containing the implementation +template<> +struct action_selector +{ + template + < + typename OutputIterator, + typename LineStringOut, + typename LineString, + typename Point, + typename Operation + > + static inline void enter(LineStringOut& current_piece, + LineString const& , + segment_identifier& segment_id, + int , Point const& point, + Operation const& operation, OutputIterator& ) + { + // On enter, append the intersection point and remember starting point + detail::overlay::append_no_duplicates(current_piece, point); + segment_id = operation.seg_id; + } + + template + < + typename OutputIterator, + typename LineStringOut, + typename LineString, + typename Point, + typename Operation + > + static inline void leave(LineStringOut& current_piece, + LineString const& linestring, + segment_identifier& segment_id, + int index, Point const& point, + Operation const& , OutputIterator& out) + { + // On leave, copy all segments from starting point, append the intersection point + // and add the output piece + geometry::copy_segments(linestring, segment_id, index, current_piece); + detail::overlay::append_no_duplicates(current_piece, point); + if (current_piece.size() > 1) + { + *out++ = current_piece; + } + current_piece.clear(); + } + + static inline bool is_entered(bool entered) + { + return entered; + } + + template + static inline bool included(Point const& point, Geometry const& geometry) + { + return geometry::covered_by(point, geometry); + } + +}; + +// Specialization for difference, which reverses these actions +template<> +struct action_selector +{ + typedef action_selector normal_action; + + template + < + typename OutputIterator, + typename LineStringOut, + typename LineString, + typename Point, + typename Operation + > + static inline void enter(LineStringOut& current_piece, + LineString const& linestring, + segment_identifier& segment_id, + int index, Point const& point, + Operation const& operation, OutputIterator& out) + { + normal_action::leave(current_piece, linestring, segment_id, index, + point, operation, out); + } + + template + < + typename OutputIterator, + typename LineStringOut, + typename LineString, + typename Point, + typename Operation + > + static inline void leave(LineStringOut& current_piece, + LineString const& linestring, + segment_identifier& segment_id, + int index, Point const& point, + Operation const& operation, OutputIterator& out) + { + normal_action::enter(current_piece, linestring, segment_id, index, + point, operation, out); + } + + static inline bool is_entered(bool entered) + { + return ! normal_action::is_entered(entered); + } + + template + static inline bool included(Point const& point, Geometry const& geometry) + { + return ! normal_action::included(point, geometry); + } + +}; + +} + +/*! +\brief Follows a linestring from intersection point to intersection point, outputting which + is inside, or outside, a ring or polygon +\ingroup overlay + */ +template +< + typename LineStringOut, + typename LineString, + typename Polygon, + overlay_type OverlayType +> +class follow +{ + + template + struct sort_on_segment + { + // In case of turn point at the same location, we want to have continue/blocked LAST + // because that should be followed (intersection) or skipped (difference). + inline int operation_order(Turn const& turn) const + { + operation_type const& operation = turn.operations[0].operation; + switch(operation) + { + case operation_opposite : return 0; + case operation_none : return 0; + case operation_union : return 1; + case operation_intersection : return 2; + case operation_blocked : return 3; + case operation_continue : return 4; + } + return -1; + }; + + inline bool use_operation(Turn const& left, Turn const& right) const + { + // If they are the same, OK. + return operation_order(left) < operation_order(right); + } + + inline bool use_distance(Turn const& left, Turn const& right) const + { + return geometry::math::equals(left.operations[0].enriched.distance, right.operations[0].enriched.distance) + ? use_operation(left, right) + : left.operations[0].enriched.distance < right.operations[0].enriched.distance + ; + } + + inline bool operator()(Turn const& left, Turn const& right) const + { + segment_identifier const& sl = left.operations[0].seg_id; + segment_identifier const& sr = right.operations[0].seg_id; + + return sl == sr + ? use_distance(left, right) + : sl < sr + ; + + } + }; + + + +public : + + template + static inline bool included(Point const& point, Geometry const& geometry) + { + return following::action_selector::included(point, geometry); + } + + template + static inline OutputIterator apply(LineString const& linestring, Polygon const& polygon, + detail::overlay::operation_type , // TODO: this parameter might be redundant + Turns& turns, OutputIterator out) + { + typedef typename boost::range_iterator::type turn_iterator; + typedef typename boost::range_value::type turn_type; + typedef typename boost::range_iterator + < + typename turn_type::container_type + >::type turn_operation_iterator_type; + + typedef following::action_selector action; + + // Sort intersection points on segments-along-linestring, and distance + // (like in enrich is done for poly/poly) + std::sort(boost::begin(turns), boost::end(turns), sort_on_segment()); + + LineStringOut current_piece; + geometry::segment_identifier current_segment_id(0, -1, -1, -1); + + // Iterate through all intersection points (they are ordered along the line) + bool entered = false; + bool first = true; + for (turn_iterator it = boost::begin(turns); it != boost::end(turns); ++it) + { + turn_operation_iterator_type iit = boost::begin(it->operations); + + if (following::was_entered(*it, *iit, first, linestring, polygon)) + { + debug_traverse(*it, *iit, "-> Was entered"); + entered = true; + } + + if (following::is_staying_inside(*it, *iit, entered, first, linestring, polygon)) + { + debug_traverse(*it, *iit, "-> Staying inside"); + + entered = true; + } + else if (following::is_entering(*it, *iit)) + { + debug_traverse(*it, *iit, "-> Entering"); + + entered = true; + action::enter(current_piece, linestring, current_segment_id, iit->seg_id.segment_index, it->point, *iit, out); + } + else if (following::is_leaving(*it, *iit, entered, first, linestring, polygon)) + { + debug_traverse(*it, *iit, "-> Leaving"); + + entered = false; + action::leave(current_piece, linestring, current_segment_id, iit->seg_id.segment_index, it->point, *iit, out); + } + first = false; + } + + if (action::is_entered(entered)) + { + geometry::copy_segments(linestring, current_segment_id, + boost::size(linestring) - 1, + current_piece); + } + + // Output the last one, if applicable + if (current_piece.size() > 1) + { + *out++ = current_piece; + } + return out; + } + +}; + + +}} // namespace detail::overlay +#endif // DOXYGEN_NO_DETAIL + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp index a752773ab2..019c3ba3f9 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -51,7 +51,7 @@ struct get_turn_without_info static inline OutputIterator apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, Point2 const& qi, Point2 const& qj, Point2 const& qk, - TurnInfo const& tp_model, + TurnInfo const& , OutputIterator out) { typedef model::referring_segment segment_type1; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp index 60744dbe14..522ef68382 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp index 346a927d52..c2c6980577 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -83,7 +83,7 @@ struct get_ring BOOST_ASSERT ( id.ring_index >= -1 - && id.ring_index < boost::size(interior_rings(polygon)) + && id.ring_index < int(boost::size(interior_rings(polygon))) ); return id.ring_index < 0 ? exterior_ring(polygon) diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp index 93bf368bc5..b8320d9b7b 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -23,6 +23,28 @@ namespace boost { namespace geometry { +#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) +class turn_info_exception : public geometry::exception +{ + std::string message; +public: + + // NOTE: "char" will be replaced by enum in future version + inline turn_info_exception(char const method) + { + message = "Boost.Geometry Turn exception: "; + message += method; + } + + virtual ~turn_info_exception() throw() + {} + + virtual char const* what() const throw() + { + return message.c_str(); + } +}; +#endif #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay @@ -89,7 +111,7 @@ struct touch_interior : public base_turn_handler typename DirInfo > static inline void apply( - Point1 const& pi, Point1 const& pj, Point1 const& pk, + Point1 const& pi, Point1 const& pj, Point1 const& , Point2 const& qi, Point2 const& qj, Point2 const& qk, TurnInfo& ti, IntersectionInfo const& intersection_info, @@ -228,9 +250,15 @@ struct touch : public base_turn_handler int const side_pk_q2 = SideStrategy::apply(qj, qk, pk); int const side_pk_p = SideStrategy::apply(pi, pj, pk); int const side_qk_q = SideStrategy::apply(qi, qj, qk); + + bool const both_continue = side_pk_p == 0 && side_qk_q == 0; + bool const robustness_issue_in_continue = both_continue && side_pk_q2 != 0; + bool const q_turns_left = side_qk_q == 1; bool const block_q = side_qk_p1 == 0 - && ! same(side_qi_p1, side_qk_q); + && ! same(side_qi_p1, side_qk_q) + && ! robustness_issue_in_continue + ; // If Pk at same side as Qi/Qk // (the "or" is for collinear case) @@ -256,7 +284,7 @@ struct touch : public base_turn_handler if (side_pk_q1 == 0) { ti.operations[0].operation = operation_blocked; - // Q turns right -> union (both independant), + // Q turns right -> union (both independent), // Q turns left -> intersection ti.operations[1].operation = block_q ? operation_blocked : q_turns_left ? operation_intersection @@ -399,10 +427,10 @@ struct equal : public base_turn_handler > static inline void apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, - Point2 const& qi, Point2 const& qj, Point2 const& qk, + Point2 const& , Point2 const& qj, Point2 const& qk, TurnInfo& ti, IntersectionInfo const& intersection_info, - DirInfo const& dir_info) + DirInfo const& ) { ti.method = method_equal; // Copy the SECOND intersection point @@ -441,6 +469,45 @@ struct equal : public base_turn_handler }; +template +< + typename TurnInfo, + typename AssignPolicy +> +struct equal_opposite : public base_turn_handler +{ + template + < + typename Point1, + typename Point2, + typename OutputIterator, + typename IntersectionInfo, + typename DirInfo + > + static inline void apply(Point1 const& pi, Point2 const& qi, + /* by value: */ TurnInfo tp, + OutputIterator& out, + IntersectionInfo const& intersection_info, + DirInfo const& dir_info) + { + // For equal-opposite segments, normally don't do anything. + if (AssignPolicy::include_opposite) + { + tp.method = method_equal; + for (int i = 0; i < 2; i++) + { + tp.operations[i].operation = operation_opposite; + } + for (unsigned int i = 0; i < intersection_info.count; i++) + { + geometry::convert(intersection_info.intersections[i], tp.point); + AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); + *out++ = tp; + } + } + } +}; + template < typename TurnInfo, @@ -472,6 +539,13 @@ struct collinear : public base_turn_handler - if P arrives and P turns right: intersection for P - if Q arrives and Q turns left: union for Q (=intersection for P) - if Q arrives and Q turns right: intersection for Q (=union for P) + + ROBUSTNESS: p and q are collinear, so you would expect + that side qk//p1 == pk//q1. But that is not always the case + in near-epsilon ranges. Then decision logic is different. + If p arrives, q is further, so the angle qk//p1 is (normally) + more precise than pk//p1 + */ template < @@ -494,12 +568,18 @@ struct collinear : public base_turn_handler // Should not be 0, this is checked before BOOST_ASSERT(arrival != 0); + int const side_p = SideStrategy::apply(pi, pj, pk); + int const side_q = SideStrategy::apply(qi, qj, qk); + // If p arrives, use p, else use q int const side_p_or_q = arrival == 1 - ? SideStrategy::apply(pi, pj, pk) - : SideStrategy::apply(qi, qj, qk) + ? side_p + : side_q ; + int const side_pk = SideStrategy::apply(qi, qj, pk); + int const side_qk = SideStrategy::apply(pi, pj, qk); + // See comments above, // resulting in a strange sort of mathematic rule here: // The arrival-info multiplied by the relevant side @@ -507,7 +587,15 @@ struct collinear : public base_turn_handler int const product = arrival * side_p_or_q; - if(product == 0) + // Robustness: side_p is supposed to be equal to side_pk (because p/q are collinear) + // and side_q to side_qk + bool const robustness_issue = side_pk != side_p || side_qk != side_q; + + if (robustness_issue) + { + handle_robustness(ti, arrival, side_p, side_q, side_pk, side_qk); + } + else if(product == 0) { both(ti, operation_continue); } @@ -516,6 +604,38 @@ struct collinear : public base_turn_handler ui_else_iu(product == 1, ti); } } + + static inline void handle_robustness(TurnInfo& ti, int arrival, + int side_p, int side_q, int side_pk, int side_qk) + { + // We take the longer one, i.e. if q arrives in p (arrival == -1), + // then p exceeds q and we should take p for a union... + + bool use_p_for_union = arrival == -1; + + // ... unless one of the sides consistently directs to the other side + int const consistent_side_p = side_p == side_pk ? side_p : 0; + int const consistent_side_q = side_q == side_qk ? side_q : 0; + if (arrival == -1 && (consistent_side_p == -1 || consistent_side_q == 1)) + { + use_p_for_union = false; + } + if (arrival == 1 && (consistent_side_p == 1 || consistent_side_q == -1)) + { + use_p_for_union = true; + } + + //std::cout << "ROBUSTNESS -> Collinear " + // << " arr: " << arrival + // << " dir: " << side_p << " " << side_q + // << " rev: " << side_pk << " " << side_qk + // << " cst: " << cside_p << " " << cside_q + // << std::boolalpha << " " << use_p_for_union + // << std::endl; + + ui_else_iu(use_p_for_union, ti); + } + }; template @@ -561,6 +681,7 @@ private : TurnInfo& tp, IntersectionInfo const& intersection_info) { int const side_rk_r = SideStrategy::apply(ri, rj, rk); + operation_type blocked = operation_blocked; switch(side_rk_r) { @@ -574,15 +695,24 @@ private : break; case 0 : // No turn on opposite collinear: block, do not traverse - // But this "xx" is ignored here, it is useless to include - // two operation blocked, so the whole point does not need + // But this "xx" is usually ignored, it is useless to include + // two operations blocked, so the whole point does not need // to be generated. // So return false to indicate nothing is to be done. - return false; + if (AssignPolicy::include_opposite) + { + tp.operations[Index].operation = operation_opposite; + blocked = operation_opposite; + } + else + { + return false; + } + break; } // The other direction is always blocked when collinear opposite - tp.operations[1 - Index].operation = operation_blocked; + tp.operations[1 - Index].operation = blocked; // If P arrives within Q, set info on P (which is done above, index=0), // this turn-info belongs to the second intersection point, index=1 @@ -611,32 +741,45 @@ public: IntersectionInfo const& intersection_info, DirInfo const& dir_info) { - /* - std::cout << "arrivals: " - << dir_info.arrival[0] - << "/" << dir_info.arrival[1] - << std::endl; - */ - TurnInfo tp = tp_model; tp.method = method_collinear; - // If P arrives within Q, there is a turn dependant on P + // If P arrives within Q, there is a turn dependent on P if (dir_info.arrival[0] == 1 && set_tp<0>(pi, pj, pk, tp, intersection_info)) { - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); *out++ = tp; } - // If Q arrives within P, there is a turn dependant on Q + // If Q arrives within P, there is a turn dependent on Q if (dir_info.arrival[1] == 1 && set_tp<1>(qi, qj, qk, tp, intersection_info)) { - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); *out++ = tp; } + + if (AssignPolicy::include_opposite) + { + // Handle cases not yet handled above + if ((dir_info.arrival[1] == -1 && dir_info.arrival[0] == 0) + || (dir_info.arrival[0] == -1 && dir_info.arrival[1] == 0)) + { + for (int i = 0; i < 2; i++) + { + tp.operations[i].operation = operation_opposite; + } + for (unsigned int i = 0; i < intersection_info.count; i++) + { + geometry::convert(intersection_info.intersections[i], tp.point); + AssignPolicy::apply(tp, pi, qi, intersection_info, dir_info); + *out++ = tp; + } + } + } + } }; @@ -656,8 +799,8 @@ struct crosses : public base_turn_handler typename DirInfo > static inline void apply( - Point1 const& pi, Point1 const& pj, Point1 const& pk, - Point2 const& qi, Point2 const& qj, Point2 const& qk, + Point1 const& , Point1 const& , Point1 const& , + Point2 const& , Point2 const& , Point2 const& , TurnInfo& ti, IntersectionInfo const& intersection_info, DirInfo const& dir_info) @@ -677,6 +820,18 @@ struct crosses : public base_turn_handler } }; +template +struct only_convert +{ + template + static inline void apply(TurnInfo& ti, IntersectionInfo const& intersection_info) + { + ti.method = method_collinear; + geometry::convert(intersection_info.intersections[0], ti.point); + ti.operations[0].operation = operation_continue; + ti.operations[1].operation = operation_continue; + } +}; /*! \brief Policy doing nothing @@ -686,8 +841,19 @@ struct crosses : public base_turn_handler */ struct assign_null_policy { - template - static inline void apply(Info& info, Point1 const& p1, Point2 const& p2) + static bool const include_no_turn = false; + static bool const include_degenerate = false; + static bool const include_opposite = false; + + template + < + typename Info, + typename Point1, + typename Point2, + typename IntersectionInfo, + typename DirInfo + > + static inline void apply(Info& , Point1 const& , Point2 const&, IntersectionInfo const&, DirInfo const&) {} }; @@ -703,14 +869,16 @@ struct assign_null_policy \tparam TurnInfo type of class getting intersection and turn info \tparam AssignPolicy policy to assign extra info, e.g. to calculate distance from segment's first points - to intersection points + to intersection points. + It also defines if a certain class of points + (degenerate, non-turns) should be included. */ template < typename Point1, typename Point2, typename TurnInfo, - typename AssignPolicy = assign_null_policy + typename AssignPolicy > struct get_turn_info { @@ -724,8 +892,9 @@ struct get_turn_info typedef typename si::segment_intersection_strategy_type strategy; - - + // Intersect pi-pj with qi-qj + // The points pk and qk are only used do determine more information + // about the turn. template static inline OutputIterator apply( Point1 const& pi, Point1 const& pj, Point1 const& pk, @@ -749,10 +918,20 @@ struct get_turn_info // Select method and apply switch(method) { - case 'a' : - case 'f' : - case 's' : - case 'd' : + case 'a' : // collinear, "at" + case 'f' : // collinear, "from" + case 's' : // starts from the middle + if (AssignPolicy::include_no_turn + && result.template get<0>().count > 0) + { + only_convert::apply(tp, + result.template get<0>()); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); + *out++ = tp; + } + break; + + case 'd' : // disjoint: never do anything break; case 'm' : @@ -775,7 +954,7 @@ struct get_turn_info policy::template apply<1>(qi, qj, qk, pi, pj, pk, tp, result.template get<0>(), result.template get<1>()); } - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; @@ -789,7 +968,7 @@ struct get_turn_info policy::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; @@ -804,7 +983,7 @@ struct get_turn_info policy::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } break; @@ -822,10 +1001,18 @@ struct get_turn_info policy::apply(pi, pj, pk, qi, qj, qk, tp, result.template get<0>(), result.template get<1>()); - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } - // If they ARE opposite, don't do anything. + else + { + equal_opposite + < + TurnInfo, + AssignPolicy + >::apply(pi, qi, + tp, out, result.template get<0>(), result.template get<1>()); + } } break; case 'c' : @@ -857,7 +1044,7 @@ struct get_turn_info tp, result.template get<0>(), result.template get<1>()); } - AssignPolicy::apply(tp, pi, qi); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); *out++ = tp; } else @@ -873,13 +1060,23 @@ struct get_turn_info } break; case '0' : - // degenerate points - break; + { + // degenerate points + if (AssignPolicy::include_degenerate) + { + only_convert::apply(tp, result.template get<0>()); + AssignPolicy::apply(tp, pi, qi, result.template get<0>(), result.template get<1>()); + *out++ = tp; + } + } + break; default : -#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS - std::cout << "get_turns, nyi: " << method << std::endl; + { +#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) + throw turn_info_exception(method); #endif - break; + } + break; } return out; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp index 6b7fbe19d1..26629043cb 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -58,7 +58,7 @@ #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION # include -# include +# include #endif @@ -127,12 +127,38 @@ class get_turns_in_sections >::type range2_iterator; + template + static inline bool neighbouring(Section const& section, + int index1, int index2) + { + // About n-2: + // (square: range_count=5, indices 0,1,2,3 + // -> 0-3 are adjacent, don't check on intersections) + // Also tested for open polygons, and/or duplicates + // About first condition: will be optimized by compiler (static) + // It checks if it is areal (box,ring,(multi)polygon + int const n = int(section.range_count); + return boost::is_same + < + typename tag_cast + < + typename geometry::point_type::type, + areal_tag + >::type, + areal_tag + >::value + && index1 == 0 + && index2 >= n - 2 + ; + } + public : // Returns true if terminated, false if interrupted static inline bool apply( int source_id1, Geometry1 const& geometry1, Section1 const& sec1, int source_id2, Geometry2 const& geometry2, Section2 const& sec2, + bool skip_larger, Turns& turns, InterruptPolicy& interrupt_policy) { @@ -196,7 +222,7 @@ public : if (skip) { // If sources are the same (possibly self-intersecting): - // skip if it is a neighbouring sement. + // skip if it is a neighbouring segment. // (including first-last segment // and two segments with one or more degenerate/duplicate // (zero-length) segments in between) @@ -204,12 +230,9 @@ public : // Also skip if index1 < index2 to avoid getting all // intersections twice (only do this on same source!) - // About n-2: - // (square: range_count=5, indices 0,1,2,3 - // -> 0-3 are adjacent) - skip = index2 >= index1 - || ndi1 == ndi2 + 1 - || (index2 == 0 && index1 >= int(sec1.range_count) - 2) + skip = (skip_larger && index1 >= index2) + || ndi2 == ndi1 + 1 + || neighbouring(sec1, index1, index2) ; } @@ -383,6 +406,7 @@ struct section_visitor >::apply( m_source_id1, m_geometry1, sec1, m_source_id2, m_geometry2, sec2, + false, m_turns, m_interrupt_policy); } return true; @@ -471,7 +495,7 @@ struct get_turns_cs int source_id1, Range const& range, int source_id2, Box const& box, Turns& turns, - InterruptPolicy& , + InterruptPolicy& interrupt_policy, int multi_index = -1, int ring_index = -1) { if (boost::size(range) <= 1) @@ -492,9 +516,9 @@ struct get_turns_cs next++; next++; - bool first = true; + //bool first = true; - char previous_side[2] = {0, 0}; + //char previous_side[2] = {0, 0}; int index = 0; @@ -505,7 +529,7 @@ struct get_turns_cs segment_identifier seg_id(source_id1, multi_index, ring_index, index); - if (first) + /*if (first) { previous_side[0] = get_side<0>(box, *prev); previous_side[1] = get_side<1>(box, *prev); @@ -519,7 +543,7 @@ struct get_turns_cs // 1) EITHER the two points are lying on one side of the box (! 0 && the same) // 2) OR same in Y-direction // 3) OR all points are inside the box (0) - /*if (! ( + if (! ( (current_side[0] != 0 && current_side[0] == previous_side[0]) || (current_side[1] != 0 && current_side[1] == previous_side[1]) || (current_side[0] == 0 @@ -533,7 +557,7 @@ struct get_turns_cs get_turns_with_box(seg_id, source_id2, *prev, *it, *next, bp[0], bp[1], bp[2], bp[3], - turns); + turns, interrupt_policy); // Future performance enhancement: // return if told by the interrupt policy } @@ -572,7 +596,8 @@ private: box_point_type const& bp2, box_point_type const& bp3, // Output - Turns& turns) + Turns& turns, + InterruptPolicy& interrupt_policy) { // Depending on code some relations can be left out @@ -598,6 +623,12 @@ private: ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 3); TurnPolicy::apply(rp0, rp1, rp2, bp3, bp0, bp1, ti, std::back_inserter(turns)); + + if (InterruptPolicy::enabled) + { + interrupt_policy.apply(turns); + } + } }; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp index c69da9b35d..1e878ca525 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/handle_tangencies.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -93,6 +93,7 @@ private : } +#ifdef BOOST_GEOMETRY_DEBUG_ENRICH inline void debug_consider(int order, Indexed const& left, Indexed const& right, std::string const& header, bool skip = true, @@ -101,8 +102,6 @@ private : { if (skip) return; - -#ifdef BOOST_GEOMETRY_DEBUG_ENRICH point_type pi, pj, ri, rj, si, sj; geometry::copy_segment_points(m_geometry1, m_geometry2, left.subject.seg_id, @@ -151,14 +150,21 @@ private : std::cout << " " << extra << " " << (ret ? "true" : "false"); } std::cout << std::endl; -#endif } +#else + inline void debug_consider(int, Indexed const& , + Indexed const& , std::string const& , + bool = true, + std::string const& = "", bool = false + ) const + {} +#endif // ux/ux inline bool consider_ux_ux(Indexed const& left, Indexed const& right - , std::string const& header + , std::string const& // header ) const { bool ret = left.index < right.index; @@ -190,7 +196,7 @@ private : inline bool consider_iu_ux(Indexed const& left, Indexed const& right, int order // 1: iu first, -1: ux first - , std::string const& header + , std::string const& // header ) const { bool ret = false; @@ -234,7 +240,7 @@ private : inline bool consider_iu_ix(Indexed const& left, Indexed const& right, int order // 1: iu first, -1: ix first - , std::string const& header + , std::string const& // header ) const { //debug_consider(order, left, right, header, false, "iu/ix"); @@ -507,9 +513,9 @@ template > inline void inspect_cluster(Iterator begin_cluster, Iterator end_cluster, TurnPoints& turn_points, - operation_type for_operation, - Geometry1 const& geometry1, Geometry2 const& geometry2, - Strategy const& strategy) + operation_type , + Geometry1 const& , Geometry2 const& , + Strategy const& ) { int count = 0; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp index be5efb371f..8bca790d74 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -22,12 +22,17 @@ #include #include #include +#include #include #include #include #include +#include #include +#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW) +#include +#endif namespace boost { namespace geometry { @@ -46,7 +51,7 @@ struct intersection_segment_segment_point { static inline OutputIterator apply(Segment1 const& segment1, Segment2 const& segment2, OutputIterator out, - Strategy const& strategy) + Strategy const& ) { typedef typename point_type::type point_type; @@ -82,7 +87,7 @@ struct intersection_linestring_linestring_point { static inline OutputIterator apply(Linestring1 const& linestring1, Linestring2 const& linestring2, OutputIterator out, - Strategy const& strategy) + Strategy const& ) { typedef typename point_type::type point_type; @@ -102,6 +107,108 @@ struct intersection_linestring_linestring_point } }; +/*! +\brief Version of linestring with an areal feature (polygon or multipolygon) +*/ +template +< + typename LineString, typename Areal, + bool ReverseAreal, + typename OutputIterator, typename LineStringOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_of_linestring_with_areal +{ + typedef detail::overlay::follow + < + LineStringOut, + LineString, + Areal, + OverlayType + > follower; + +#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW) + template + static inline void debug_follow(Turn const& turn, Operation op, + int index) + { + std::cout << index + << " at " << op.seg_id + << " meth: " << method_char(turn.method) + << " op: " << operation_char(op.operation) + << " vis: " << visited_char(op.visited) + << " of: " << operation_char(turn.operations[0].operation) + << operation_char(turn.operations[1].operation) + << " " << geometry::wkt(turn.point) + << std::endl; + } +#endif + + static inline OutputIterator apply(LineString const& linestring, Areal const& areal, + OutputIterator out, + Strategy const& ) + { + if (boost::size(linestring) == 0) + { + return out; + } + + typedef typename point_type::type point_type; + + typedef detail::overlay::traversal_turn_info turn_info; + std::deque turns; + + detail::get_turns::no_interrupt_policy policy; + geometry::get_turns + < + false, + (OverlayType == overlay_intersection ? ReverseAreal : !ReverseAreal), + detail::overlay::calculate_distance_policy + >(linestring, areal, turns, policy); + + if (turns.empty()) + { + // No intersection points, it is either completely + // inside (interior + borders) + // or completely outside + + // Use border point (on a segment) to check this + // (because turn points might skip some cases) + point_type border_point; + if (! geometry::point_on_border(border_point, linestring, true)) + { + return out; + } + + + if (follower::included(border_point, areal)) + { + LineStringOut copy; + geometry::convert(linestring, copy); + *out++ = copy; + } + return out; + } + +#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW) + int index = 0; + BOOST_FOREACH(turn_info const& turn, turns) + { + debug_follow(turn, turn.operations[0], index++); + } +#endif + + return follower::apply + ( + linestring, areal, + geometry::detail::overlay::operation_intersection, + turns, out + ); + } +}; + + }} // namespace detail::intersection #endif // DOXYGEN_NO_DETAIL @@ -255,7 +362,7 @@ struct intersection_insert > { static inline OutputIterator apply(Linestring const& linestring, - Box const& box, OutputIterator out, Strategy const& strategy) + Box const& box, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; @@ -264,6 +371,62 @@ struct intersection_insert } }; + +template +< + typename Linestring, typename Polygon, + bool ReverseLinestring, bool ReversePolygon, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + linestring_tag, polygon_tag, linestring_tag, + false, true, false, + Linestring, Polygon, + ReverseLinestring, ReversePolygon, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_linestring_with_areal + < + Linestring, Polygon, + ReversePolygon, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + + +template +< + typename Linestring, typename Ring, + bool ReverseLinestring, bool ReverseRing, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + linestring_tag, ring_tag, linestring_tag, + false, true, false, + Linestring, Ring, + ReverseLinestring, ReverseRing, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_linestring_with_areal + < + Linestring, Ring, + ReverseRing, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + template < typename Segment, typename Box, @@ -284,7 +447,7 @@ struct intersection_insert > { static inline OutputIterator apply(Segment const& segment, - Box const& box, OutputIterator out, Strategy const& strategy) + Box const& box, OutputIterator out, Strategy const& ) { geometry::segment_view range(segment); @@ -295,6 +458,49 @@ struct intersection_insert } }; +template +< + typename Tag1, typename Tag2, + bool Areal1, bool Areal2, + typename Geometry1, typename Geometry2, + bool Reverse1, bool Reverse2, bool ReverseOut, + typename OutputIterator, typename PointOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + Tag1, Tag2, point_tag, + Areal1, Areal2, false, + Geometry1, Geometry2, + Reverse1, Reverse2, ReverseOut, + OutputIterator, PointOut, + OverlayType, + Strategy + > +{ + static inline OutputIterator apply(Geometry1 const& geometry1, + Geometry2 const& geometry2, OutputIterator out, Strategy const& ) + { + + typedef detail::overlay::turn_info turn_info; + std::vector turns; + + detail::get_turns::no_interrupt_policy policy; + geometry::get_turns + < + false, false, detail::overlay::assign_null_policy + >(geometry1, geometry2, turns, policy); + for (typename std::vector::const_iterator it + = turns.begin(); it != turns.end(); ++it) + { + *out++ = it->point; + } + + return out; + } +}; + template < diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp index e9233f7645..41665e0af1 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -9,6 +9,7 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP + #include #include @@ -25,8 +26,6 @@ #include #include -#include - #include #include @@ -38,7 +37,7 @@ #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE -# include +# include #endif @@ -124,7 +123,7 @@ inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1, std::map empty; std::map all_of_one_of_them; - select_rings(geometry1, geometry2, empty, all_of_one_of_them); + select_rings(geometry1, geometry2, empty, all_of_one_of_them, false); ring_container_type rings; assign_parents(geometry1, geometry2, rings, all_of_one_of_them); return add_rings(all_of_one_of_them, geometry1, geometry2, rings, out); @@ -146,11 +145,21 @@ struct overlay OutputIterator out, Strategy const& ) { - if (geometry::num_points(geometry1) == 0 && geometry::num_points(geometry2) == 0) + if (geometry::num_points(geometry1) == 0 + && geometry::num_points(geometry2) == 0) { return out; } + if (geometry::num_points(geometry1) == 0 + || geometry::num_points(geometry2) == 0) + { + return return_if_one_input_is_empty + < + GeometryOut, Direction, ReverseOut + >(geometry1, geometry2, out); + } + typedef typename geometry::point_type::type point_type; typedef detail::overlay::traversal_turn_info turn_info; typedef std::deque container_type; @@ -160,18 +169,6 @@ struct overlay typename geometry::ring_type::type > ring_container_type; - if (geometry::num_points(geometry1) == 0 - || geometry::num_points(geometry2) == 0) - { - return return_if_one_input_is_empty - < - GeometryOut, Direction, ReverseOut - >(geometry1, geometry2, out); - } - - has_self_intersections(geometry1); - has_self_intersections(geometry2); - container_type turn_points; #ifdef BOOST_GEOMETRY_TIME_OVERLAY @@ -215,11 +212,14 @@ std::cout << "traverse" << std::endl; // Note that these rings are always in clockwise order, even in CCW polygons, // and are marked as "to be reversed" below ring_container_type rings; - geometry::traverse(geometry1, geometry2, - Direction == overlay_union - ? geometry::detail::overlay::operation_union - : geometry::detail::overlay::operation_intersection, - turn_points, rings); + traverse::apply + ( + geometry1, geometry2, + Direction == overlay_union + ? geometry::detail::overlay::operation_union + : geometry::detail::overlay::operation_intersection, + turn_points, rings + ); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "traverse: " << timer.elapsed() << std::endl; @@ -233,10 +233,10 @@ std::cout << "traverse" << std::endl; std::cout << "map_turns: " << timer.elapsed() << std::endl; #endif - typedef ring_properties::type> properties; + typedef ring_properties::type> properties; std::map selected; - select_rings(geometry1, geometry2, map, selected); + select_rings(geometry1, geometry2, map, selected, ! turn_points.empty()); #ifdef BOOST_GEOMETRY_TIME_OVERLAY std::cout << "select_rings: " << timer.elapsed() << std::endl; @@ -251,7 +251,7 @@ std::cout << "traverse" << std::endl; it != boost::end(rings); ++it) { - selected[id] = properties(*it); + selected[id] = properties(*it, true); selected[id].reversed = ReverseOut; id.multi_index++; } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp index d239993c4e..af62131f0e 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp index c6bcaf10bb..a6088694da 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -52,17 +52,17 @@ struct ring_properties {} template - inline ring_properties(RingOrBox const& ring_or_box) + inline ring_properties(RingOrBox const& ring_or_box, bool midpoint) : within_code(-1) , reversed(false) , discarded(false) , parent_area(-1) { this->area = geometry::area(ring_or_box); - geometry::point_on_border(this->point, ring_or_box, true); + geometry::point_on_border(this->point, ring_or_box, midpoint); } - area_type get_area() const + inline area_type get_area() const { return reversed ? -area : area; } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp index 2bd10c4943..007113ffba 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp index 60ec4c88a6..f664b19514 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -40,15 +40,17 @@ namespace dispatch struct select_rings { template - static inline void apply(Box const& box, Geometry const& geometry, ring_identifier const& id, Map& map) + static inline void apply(Box const& box, Geometry const& , + ring_identifier const& id, Map& map, bool midpoint) { - map[id] = typename Map::mapped_type(box); + map[id] = typename Map::mapped_type(box, midpoint); } template - static inline void apply(Box const& box, ring_identifier const& id, Map& map) + static inline void apply(Box const& box, + ring_identifier const& id, Map& map, bool midpoint) { - map[id] = typename Map::mapped_type(box); + map[id] = typename Map::mapped_type(box, midpoint); } }; @@ -56,20 +58,22 @@ namespace dispatch struct select_rings { template - static inline void apply(Ring const& ring, Geometry const& geometry, ring_identifier const& id, Map& map) + static inline void apply(Ring const& ring, Geometry const& , + ring_identifier const& id, Map& map, bool midpoint) { if (boost::size(ring) > 0) { - map[id] = typename Map::mapped_type(ring); + map[id] = typename Map::mapped_type(ring, midpoint); } } template - static inline void apply(Ring const& ring, ring_identifier const& id, Map& map) + static inline void apply(Ring const& ring, + ring_identifier const& id, Map& map, bool midpoint) { if (boost::size(ring) > 0) { - map[id] = typename Map::mapped_type(ring); + map[id] = typename Map::mapped_type(ring, midpoint); } } }; @@ -79,36 +83,38 @@ namespace dispatch struct select_rings { template - static inline void apply(Polygon const& polygon, Geometry const& geometry, ring_identifier id, Map& map) + static inline void apply(Polygon const& polygon, Geometry const& geometry, + ring_identifier id, Map& map, bool midpoint) { typedef typename geometry::ring_type::type ring_type; typedef select_rings per_ring; - per_ring::apply(exterior_ring(polygon), geometry, id, map); + per_ring::apply(exterior_ring(polygon), geometry, id, map, midpoint); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { id.ring_index++; - per_ring::apply(*it, geometry, id, map); + per_ring::apply(*it, geometry, id, map, midpoint); } } template - static inline void apply(Polygon const& polygon, ring_identifier id, Map& map) + static inline void apply(Polygon const& polygon, + ring_identifier id, Map& map, bool midpoint) { typedef typename geometry::ring_type::type ring_type; typedef select_rings per_ring; - per_ring::apply(exterior_ring(polygon), id, map); + per_ring::apply(exterior_ring(polygon), id, map, midpoint); typename interior_return_type::type rings = interior_rings(polygon); for (BOOST_AUTO_TPL(it, boost::begin(rings)); it != boost::end(rings); ++it) { id.ring_index++; - per_ring::apply(*it, id, map); + per_ring::apply(*it, id, map, midpoint); } } }; @@ -123,7 +129,7 @@ template<> struct decide { template - static bool include(ring_identifier const& id, Code const& code) + static bool include(ring_identifier const& , Code const& code) { return code.within_code * -1 == 1; } @@ -156,7 +162,7 @@ template<> struct decide { template - static bool include(ring_identifier const& id, Code const& code) + static bool include(ring_identifier const& , Code const& code) { return code.within_code * 1 == 1; } @@ -203,7 +209,7 @@ inline void update_selection_map(Geometry1 const& geometry1, bool found = intersection_map.find(it->first) != intersection_map.end(); if (! found) { - ring_identifier id = it->first; + ring_identifier const id = it->first; typename SelectionMap::mapped_type properties = it->second; // Copy by value // Calculate the "within code" (previously this was done earlier but is @@ -242,16 +248,20 @@ template typename IntersectionMap, typename SelectionMap > inline void select_rings(Geometry1 const& geometry1, Geometry2 const& geometry2, - IntersectionMap const& intersection_map, SelectionMap& selection_map) + IntersectionMap const& intersection_map, + SelectionMap& selection_map, bool midpoint) { typedef typename geometry::tag::type tag1; typedef typename geometry::tag::type tag2; SelectionMap map_with_all; - dispatch::select_rings::apply(geometry1, geometry2, ring_identifier(0, -1, -1), map_with_all); - dispatch::select_rings::apply(geometry2, geometry1, ring_identifier(1, -1, -1), map_with_all); + dispatch::select_rings::apply(geometry1, geometry2, + ring_identifier(0, -1, -1), map_with_all, midpoint); + dispatch::select_rings::apply(geometry2, geometry1, + ring_identifier(1, -1, -1), map_with_all, midpoint); - update_selection_map(geometry1, geometry2, intersection_map, map_with_all, selection_map); + update_selection_map(geometry1, geometry2, intersection_map, + map_with_all, selection_map); } template @@ -261,14 +271,17 @@ template typename IntersectionMap, typename SelectionMap > inline void select_rings(Geometry const& geometry, - IntersectionMap const& intersection_map, SelectionMap& selection_map) + IntersectionMap const& intersection_map, + SelectionMap& selection_map, bool midpoint) { typedef typename geometry::tag::type tag; SelectionMap map_with_all; - dispatch::select_rings::apply(geometry, ring_identifier(0, -1, -1), map_with_all); + dispatch::select_rings::apply(geometry, + ring_identifier(0, -1, -1), map_with_all, midpoint); - update_selection_map(intersection_map, map_with_all, selection_map); + update_selection_map(geometry, geometry, intersection_map, + map_with_all, selection_map); } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp index 62b8ef4846..9c4c99394e 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -31,6 +32,77 @@ namespace boost { namespace geometry namespace detail { namespace self_get_turn_points { +struct no_interrupt_policy +{ + static bool const enabled = false; + static bool const has_intersections = false; + + + template + static inline bool apply(Range const&) + { + return false; + } +}; + + + + +class self_ip_exception : public geometry::exception {}; + +template +< + typename Geometry, + typename Turns, + typename TurnPolicy, + typename InterruptPolicy +> +struct self_section_visitor +{ + Geometry const& m_geometry; + Turns& m_turns; + InterruptPolicy& m_interrupt_policy; + + inline self_section_visitor(Geometry const& g, + Turns& turns, InterruptPolicy& ip) + : m_geometry(g) + , m_turns(turns) + , m_interrupt_policy(ip) + {} + + template + inline bool apply(Section const& sec1, Section const& sec2) + { + if (! detail::disjoint::disjoint_box_box(sec1.bounding_box, sec2.bounding_box) + && ! sec1.duplicate + && ! sec2.duplicate) + { + detail::get_turns::get_turns_in_sections + < + Geometry, Geometry, + false, false, + Section, Section, + Turns, TurnPolicy, + InterruptPolicy + >::apply( + 0, m_geometry, sec1, + 0, m_geometry, sec2, + false, + m_turns, m_interrupt_policy); + } + if (m_interrupt_policy.has_intersections) + { + // TODO: we should give partition an interrupt policy. + // Now we throw, and catch below, to stop the partition loop. + throw self_ip_exception(); + } + return true; + } + +}; + + + template < typename Geometry, @@ -45,49 +117,38 @@ struct get_turns Turns& turns, InterruptPolicy& interrupt_policy) { + typedef model::box + < + typename geometry::point_type::type + > box_type; typedef typename geometry::sections < - model::box ::type>, - 1 + box_type, 1 > sections_type; sections_type sec; geometry::sectionalize(geometry, sec); - for (typename boost::range_iterator::type - it1 = sec.begin(); - it1 != sec.end(); - ++it1) + self_section_visitor + < + Geometry, + Turns, TurnPolicy, InterruptPolicy + > visitor(geometry, turns, interrupt_policy); + + try { - for (typename boost::range_iterator::type - it2 = sec.begin(); - it2 != sec.end(); - ++it2) - { - if (! geometry::detail::disjoint::disjoint_box_box( - it1->bounding_box, it2->bounding_box) - && ! it1->duplicate - && ! it2->duplicate - ) - { - if (! geometry::detail::get_turns::get_turns_in_sections - < - Geometry, Geometry, - false, false, - typename boost::range_value::type, - typename boost::range_value::type, - Turns, TurnPolicy, - InterruptPolicy - >::apply( - 0, geometry, *it1, - 0, geometry, *it2, - turns, interrupt_policy)) - { - return false; - } - } - } + geometry::partition + < + box_type, + detail::get_turns::get_section_box, + detail::get_turns::ovelaps_section_box + >::apply(sec, visitor); } + catch(self_ip_exception const& ) + { + return false; + } + return true; } }; diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp index ef1c836d73..eebe381944 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp index d57fb9dca2..810a27af04 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp index d91efa71c0..12daafa0cf 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -9,76 +9,58 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP - #include #include -#include +#include +#include #include +#include #include #include #include - -#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT) +#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) \ + || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT) \ + || defined(BOOST_GEOMETRY_DEBUG_TRAVERSE) # include # include -# include +# include #endif - - namespace boost { namespace geometry { - #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { template -inline void debug_traverse(Turn const& turn, Operation op, std::string const& header) -{ #ifdef BOOST_GEOMETRY_DEBUG_TRAVERSE +inline void debug_traverse(Turn const& turn, Operation op, + std::string const& header) +{ std::cout << header << " at " << op.seg_id + << " meth: " << method_char(turn.method) << " op: " << operation_char(op.operation) << " vis: " << visited_char(op.visited) << " of: " << operation_char(turn.operations[0].operation) << operation_char(turn.operations[1].operation) + << " " << geometry::wkt(turn.point) << std::endl; if (boost::contains(header, "Finished")) { std::cout << std::endl; } -#endif } - - -template -inline void clear_visit_info(Turns& turns) +#else +inline void debug_traverse(Turn const& , Operation, std::string const& ) { - typedef typename boost::range_value::type tp_type; - - for (typename boost::range_iterator::type - it = boost::begin(turns); - it != boost::end(turns); - ++it) - { - for (typename boost::range_iterator - < - typename tp_type::container_type - >::type op_it = boost::begin(it->operations); - op_it != boost::end(it->operations); - ++op_it) - { - op_it->visited.clear(); - } - it->discarded = false; - } } +#endif template @@ -125,7 +107,11 @@ inline bool assign_next_ip(G1 const& g1, G2 const& g2, // If there is no next IP on this segment if (info.enriched.next_ip_index < 0) { - if (info.enriched.travels_to_vertex_index < 0 || info.enriched.travels_to_ip_index < 0) return false; + if (info.enriched.travels_to_vertex_index < 0 + || info.enriched.travels_to_ip_index < 0) + { + return false; + } BOOST_ASSERT(info.enriched.travels_to_vertex_index >= 0); BOOST_ASSERT(info.enriched.travels_to_ip_index >= 0); @@ -151,7 +137,7 @@ inline bool assign_next_ip(G1 const& g1, G2 const& g2, seg_id = info.seg_id; } - geometry::append(current_output, ip->point); + detail::overlay::append_no_duplicates(current_output, ip->point); return true; } @@ -227,76 +213,6 @@ inline bool select_next_ip(operation_type operation, -template -< - typename Rings, - typename Turns, - typename Operation, - typename Geometry1, - typename Geometry2 -> -inline void backtrack(std::size_t size_at_start, bool& fail, - Rings& rings, typename boost::range_value::type& ring, - Turns& turns, Operation& operation, - -#ifdef BOOST_GEOMETRY_OVERLAY_REPORT_WKT - std::string const& reason, - Geometry1 const& geometry1, - Geometry2 const& geometry2 -#else - std::string const& reason, - Geometry1 const& , - Geometry2 const& -#endif - ) -{ -#ifdef BOOST_GEOMETRY_DEBUG_ENRICH - std::cout << " REJECT " << reason << std::endl; -#endif - fail = true; - - // Make bad output clean - rings.resize(size_at_start); - ring.clear(); - - // Reject this as a starting point - operation.visited.set_rejected(); - - // And clear all visit info - clear_visit_info(turns); - - /*** - int c = 0; - for (int i = 0; i < turns.size(); i++) - { - for (int j = 0; j < 2; j++) - { - if (turns[i].operations[j].visited.rejected()) - { - c++; - } - } - } - std::cout << "BACKTRACK (" << reason << " )" - << " " << c << " of " << turns.size() << " rejected" - << std::endl; - ***/ - - - -#ifdef BOOST_GEOMETRY_OVERLAY_REPORT_WKT - std::cout << " BT (" << reason << " )"; - std::cout - << geometry::wkt(geometry1) << std::endl - << geometry::wkt(geometry2) << std::endl; -#endif - -} - -}} // namespace detail::overlay -#endif // DOXYGEN_NO_DETAIL - - /*! \brief Traverses through intersection points / geometries \ingroup overlay @@ -306,167 +222,174 @@ template bool Reverse1, bool Reverse2, typename Geometry1, typename Geometry2, - typename Turns, - typename Rings + typename Backtrack = backtrack_check_self_intersections > -inline void traverse(Geometry1 const& geometry1, - Geometry2 const& geometry2, - detail::overlay::operation_type operation, - Turns& turns, Rings& rings) +class traverse { - typedef typename boost::range_iterator::type turn_iterator; - typedef typename boost::range_value::type turn_type; - typedef typename boost::range_iterator - < - typename turn_type::container_type - >::type turn_operation_iterator_type; - - std::size_t size_at_start = boost::size(rings); - - bool fail = false; - do +public : + template + static inline void apply(Geometry1 const& geometry1, + Geometry2 const& geometry2, + detail::overlay::operation_type operation, + Turns& turns, Rings& rings) { - fail = false; - // Iterate through all unvisited points - for (turn_iterator it = boost::begin(turns); - ! fail && it != boost::end(turns); - ++it) + typedef typename boost::range_iterator::type turn_iterator; + typedef typename boost::range_value::type turn_type; + typedef typename boost::range_iterator + < + typename turn_type::container_type + >::type turn_operation_iterator_type; + + std::size_t size_at_start = boost::size(rings); + + typename Backtrack::state_type state; + do { - // Skip discarded ones - if (! (it->is_discarded() || it->blocked())) + state.reset(); + + // Iterate through all unvisited points + for (turn_iterator it = boost::begin(turns); + state.good() && it != boost::end(turns); + ++it) { - for (turn_operation_iterator_type iit = boost::begin(it->operations); - ! fail && iit != boost::end(it->operations); - ++iit) + // Skip discarded ones + if (! (it->is_discarded() || it->blocked())) { - if (iit->visited.none() - && ! iit->visited.rejected() - && (iit->operation == operation - || iit->operation == detail::overlay::operation_continue) - ) + for (turn_operation_iterator_type iit = boost::begin(it->operations); + state.good() && iit != boost::end(it->operations); + ++iit) { - set_visited_for_continue(*it, *iit); - - typename boost::range_value::type current_output; - geometry::append(current_output, it->point); - - turn_iterator current = it; - turn_operation_iterator_type current_iit = iit; - segment_identifier current_seg_id; - - if (! detail::overlay::assign_next_ip( - geometry1, geometry2, - turns, - current, current_output, - *iit, current_seg_id)) + if (iit->visited.none() + && ! iit->visited.rejected() + && (iit->operation == operation + || iit->operation == detail::overlay::operation_continue) + ) { - detail::overlay::backtrack( - size_at_start, fail, - rings, current_output, turns, *current_iit, - "No next IP", - geometry1, geometry2); - } + set_visited_for_continue(*it, *iit); - if (! detail::overlay::select_next_ip( - operation, - *current, - current_seg_id, - current_iit)) - { - detail::overlay::backtrack( - size_at_start, fail, - rings, current_output, turns, *iit, - "Dead end at start", - geometry1, geometry2); - } - else - { + typename boost::range_value::type current_output; + detail::overlay::append_no_duplicates(current_output, + it->point, true); - iit->visited.set_started(); - detail::overlay::debug_traverse(*it, *iit, "-> Started"); - detail::overlay::debug_traverse(*current, *current_iit, "Selected "); + turn_iterator current = it; + turn_operation_iterator_type current_iit = iit; + segment_identifier current_seg_id; - - unsigned int i = 0; - - while (current_iit != iit && ! fail) - { - if (current_iit->visited.visited()) - { - // It visits a visited node again, without passing the start node. - // This makes it suspicious for endless loops - detail::overlay::backtrack( - size_at_start, fail, - rings, current_output, turns, *iit, - "Visit again", - geometry1, geometry2); - } - else - { - - - // We assume clockwise polygons only, non self-intersecting, closed. - // However, the input might be different, and checking validity - // is up to the library user. - - // Therefore we make here some sanity checks. If the input - // violates the assumptions, the output polygon will not be correct - // but the routine will stop and output the current polygon, and - // will continue with the next one. - - // Below three reasons to stop. - detail::overlay::assign_next_ip( + if (! detail::overlay::assign_next_ip( geometry1, geometry2, - turns, current, current_output, - *current_iit, current_seg_id); - - if (! detail::overlay::select_next_ip( - operation, - *current, - current_seg_id, - current_iit)) - { - // Should not occur in valid (non-self-intersecting) polygons - // Should not occur in self-intersecting polygons without spikes - // Might occur in polygons with spikes - detail::overlay::backtrack( - size_at_start, fail, - rings, current_output, turns, *iit, - "Dead end", - geometry1, geometry2); - } - detail::overlay::debug_traverse(*current, *current_iit, "Selected "); - - if (i++ > 2 + 2 * turns.size()) - { - // Sanity check: there may be never more loops - // than turn points. - // Turn points marked as "ii" can be visited twice. - detail::overlay::backtrack( - size_at_start, fail, - rings, current_output, turns, *iit, - "Endless loop", - geometry1, geometry2); - } - } + turns, + current, current_output, + *iit, current_seg_id)) + { + Backtrack::apply( + size_at_start, + rings, current_output, turns, *current_iit, + "No next IP", + geometry1, geometry2, state); } - if (! fail) + if (! detail::overlay::select_next_ip( + operation, + *current, + current_seg_id, + current_iit)) { - iit->visited.set_finished(); - detail::overlay::debug_traverse(*current, *iit, "->Finished"); - rings.push_back(current_output); + Backtrack::apply( + size_at_start, + rings, current_output, turns, *iit, + "Dead end at start", + geometry1, geometry2, state); + } + else + { + + iit->visited.set_started(); + detail::overlay::debug_traverse(*it, *iit, "-> Started"); + detail::overlay::debug_traverse(*current, *current_iit, "Selected "); + + + unsigned int i = 0; + + while (current_iit != iit && state.good()) + { + if (current_iit->visited.visited()) + { + // It visits a visited node again, without passing the start node. + // This makes it suspicious for endless loops + Backtrack::apply( + size_at_start, + rings, current_output, turns, *iit, + "Visit again", + geometry1, geometry2, state); + } + else + { + + + // We assume clockwise polygons only, non self-intersecting, closed. + // However, the input might be different, and checking validity + // is up to the library user. + + // Therefore we make here some sanity checks. If the input + // violates the assumptions, the output polygon will not be correct + // but the routine will stop and output the current polygon, and + // will continue with the next one. + + // Below three reasons to stop. + detail::overlay::assign_next_ip( + geometry1, geometry2, + turns, current, current_output, + *current_iit, current_seg_id); + + if (! detail::overlay::select_next_ip( + operation, + *current, + current_seg_id, + current_iit)) + { + // Should not occur in valid (non-self-intersecting) polygons + // Should not occur in self-intersecting polygons without spikes + // Might occur in polygons with spikes + Backtrack::apply( + size_at_start, + rings, current_output, turns, *iit, + "Dead end", + geometry1, geometry2, state); + } + detail::overlay::debug_traverse(*current, *current_iit, "Selected "); + + if (i++ > 2 + 2 * turns.size()) + { + // Sanity check: there may be never more loops + // than turn points. + // Turn points marked as "ii" can be visited twice. + Backtrack::apply( + size_at_start, + rings, current_output, turns, *iit, + "Endless loop", + geometry1, geometry2, state); + } + } + } + + if (state.good()) + { + iit->visited.set_finished(); + detail::overlay::debug_traverse(*current, *iit, "->Finished"); + rings.push_back(current_output); + } } } } } } - } - } while (fail); -} + } while (! state.good()); + } +}; +}} // namespace detail::overlay +#endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry - #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp index 7d3ef4fc62..89a60b21ab 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -28,7 +28,8 @@ enum operation_type operation_union, operation_intersection, operation_blocked, - operation_continue + operation_continue, + operation_opposite }; @@ -102,6 +103,12 @@ struct turn_info { return has12(type, type); } + + inline bool has(operation_type type) const + { + return this->operations[0].operation == type + || this->operations[1].operation == type; + } inline bool combination(operation_type type1, operation_type type2) const { @@ -114,10 +121,13 @@ struct turn_info { return both(operation_blocked); } + inline bool opposite() const + { + return both(operation_opposite); + } inline bool any_blocked() const { - return this->operations[0].operation == operation_blocked - || this->operations[1].operation == operation_blocked; + return has(operation_blocked); } diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp index 43d265014e..6be63f42b4 100644 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/overlay/within_util.hpp b/3party/boost/boost/geometry/algorithms/detail/overlay/within_util.hpp deleted file mode 100644 index 8618b81fe8..0000000000 --- a/3party/boost/boost/geometry/algorithms/detail/overlay/within_util.hpp +++ /dev/null @@ -1,98 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. - -// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_WITHIN_UTIL_HPP -#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_WITHIN_UTIL_HPP - - - -#include -#include - - -namespace boost { namespace geometry -{ - - -#ifndef DOXYGEN_NO_DETAIL -namespace detail { namespace overlay -{ - - -template -struct within_code -{}; - -template -struct within_code -{ - static inline int apply(Point const& point, Box const& box) - { - // 1. Check outside - if (get<0>(point) < get(box) - || get<0>(point) > get(box) - || get<1>(point) < get(box) - || get<1>(point) > get(box)) - { - return -1; - } - // 2. Check border - if (geometry::math::equals(get<0>(point), get(box)) - || geometry::math::equals(get<0>(point), get(box)) - || geometry::math::equals(get<1>(point), get(box)) - || geometry::math::equals(get<1>(point), get(box))) - { - return 0; - } - return 1; - } -}; -template -struct within_code -{ - static inline int apply(Point const& point, Ring const& ring) - { - // Same as point_in_ring but here ALWAYS with winding. - typedef strategy::within::winding strategy_type; - - return detail::within::point_in_ring - < - Point, - Ring, - order_as_direction::value>::value, - geometry::closure::value, - strategy_type - >::apply(point, ring, strategy_type()); - } -}; - - -template -inline int point_in_ring(Point const& point, Geometry const& geometry) -{ - return within_code::type, Point, Geometry> - ::apply(point, geometry); -} - -template -inline bool within_or_touch(Point const& point, Geometry const& geometry) -{ - return within_code::type, Point, Geometry> - ::apply(point, geometry) >= 0; -} - - - -}} // namespace detail::overlay -#endif // DOXYGEN_NO_DETAIL - - -}} // namespace boost::geometry - - -#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_WITHIN_UTIL_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/partition.hpp b/3party/boost/boost/geometry/algorithms/detail/partition.hpp index 3e0e778d3f..45ff52ccb1 100644 --- a/3party/boost/boost/geometry/algorithms/detail/partition.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/partition.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -10,14 +10,13 @@ #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP #include -#include #include +#include #include namespace boost { namespace geometry { - namespace detail { namespace partition { @@ -39,24 +38,31 @@ inline void divide_box(Box const& box, Box& lower_box, Box& upper_box) geometry::set(upper_box, mid); } -// Divide collection into three subsets: lower, upper and oversized (not-fitting) +// Divide collection into three subsets: lower, upper and oversized +// (not-fitting) // (lower == left or bottom, upper == right or top) template -static inline void divide_into_subsets(Box const& lower_box, Box const& upper_box, +static inline void divide_into_subsets(Box const& lower_box, + Box const& upper_box, InputCollection const& collection, index_vector_type const& input, index_vector_type& lower, index_vector_type& upper, index_vector_type& exceeding) { - typedef boost::range_iterator::type index_iterator_type; + typedef boost::range_iterator + < + index_vector_type const + >::type index_iterator_type; for(index_iterator_type it = boost::begin(input); it != boost::end(input); ++it) { - bool const lower_overlapping = OverlapsPolicy::apply(lower_box, collection[*it]); - bool const upper_overlapping = OverlapsPolicy::apply(upper_box, collection[*it]); + bool const lower_overlapping = OverlapsPolicy::apply(lower_box, + collection[*it]); + bool const upper_overlapping = OverlapsPolicy::apply(upper_box, + collection[*it]); if (lower_overlapping && upper_overlapping) { @@ -78,16 +84,18 @@ static inline void divide_into_subsets(Box const& lower_box, Box const& upper_bo } } - // Match collection with itself template static inline void handle_one(InputCollection const& collection, index_vector_type const& input, Policy& policy) { - typedef boost::range_iterator::type index_iterator_type; + typedef boost::range_iterator::type + index_iterator_type; // Quadratic behaviour at lowest level (lowest quad, or all exceeding) - for(index_iterator_type it1 = boost::begin(input); it1 != boost::end(input); ++it1) + for(index_iterator_type it1 = boost::begin(input); + it1 != boost::end(input); + ++it1) { index_iterator_type it2 = it1; for(++it2; it2 != boost::end(input); ++it2) @@ -104,17 +112,24 @@ static inline void handle_two( InputCollection const& collection2, index_vector_type const& input2, Policy& policy) { - typedef boost::range_iterator::type index_iterator_type; - for(index_iterator_type it1 = boost::begin(input1); it1 != boost::end(input1); ++it1) + typedef boost::range_iterator + < + index_vector_type const + >::type index_iterator_type; + + for(index_iterator_type it1 = boost::begin(input1); + it1 != boost::end(input1); + ++it1) { - for(index_iterator_type it2 = boost::begin(input2); it2 != boost::end(input2); ++it2) + for(index_iterator_type it2 = boost::begin(input2); + it2 != boost::end(input2); + ++it2) { policy.apply(collection1[*it1], collection2[*it2]); } } } - template < int Dimension, @@ -138,14 +153,15 @@ class partition_one_collection static inline void next_level(Box const& box, InputCollection const& collection, index_vector_type const& input, - int level, int min_elements, + int level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { if (boost::size(input) > 0) { - if (boost::size(input) > min_elements && level < 100) + if (std::size_t(boost::size(input)) > min_elements && level < 100) { - sub_divide::apply(box, collection, input, level + 1, min_elements, policy, box_policy); + sub_divide::apply(box, collection, input, level + 1, + min_elements, policy, box_policy); } else { @@ -160,7 +176,7 @@ public : InputCollection const& collection, index_vector_type const& input, int level, - int min_elements, + std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { box_policy.apply(box, level); @@ -169,7 +185,8 @@ public : divide_box(box, lower_box, upper_box); index_vector_type lower, upper, exceeding; - divide_into_subsets(lower_box, upper_box, collection, input, lower, upper, exceeding); + divide_into_subsets(lower_box, upper_box, collection, + input, lower, upper, exceeding); if (boost::size(exceeding) > 0) { @@ -181,12 +198,13 @@ public : } // Recursively call operation both parts - next_level(lower_box, collection, lower, level, min_elements, policy, box_policy); - next_level(upper_box, collection, upper, level, min_elements, policy, box_policy); + next_level(lower_box, collection, lower, level, min_elements, + policy, box_policy); + next_level(upper_box, collection, upper, level, min_elements, + policy, box_policy); } }; - template < int Dimension, @@ -208,18 +226,22 @@ class partition_two_collections template static inline void next_level(Box const& box, - InputCollection const& collection1, index_vector_type const& input1, - InputCollection const& collection2, index_vector_type const& input2, - int level, int min_elements, + InputCollection const& collection1, + index_vector_type const& input1, + InputCollection const& collection2, + index_vector_type const& input2, + int level, std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { if (boost::size(input1) > 0 && boost::size(input2) > 0) { - if (boost::size(input1) > min_elements - && boost::size(input2) > min_elements + if (std::size_t(boost::size(input1)) > min_elements + && std::size_t(boost::size(input2)) > min_elements && level < 100) { - sub_divide::apply(box, collection1, input1, collection2, input2, level + 1, min_elements, policy, box_policy); + sub_divide::apply(box, collection1, input1, collection2, + input2, level + 1, min_elements, + policy, box_policy); } else { @@ -235,7 +257,7 @@ public : InputCollection const& collection1, index_vector_type const& input1, InputCollection const& collection2, index_vector_type const& input2, int level, - int min_elements, + std::size_t min_elements, Policy& policy, VisitBoxPolicy& box_policy) { box_policy.apply(box, level); @@ -245,13 +267,16 @@ public : index_vector_type lower1, upper1, exceeding1; index_vector_type lower2, upper2, exceeding2; - divide_into_subsets(lower_box, upper_box, collection1, input1, lower1, upper1, exceeding1); - divide_into_subsets(lower_box, upper_box, collection2, input2, lower2, upper2, exceeding2); + divide_into_subsets(lower_box, upper_box, collection1, + input1, lower1, upper1, exceeding1); + divide_into_subsets(lower_box, upper_box, collection2, + input2, lower2, upper2, exceeding2); if (boost::size(exceeding1) > 0) { // All exceeding from 1 with 2: - handle_two(collection1, exceeding1, collection2, exceeding2, policy); + handle_two(collection1, exceeding1, collection2, exceeding2, + policy); // All exceeding from 1 with lower and upper of 2: handle_two(collection1, exceeding1, collection2, lower2, policy); @@ -264,13 +289,13 @@ public : handle_two(collection1, upper1, collection2, exceeding2, policy); } - next_level(lower_box, collection1, lower1, collection2, lower2, level, min_elements, policy, box_policy); - next_level(upper_box, collection1, upper1, collection2, upper2, level, min_elements, policy, box_policy); + next_level(lower_box, collection1, lower1, collection2, lower2, level, + min_elements, policy, box_policy); + next_level(upper_box, collection1, upper1, collection2, upper2, level, + min_elements, policy, box_policy); } }; - - }} // namespace detail::partition struct visit_no_policy @@ -280,7 +305,6 @@ struct visit_no_policy {} }; - template < typename Box, @@ -293,7 +317,8 @@ class partition typedef std::vector index_vector_type; template - static inline void expand_to_collection(InputCollection const& collection, Box& total, index_vector_type& index_vector) + static inline void expand_to_collection(InputCollection const& collection, + Box& total, index_vector_type& index_vector) { std::size_t index = 0; for(typename boost::range_iterator::type it @@ -306,16 +331,15 @@ class partition } } - public : template static inline void apply(InputCollection const& collection, VisitPolicy& visitor, - int min_elements = 16, + std::size_t min_elements = 16, VisitBoxPolicy box_visitor = visit_no_policy() ) { - if (boost::size(collection) > min_elements) + if (std::size_t(boost::size(collection)) > min_elements) { index_vector_type index_vector; Box total; @@ -327,12 +351,18 @@ public : 0, Box, OverlapsPolicy, VisitBoxPolicy - >::apply(total, collection, index_vector, 0, min_elements, visitor, box_visitor); + >::apply(total, collection, index_vector, 0, min_elements, + visitor, box_visitor); } else { - typedef typename boost::range_iterator::type iterator_type; - for(iterator_type it1 = boost::begin(collection); it1 != boost::end(collection); ++it1) + typedef typename boost::range_iterator + < + InputCollection const + >::type iterator_type; + for(iterator_type it1 = boost::begin(collection); + it1 != boost::end(collection); + ++it1) { iterator_type it2 = it1; for(++it2; it2 != boost::end(collection); ++it2) @@ -347,11 +377,12 @@ public : static inline void apply(InputCollection const& collection1, InputCollection const& collection2, VisitPolicy& visitor, - int min_elements = 16, + std::size_t min_elements = 16, VisitBoxPolicy box_visitor = visit_no_policy() ) { - if (boost::size(collection1) > min_elements && boost::size(collection2) > min_elements) + if (std::size_t(boost::size(collection1)) > min_elements + && std::size_t(boost::size(collection2)) > min_elements) { index_vector_type index_vector1, index_vector2; Box total; @@ -369,10 +400,17 @@ public : } else { - typedef typename boost::range_iterator::type iterator_type; - for(iterator_type it1 = boost::begin(collection1); it1 != boost::end(collection1); ++it1) + typedef typename boost::range_iterator + < + InputCollection const + >::type iterator_type; + for(iterator_type it1 = boost::begin(collection1); + it1 != boost::end(collection1); + ++it1) { - for(iterator_type it2 = boost::begin(collection2); it2 != boost::end(collection2); ++it2) + for(iterator_type it2 = boost::begin(collection2); + it2 != boost::end(collection2); + ++it2) { visitor.apply(*it1, *it2); } @@ -382,8 +420,6 @@ public : }; - }} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP diff --git a/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp b/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp index 0cc6f42b01..b7e15ba3f9 100644 --- a/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/point_on_border.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -25,6 +25,7 @@ #include #include +#include #include @@ -50,7 +51,8 @@ struct get_point template struct midpoint_helper { - static inline bool apply(Point& p, Point const& p1, Point const& p2) + template + static inline bool apply(Point& p, InputPoint const& p1, InputPoint const& p2) { typename coordinate_type::type const two = 2; set(p, @@ -63,7 +65,8 @@ struct midpoint_helper template struct midpoint_helper { - static inline bool apply(Point& , Point const& , Point const& ) + template + static inline bool apply(Point& , InputPoint const& , InputPoint const& ) { return true; } @@ -102,7 +105,7 @@ struct point_on_range if (n > 0) { - point = *boost::begin(range); + geometry::detail::conversion::convert_point_to_point(*boost::begin(range), point); return true; } return false; diff --git a/3party/boost/boost/geometry/algorithms/detail/ring_identifier.hpp b/3party/boost/boost/geometry/algorithms/detail/ring_identifier.hpp index 2d01db4e07..9209ee0304 100644 --- a/3party/boost/boost/geometry/algorithms/detail/ring_identifier.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/ring_identifier.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp b/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp index 3bfcaf6605..ad62f232bd 100644 --- a/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -36,7 +36,7 @@ namespace detail { namespace section template struct full_section_range { - static inline Range const& apply(Range const& range, Section const& section) + static inline Range const& apply(Range const& range, Section const& ) { return range; } diff --git a/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp b/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp index 52cf158667..a6e6837fe4 100644 --- a/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp +++ b/3party/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -189,11 +189,12 @@ struct check_duplicate_loop static inline bool apply(Segment const& seg) { - coordinate_type const diff = - geometry::get<1, Dimension>(seg) - geometry::get<0, Dimension>(seg); - - coordinate_type const zero = 0; - if (! geometry::math::equals(diff, zero)) + if (! geometry::math::equals + ( + geometry::get<0, Dimension>(seg), + geometry::get<1, Dimension>(seg) + ) + ) { return false; } @@ -253,7 +254,7 @@ struct sectionalize_part Range const& range, ring_identifier ring_id) { - if (boost::size(range) <= index) + if (int(boost::size(range)) <= index) { return; } diff --git a/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp b/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp new file mode 100644 index 0000000000..62328a0d87 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp @@ -0,0 +1,53 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP + +#include +#include + +// BSG 2012-02-06: we use this currently only for distance. +// For other scalar results area,length,perimeter it is commented on purpose. +// Reason is that for distance there is no other choice. distance of two +// empty geometries (or one empty) should NOT return any value. +// But for area it is no problem to be 0. +// Suppose: area(intersection(a,b)). We (probably) don't want a throw there... + +// So decided that at least for Boost 1.49 this is commented for +// scalar results, except distance. + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ + +template +inline void throw_on_empty_input(Geometry const& geometry) +{ +#if ! defined(BOOST_GEOMETRY_EMPTY_INPUT_NO_THROW) + if (geometry::num_points(geometry) == 0) + { + throw empty_input_exception(); + } +#endif +} + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP + diff --git a/3party/boost/boost/geometry/algorithms/difference.hpp b/3party/boost/boost/geometry/algorithms/difference.hpp index 230ef512e0..480dd928de 100644 --- a/3party/boost/boost/geometry/algorithms/difference.hpp +++ b/3party/boost/boost/geometry/algorithms/difference.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -53,11 +53,23 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1, concept::check(); concept::check(); concept::check(); - - return detail::intersection::insert( - geometry1, geometry2, - out, - strategy); + + return geometry::dispatch::intersection_insert + < + typename geometry::tag::type, + typename geometry::tag::type, + typename geometry::tag::type, + geometry::is_areal::value, + geometry::is_areal::value, + geometry::is_areal::value, + Geometry1, Geometry2, + geometry::detail::overlay::do_reverse::value>::value, + geometry::detail::overlay::do_reverse::value, true>::value, + geometry::detail::overlay::do_reverse::value>::value, + OutputIterator, GeometryOut, + overlay_difference, + Strategy + >::apply(geometry1, geometry2, out, strategy); } /*! diff --git a/3party/boost/boost/geometry/algorithms/disjoint.hpp b/3party/boost/boost/geometry/algorithms/disjoint.hpp index 697d49f63b..f986cc24af 100644 --- a/3party/boost/boost/geometry/algorithms/disjoint.hpp +++ b/3party/boost/boost/geometry/algorithms/disjoint.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -44,6 +45,61 @@ namespace boost { namespace geometry namespace detail { namespace disjoint { +template +struct check_each_ring_for_within +{ + bool has_within; + Geometry const& m_geometry; + + inline check_each_ring_for_within(Geometry const& g) + : has_within(false) + , m_geometry(g) + {} + + template + inline void apply(Range const& range) + { + typename geometry::point_type::type p; + geometry::point_on_border(p, range); + if (geometry::within(p, m_geometry)) + { + has_within = true; + } + } +}; + +template +inline bool rings_containing(FirstGeometry const& geometry1, + SecondGeometry const& geometry2) +{ + check_each_ring_for_within checker(geometry1); + geometry::detail::for_each_range(geometry2, checker); + return checker.has_within; +} + + +struct assign_disjoint_policy +{ + // We want to include all points: + static bool const include_no_turn = true; + static bool const include_degenerate = true; + static bool const include_opposite = true; + + // We don't assign extra info: + template + < + typename Info, + typename Point1, + typename Point2, + typename IntersectionInfo, + typename DirInfo + > + static inline void apply(Info& , Point1 const& , Point2 const&, + IntersectionInfo const&, DirInfo const&) + {} +}; + + template struct disjoint_linear { @@ -54,12 +110,14 @@ struct disjoint_linear typedef overlay::turn_info turn_info; std::deque turns; - // Get (and stop on) any intersection + // Specify two policies: + // 1) Stop at any intersection + // 2) In assignment, include also degenerate points (which are normally skipped) disjoint_interrupt_policy policy; geometry::get_turns < - false, false, - overlay::assign_null_policy + false, false, + assign_disjoint_policy >(geometry1, geometry2, turns, policy); if (policy.has_intersections) { @@ -92,8 +150,6 @@ struct disjoint_segment } }; - - template struct general_areal { @@ -104,20 +160,10 @@ struct general_areal return false; } - typedef typename geometry::point_type::type point_type; - // If there is no intersection of segments, they might located // inside each other - point_type p1; - geometry::point_on_border(p1, geometry1); - if (geometry::within(p1, geometry2)) - { - return false; - } - - typename geometry::point_type::type p2; - geometry::point_on_border(p2, geometry2); - if (geometry::within(p2, geometry1)) + if (rings_containing(geometry1, geometry2) + || rings_containing(geometry2, geometry1)) { return false; } @@ -213,7 +259,9 @@ struct disjoint_reversed \param geometry1 \param_geometry \param geometry2 \param_geometry \return \return_check2{are disjoint} - */ + +\qbk{[include reference/algorithms/disjoint.qbk]} +*/ template inline bool disjoint(Geometry1 const& geometry1, Geometry2 const& geometry2) diff --git a/3party/boost/boost/geometry/algorithms/distance.hpp b/3party/boost/boost/geometry/algorithms/distance.hpp index c28d4a6c0e..11c2bc929b 100644 --- a/3party/boost/boost/geometry/algorithms/distance.hpp +++ b/3party/boost/boost/geometry/algorithms/distance.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -19,15 +19,14 @@ #include #include -#include - -#include - #include #include #include #include +#include +#include + #include #include @@ -65,7 +64,7 @@ template struct point_to_segment { static inline typename return_type::type apply(Point const& point, - Segment const& segment, Strategy const& strategy) + Segment const& segment, Strategy const& ) { typename strategy::distance::services::default_strategy < @@ -131,7 +130,7 @@ struct point_to_range // check if other segments are closer for (++prev, ++it; it != boost::end(view); ++prev, ++it) { - return_type const ds = ps_strategy.apply(point, *prev, *it); + return_type const ds = eps_strategy.apply(point, *prev, *it); if (geometry::math::equals(ds, zero)) { return ds; @@ -236,6 +235,18 @@ struct point_to_polygon }; +// Helper metafunction for default strategy retrieval +template +struct default_strategy + : strategy::distance::services::default_strategy + < + point_tag, + typename point_type::type, + typename point_type::type + > +{}; + + }} // namespace detail::distance #endif // DOXYGEN_NO_DETAIL @@ -244,31 +255,97 @@ struct point_to_polygon namespace dispatch { + using strategy::distance::services::return_type; template < - typename GeometryTag1, typename GeometryTag2, typename Geometry1, typename Geometry2, - typename StrategyTag, typename Strategy + typename Strategy = typename detail::distance::default_strategy::type, + typename Tag1 = typename tag_cast::type, multi_tag>::type, + typename Tag2 = typename tag_cast::type, multi_tag>::type, + typename StrategyTag = typename strategy::distance::services::tag::type, + bool Reverse = reverse_dispatch::type::value +> +struct distance: not_implemented +{}; + + +// If reversal is needed, perform it +template +< + typename Geometry1, typename Geometry2, typename Strategy, + typename Tag1, typename Tag2, typename StrategyTag > struct distance +< + Geometry1, Geometry2, Strategy, + Tag1, Tag2, StrategyTag, + true +> + : distance { - BOOST_MPL_ASSERT_MSG - ( - false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE - , (types) - ); + static inline typename return_type::type apply( + Geometry1 const& g1, + Geometry2 const& g2, + Strategy const& strategy) + { + return distance + < + Geometry2, Geometry1, Strategy, + Tag2, Tag1, StrategyTag, + false + >::apply(g2, g1, strategy); + } +}; + +// If reversal is needed and we got the strategy by default, invert it before +// proceeding to the reversal. +template +< + typename Geometry1, typename Geometry2, + typename Tag1, typename Tag2, typename StrategyTag +> +struct distance +< + Geometry1, Geometry2, + typename detail::distance::default_strategy::type, + Tag1, Tag2, StrategyTag, + true +> + : distance + < + Geometry2, Geometry1, + typename detail::distance::default_strategy::type, + Tag2, Tag1, StrategyTag, + false + > +{ + typedef typename detail::distance::default_strategy::type reversed_strategy; + + static inline typename strategy::distance::services::return_type::type apply( + Geometry1 const& g1, + Geometry2 const& g2, + typename detail::distance::default_strategy::type const&) + { + return distance + < + Geometry2, Geometry1, reversed_strategy, + Tag2, Tag1, StrategyTag, + false + >::apply(g2, g1, reversed_strategy()); + } }; +// Point-point template struct distance < - point_tag, point_tag, - P1, P2, - strategy_tag_distance_point_point, Strategy + P1, P2, Strategy, + point_tag, point_tag, strategy_tag_distance_point_point, + false > : detail::distance::point_to_point {}; @@ -278,9 +355,9 @@ struct distance template struct distance < - point_tag, linestring_tag, - Point, Linestring, - strategy_tag_distance_point_point, Strategy + Point, Linestring, Strategy, + point_tag, linestring_tag, strategy_tag_distance_point_point, + false > { @@ -307,9 +384,9 @@ struct distance template struct distance < - point_tag, linestring_tag, - Point, Linestring, - strategy_tag_distance_point_segment, Strategy + Point, Linestring, Strategy, + point_tag, linestring_tag, strategy_tag_distance_point_segment, + false > { static inline typename return_type::type apply(Point const& point, @@ -328,9 +405,9 @@ struct distance template struct distance < - point_tag, ring_tag, - Point, Ring, - strategy_tag_distance_point_point, Strategy + Point, Ring, Strategy, + point_tag, ring_tag, strategy_tag_distance_point_point, + false > { typedef typename return_type::type return_type; @@ -363,9 +440,9 @@ struct distance template struct distance < - point_tag, polygon_tag, - Point, Polygon, - strategy_tag_distance_point_point, Strategy + Point, Polygon, Strategy, + point_tag, polygon_tag, strategy_tag_distance_point_point, + false > { typedef typename return_type::type return_type; @@ -399,9 +476,9 @@ struct distance template struct distance < - point_tag, segment_tag, - Point, Segment, - strategy_tag_distance_point_point, Strategy + Point, Segment, Strategy, + point_tag, segment_tag, strategy_tag_distance_point_point, + false > : detail::distance::point_to_segment {}; @@ -409,9 +486,9 @@ struct distance template struct distance < - point_tag, segment_tag, - Point, Segment, - strategy_tag_distance_point_segment, Strategy + Point, Segment, Strategy, + point_tag, segment_tag, strategy_tag_distance_point_segment, + false > { static inline typename return_type::type apply(Point const& point, @@ -427,27 +504,6 @@ struct distance -// Strictly spoken this might be in namespace again -template -< - typename GeometryTag1, typename GeometryTag2, - typename G1, typename G2, - typename StrategyTag, typename Strategy -> -struct distance_reversed -{ - static inline typename return_type::type apply(G1 const& g1, - G2 const& g2, Strategy const& strategy) - { - return distance - < - GeometryTag2, GeometryTag1, - G2, G1, - StrategyTag, Strategy - >::apply(g2, g1, strategy); - } -}; - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH @@ -489,34 +545,21 @@ for return_type<...> for your strategy. */ template inline typename strategy::distance::services::return_type::type distance( - Geometry1 const& geometry1, - Geometry2 const& geometry2, Strategy const& strategy) + Geometry1 const& geometry1, Geometry2 const& geometry2, + Strategy const& strategy) { concept::check(); concept::check(); + + detail::throw_on_empty_input(geometry1); + detail::throw_on_empty_input(geometry2); - return boost::mpl::if_ - < - typename geometry::reverse_dispatch::type, - dispatch::distance_reversed - < - typename tag_cast::type, multi_tag>::type, - typename tag_cast::type, multi_tag>::type, - Geometry1, - Geometry2, - typename strategy::distance::services::tag::type, - Strategy - >, - dispatch::distance - < - typename tag_cast::type, multi_tag>::type, - typename tag_cast::type, multi_tag>::type, - Geometry1, - Geometry2, - typename strategy::distance::services::tag::type, - Strategy - > - >::type::apply(geometry1, geometry2, strategy); + return dispatch::distance + < + Geometry1, + Geometry2, + Strategy + >::apply(geometry1, geometry2, strategy); } @@ -539,29 +582,8 @@ inline typename default_distance_result::type distance( concept::check(); concept::check(); - typedef typename point_type::type point1_type; - typedef typename point_type::type point2_type; - - // Define a point-point-distance-strategy - // for either the normal case, either the reversed case - typedef typename boost::mpl::if_c - < - geometry::reverse_dispatch::type::value, - typename strategy::distance::services::default_strategy - < - point_tag, - point2_type, - point1_type - >::type, - typename strategy::distance::services::default_strategy - < - point_tag, - point1_type, - point2_type - >::type - >::type strategy; - - return distance(geometry1, geometry2, strategy()); + return distance(geometry1, geometry2, + typename detail::distance::default_strategy::type()); } }} // namespace boost::geometry diff --git a/3party/boost/boost/geometry/algorithms/envelope.hpp b/3party/boost/boost/geometry/algorithms/envelope.hpp index 0964affd1c..da34f6a783 100644 --- a/3party/boost/boost/geometry/algorithms/envelope.hpp +++ b/3party/boost/boost/geometry/algorithms/envelope.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -216,14 +216,7 @@ struct envelope \param geometry \param_geometry \param mbr \param_box \param_set{envelope} -\par Example: -Example showing envelope calculation, using point_ll latlong points -\dontinclude doxygen_1.cpp -\skip example_envelope_polygon -\line { -\until } - - +\qbk{[include reference/algorithms/envelope.qbk]} \qbk{ [heading Example] [envelope] [envelope_output] @@ -253,6 +246,7 @@ inline void envelope(Geometry const& geometry, Box& mbr) \param geometry \param_geometry \return \return_calc{envelope} +\qbk{[include reference/algorithms/envelope.qbk]} \qbk{ [heading Example] [return_envelope] [return_envelope_output] diff --git a/3party/boost/boost/geometry/algorithms/equals.hpp b/3party/boost/boost/geometry/algorithms/equals.hpp index 80af391219..6b094f76d0 100644 --- a/3party/boost/boost/geometry/algorithms/equals.hpp +++ b/3party/boost/boost/geometry/algorithms/equals.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/expand.hpp b/3party/boost/boost/geometry/algorithms/expand.hpp index 7d4496b960..da7442b593 100644 --- a/3party/boost/boost/geometry/algorithms/expand.hpp +++ b/3party/boost/boost/geometry/algorithms/expand.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/for_each.hpp b/3party/boost/boost/geometry/algorithms/for_each.hpp index 7993644faf..671f26a70d 100644 --- a/3party/boost/boost/geometry/algorithms/for_each.hpp +++ b/3party/boost/boost/geometry/algorithms/for_each.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -55,8 +55,10 @@ template struct fe_point_per_segment { static inline Functor apply( - typename add_const_if_c::type& point, Functor f) + typename add_const_if_c::type& , Functor f) { + // TODO: if non-const, we should extract the points from the segment + // and call the functor on those two points return f; } }; @@ -248,6 +250,7 @@ struct for_each_segment \tparam Functor \tparam_functor \qbk{distinguish,const version} +\qbk{[include reference/algorithms/for_each_point.qbk]} \qbk{[heading Example]} \qbk{[for_each_point_const] [for_each_point_const_output]} */ @@ -275,6 +278,7 @@ inline Functor for_each_point(Geometry const& geometry, Functor f) \tparam Geometry \tparam_geometry \tparam Functor \tparam_functor +\qbk{[include reference/algorithms/for_each_point.qbk]} \qbk{[heading Example]} \qbk{[for_each_point] [for_each_point_output]} */ @@ -303,6 +307,7 @@ inline Functor for_each_point(Geometry& geometry, Functor f) \tparam Functor \tparam_functor \qbk{distinguish,const version} +\qbk{[include reference/algorithms/for_each_segment.qbk]} \qbk{[heading Example]} \qbk{[for_each_segment_const] [for_each_segment_const_output]} */ @@ -329,6 +334,8 @@ inline Functor for_each_segment(Geometry const& geometry, Functor f) \param f \par_for_each_f{segment} \tparam Geometry \tparam_geometry \tparam Functor \tparam_functor + +\qbk{[include reference/algorithms/for_each_segment.qbk]} */ template inline Functor for_each_segment(Geometry& geometry, Functor f) diff --git a/3party/boost/boost/geometry/algorithms/intersection.hpp b/3party/boost/boost/geometry/algorithms/intersection.hpp index be9fff9825..8d3dd68b3a 100644 --- a/3party/boost/boost/geometry/algorithms/intersection.hpp +++ b/3party/boost/boost/geometry/algorithms/intersection.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/intersects.hpp b/3party/boost/boost/geometry/algorithms/intersects.hpp index 0463b9dab6..f367f2e258 100644 --- a/3party/boost/boost/geometry/algorithms/intersects.hpp +++ b/3party/boost/boost/geometry/algorithms/intersects.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -35,6 +35,7 @@ namespace boost { namespace geometry \return \return_check{is self-intersecting} \qbk{distinguish,one geometry} +\qbk{[def __one_parameter__]} \qbk{[include reference/algorithms/intersects.qbk]} */ template diff --git a/3party/boost/boost/geometry/algorithms/length.hpp b/3party/boost/boost/geometry/algorithms/length.hpp index d01a1110d9..de53a39e8f 100644 --- a/3party/boost/boost/geometry/algorithms/length.hpp +++ b/3party/boost/boost/geometry/algorithms/length.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -28,6 +28,7 @@ #include #include +// #include #include #include #include @@ -151,6 +152,8 @@ inline typename default_length_result::type length( { concept::check(); + // detail::throw_on_empty_input(geometry); + typedef typename strategy::distance::services::default_strategy < point_tag, typename point_type::type @@ -185,6 +188,8 @@ inline typename default_length_result::type length( { concept::check(); + // detail::throw_on_empty_input(geometry); + return dispatch::length < typename tag::type, diff --git a/3party/boost/boost/geometry/algorithms/make.hpp b/3party/boost/boost/geometry/algorithms/make.hpp index 8693f5dcf5..d0e3092492 100644 --- a/3party/boost/boost/geometry/algorithms/make.hpp +++ b/3party/boost/boost/geometry/algorithms/make.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/not_implemented.hpp b/3party/boost/boost/geometry/algorithms/not_implemented.hpp new file mode 100644 index 0000000000..008f111cc8 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/not_implemented.hpp @@ -0,0 +1,117 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP +#define BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP + + +#include +#include +#include + + +namespace boost { namespace geometry +{ + + +namespace info +{ + struct UNRECOGNIZED_GEOMETRY_TYPE {}; + struct POINT {}; + struct LINESTRING {}; + struct POLYGON {}; + struct RING {}; + struct BOX {}; + struct SEGMENT {}; + struct MULTI_POINT {}; + struct MULTI_LINESTRING {}; + struct MULTI_POLYGON {}; + struct GEOMETRY_COLLECTION {}; + template struct DIMENSION {}; +} + + +namespace nyi +{ + + +struct not_implemented_tag {}; + +template +< + typename Term1, + typename Term2, + typename Term3 +> +struct not_implemented_error +{ + +#ifndef BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD +# define BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD false +#endif + + BOOST_MPL_ASSERT_MSG + ( + BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD, + THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED, + ( + types + ) + ); +}; + +template +struct tag_to_term +{ + typedef Tag type; +}; + +template <> struct tag_to_term { typedef info::UNRECOGNIZED_GEOMETRY_TYPE type; }; +template <> struct tag_to_term { typedef info::POINT type; }; +template <> struct tag_to_term { typedef info::LINESTRING type; }; +template <> struct tag_to_term { typedef info::POLYGON type; }; +template <> struct tag_to_term { typedef info::RING type; }; +template <> struct tag_to_term { typedef info::BOX type; }; +template <> struct tag_to_term { typedef info::SEGMENT type; }; +template <> struct tag_to_term { typedef info::MULTI_POINT type; }; +template <> struct tag_to_term { typedef info::MULTI_LINESTRING type; }; +template <> struct tag_to_term { typedef info::MULTI_POLYGON type; }; +template <> struct tag_to_term { typedef info::GEOMETRY_COLLECTION type; }; +template struct tag_to_term > { typedef info::DIMENSION type; }; + + +} + + +template +< + typename Term1 = void, + typename Term2 = void, + typename Term3 = void +> +struct not_implemented + : nyi::not_implemented_tag, + nyi::not_implemented_error + < + typename mpl::identity::type>::type, + typename mpl::identity::type>::type, + typename mpl::identity::type>::type + > +{}; + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP diff --git a/3party/boost/boost/geometry/algorithms/num_geometries.hpp b/3party/boost/boost/geometry/algorithms/num_geometries.hpp index b05092a13c..20f35e90d2 100644 --- a/3party/boost/boost/geometry/algorithms/num_geometries.hpp +++ b/3party/boost/boost/geometry/algorithms/num_geometries.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/num_interior_rings.hpp b/3party/boost/boost/geometry/algorithms/num_interior_rings.hpp index 0e4681aff5..2149f46576 100644 --- a/3party/boost/boost/geometry/algorithms/num_interior_rings.hpp +++ b/3party/boost/boost/geometry/algorithms/num_interior_rings.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/num_points.hpp b/3party/boost/boost/geometry/algorithms/num_points.hpp index da42f38a92..c480068f43 100644 --- a/3party/boost/boost/geometry/algorithms/num_points.hpp +++ b/3party/boost/boost/geometry/algorithms/num_points.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/overlaps.hpp b/3party/boost/boost/geometry/algorithms/overlaps.hpp index 3adf9cb5e7..2f854b4fdd 100644 --- a/3party/boost/boost/geometry/algorithms/overlaps.hpp +++ b/3party/boost/boost/geometry/algorithms/overlaps.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -179,7 +179,9 @@ struct overlaps \brief \brief_check2{overlap} \ingroup overlaps \return \return_check2{overlap} - */ + +\qbk{[include reference/algorithms/overlaps.qbk]} +*/ template inline bool overlaps(Geometry1 const& geometry1, Geometry2 const& geometry2) { diff --git a/3party/boost/boost/geometry/algorithms/perimeter.hpp b/3party/boost/boost/geometry/algorithms/perimeter.hpp index a0536d1da2..adeb0b05b0 100644 --- a/3party/boost/boost/geometry/algorithms/perimeter.hpp +++ b/3party/boost/boost/geometry/algorithms/perimeter.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -22,6 +22,7 @@ #include #include #include +// #include namespace boost { namespace geometry @@ -97,6 +98,8 @@ inline typename default_length_result::type perimeter( point_tag, point_type >::type strategy_type; + // detail::throw_on_empty_input(geometry); + return dispatch::perimeter < typename tag::type, @@ -125,6 +128,8 @@ inline typename default_length_result::type perimeter( { concept::check(); + // detail::throw_on_empty_input(geometry); + return dispatch::perimeter < typename tag::type, diff --git a/3party/boost/boost/geometry/algorithms/reverse.hpp b/3party/boost/boost/geometry/algorithms/reverse.hpp index 3d208120b0..bf0ef2d9a9 100644 --- a/3party/boost/boost/geometry/algorithms/reverse.hpp +++ b/3party/boost/boost/geometry/algorithms/reverse.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/simplify.hpp b/3party/boost/boost/geometry/algorithms/simplify.hpp index e6a75cc773..225321d303 100644 --- a/3party/boost/boost/geometry/algorithms/simplify.hpp +++ b/3party/boost/boost/geometry/algorithms/simplify.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -67,7 +67,7 @@ struct simplify_copy { template static inline void apply(Range const& range, Range& out, - Distance const& max_distance, Strategy const& strategy) + Distance const& , Strategy const& ) { std::copy ( @@ -179,7 +179,7 @@ struct simplify { template static inline void apply(Point const& point, Point& out, - Distance const& max_distance, Strategy const& strategy) + Distance const& , Strategy const& ) { geometry::convert(point, out); } diff --git a/3party/boost/boost/geometry/algorithms/sym_difference.hpp b/3party/boost/boost/geometry/algorithms/sym_difference.hpp index d228f056ad..6394576de4 100644 --- a/3party/boost/boost/geometry/algorithms/sym_difference.hpp +++ b/3party/boost/boost/geometry/algorithms/sym_difference.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -57,10 +57,38 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1, concept::check(); concept::check(); - out = detail::intersection::insert( - geometry1, geometry2, out, strategy); - out = detail::intersection::insert( - geometry2, geometry1, out, strategy); + out = geometry::dispatch::intersection_insert + < + typename geometry::tag::type, + typename geometry::tag::type, + typename geometry::tag::type, + geometry::is_areal::value, + geometry::is_areal::value, + geometry::is_areal::value, + Geometry1, Geometry2, + geometry::detail::overlay::do_reverse::value>::value, + geometry::detail::overlay::do_reverse::value, true>::value, + geometry::detail::overlay::do_reverse::value>::value, + OutputIterator, GeometryOut, + overlay_difference, + Strategy + >::apply(geometry1, geometry2, out, strategy); + out = geometry::dispatch::intersection_insert + < + typename geometry::tag::type, + typename geometry::tag::type, + typename geometry::tag::type, + geometry::is_areal::value, + geometry::is_areal::value, + geometry::is_areal::value, + Geometry2, Geometry1, + geometry::detail::overlay::do_reverse::value>::value, + geometry::detail::overlay::do_reverse::value, true>::value, + geometry::detail::overlay::do_reverse::value>::value, + OutputIterator, GeometryOut, + overlay_difference, + Strategy + >::apply(geometry2, geometry1, out, strategy); return out; } diff --git a/3party/boost/boost/geometry/algorithms/touches.hpp b/3party/boost/boost/geometry/algorithms/touches.hpp new file mode 100644 index 0000000000..7d424af428 --- /dev/null +++ b/3party/boost/boost/geometry/algorithms/touches.hpp @@ -0,0 +1,181 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP +#define BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP + + +#include + +#include +#include +#include +#include +#include +#include + + +namespace boost { namespace geometry +{ + +namespace detail { namespace touches +{ + +template +inline bool ok_for_touch(Turn const& turn) +{ + return turn.both(detail::overlay::operation_union) + || turn.both(detail::overlay::operation_blocked) + || turn.combination(detail::overlay::operation_union, detail::overlay::operation_blocked) + ; +} + +template +inline bool has_only_turns(Turns const& turns) +{ + bool has_touch = false; + typedef typename boost::range_iterator::type iterator_type; + for (iterator_type it = boost::begin(turns); it != boost::end(turns); ++it) + { + if (it->has(detail::overlay::operation_intersection)) + { + return false; + } + + switch(it->method) + { + case detail::overlay::method_crosses: + return false; + case detail::overlay::method_equal: + // Segment spatially equal means: at the right side + // the polygon internally overlaps. So return false. + return false; + case detail::overlay::method_touch: + case detail::overlay::method_touch_interior: + case detail::overlay::method_collinear: + if (ok_for_touch(*it)) + { + has_touch = true; + } + else + { + return false; + } + break; + case detail::overlay::method_none : + case detail::overlay::method_disjoint : + case detail::overlay::method_error : + break; + } + } + return has_touch; +} + +}} + +/*! +\brief \brief_check{has at least one touching point (self-tangency)} +\note This function can be called for one geometry (self-tangency) and + also for two geometries (touch) +\ingroup touches +\tparam Geometry \tparam_geometry +\param geometry \param_geometry +\return \return_check{is self-touching} + +\qbk{distinguish,one geometry} +\qbk{[def __one_parameter__]} +\qbk{[include reference/algorithms/touches.qbk]} +*/ +template +inline bool touches(Geometry const& geometry) +{ + concept::check(); + + typedef detail::overlay::turn_info + < + typename geometry::point_type::type + > turn_info; + + typedef detail::overlay::get_turn_info + < + typename point_type::type, + typename point_type::type, + turn_info, + detail::overlay::assign_null_policy + > policy_type; + + std::deque turns; + detail::self_get_turn_points::no_interrupt_policy policy; + detail::self_get_turn_points::get_turns + < + Geometry, + std::deque, + policy_type, + detail::self_get_turn_points::no_interrupt_policy + >::apply(geometry, turns, policy); + + return detail::touches::has_only_turns(turns); +} + + +/*! +\brief \brief_check2{have at least one touching point (tangent - non overlapping)} +\ingroup touches +\tparam Geometry1 \tparam_geometry +\tparam Geometry2 \tparam_geometry +\param geometry1 \param_geometry +\param geometry2 \param_geometry +\return \return_check2{touch each other} + +\qbk{distinguish,two geometries} +\qbk{[include reference/algorithms/touches.qbk]} + */ +template +inline bool touches(Geometry1 const& geometry1, Geometry2 const& geometry2) +{ + concept::check(); + concept::check(); + + + typedef detail::overlay::turn_info + < + typename geometry::point_type::type + > turn_info; + + typedef detail::overlay::get_turn_info + < + typename point_type::type, + typename point_type::type, + turn_info, + detail::overlay::assign_null_policy + > policy_type; + + std::deque turns; + detail::get_turns::no_interrupt_policy policy; + boost::geometry::get_turns + < + false, false, + detail::overlay::assign_null_policy + >(geometry1, geometry2, turns, policy); + + return detail::touches::has_only_turns(turns) + && ! geometry::detail::disjoint::rings_containing(geometry1, geometry2) + && ! geometry::detail::disjoint::rings_containing(geometry2, geometry1) + ; +} + + + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP diff --git a/3party/boost/boost/geometry/algorithms/transform.hpp b/3party/boost/boost/geometry/algorithms/transform.hpp index eaec16e322..22b45dc77e 100644 --- a/3party/boost/boost/geometry/algorithms/transform.hpp +++ b/3party/boost/boost/geometry/algorithms/transform.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/union.hpp b/3party/boost/boost/geometry/algorithms/union.hpp index 2b73b7d7fa..28d8e5dc0b 100644 --- a/3party/boost/boost/geometry/algorithms/union.hpp +++ b/3party/boost/boost/geometry/algorithms/union.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/algorithms/unique.hpp b/3party/boost/boost/geometry/algorithms/unique.hpp index 63c7357cbc..3bbf479f9b 100644 --- a/3party/boost/boost/geometry/algorithms/unique.hpp +++ b/3party/boost/boost/geometry/algorithms/unique.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/algorithms/within.hpp b/3party/boost/boost/geometry/algorithms/within.hpp index 912ba4bab2..f1f0993d77 100644 --- a/3party/boost/boost/geometry/algorithms/within.hpp +++ b/3party/boost/boost/geometry/algorithms/within.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -17,11 +17,11 @@ #include -#include #include #include #include +#include #include #include @@ -31,10 +31,12 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -48,105 +50,6 @@ namespace detail { namespace within { -/*! - \brief Implementation for boxes - \ingroup boolean_relations - \note Should have strategy for e.g. Wrangel - */ -template -< - typename Point, - typename Box, - typename Strategy, - std::size_t Dimension, - std::size_t DimensionCount -> -struct point_in_box -{ - static inline int apply(Point const& p, Box const& b, Strategy const& s) - { - assert_dimension_equal(); - - if (get(p) <= get(b) - || get(p) >= get(b)) - { - return -1; - } - - return point_in_box - < - Point, - Box, - Strategy, - Dimension + 1, - DimensionCount - >::apply(p, b, s); - } -}; - -template -< - typename Point, - typename Box, - typename Strategy, - std::size_t DimensionCount -> -struct point_in_box -{ - static inline int apply(Point const& , Box const& , Strategy const& ) - { - return 1; - } -}; - - -template -< - typename Box1, - typename Box2, - typename Strategy, - std::size_t Dimension, - std::size_t DimensionCount -> -struct box_in_box -{ - static inline int apply(Box1 const& b1, Box2 const& b2, Strategy const& s) - { - assert_dimension_equal(); - - if (get(b1) <= get(b2) - || get(b1) >= get(b2)) - { - return -1; - } - - return box_in_box - < - Box1, - Box2, - Strategy, - Dimension + 1, - DimensionCount - >::apply(b1, b2, s); - } -}; - -template -< - typename Box1, - typename Box2, - typename Strategy, - std::size_t DimensionCount -> -struct box_in_box -{ - static inline int apply(Box1 const& , Box2 const& , Strategy const&) - { - return 1; - } -}; - - template < typename Point, @@ -157,12 +60,12 @@ template > struct point_in_ring { - BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategy) ); + BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategyPolygonal) ); static inline int apply(Point const& point, Ring const& ring, Strategy const& strategy) { - if (boost::size(ring) + if (int(boost::size(ring)) < core_detail::closure::minimum_ring_size::value) { return -1; @@ -181,13 +84,14 @@ struct point_in_ring iterator_type it = boost::begin(view); iterator_type end = boost::end(view); + bool stop = false; for (iterator_type previous = it++; - it != end; + it != end && ! stop; ++previous, ++it) { if (! strategy.apply(point, *previous, *it, state)) { - return false; + stop = true; } } @@ -196,7 +100,6 @@ struct point_in_ring }; - // Polygon: in exterior ring, and if so, not within interior ring(s) template < @@ -208,7 +111,7 @@ template > struct point_in_polygon { - BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategy) ); + BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategyPolygonal) ); static inline int apply(Point const& point, Polygon const& poly, Strategy const& strategy) @@ -262,113 +165,84 @@ namespace dispatch template < - typename Tag1, - typename Tag2, typename Geometry1, typename Geometry2, - typename Strategy + typename Tag1 = typename tag::type, + typename Tag2 = typename tag::type > -struct within +struct within: not_implemented +{}; + + +template +struct within { - BOOST_MPL_ASSERT_MSG - ( - false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE - , (types) - ); + template + static inline bool apply(Point const& point, Box const& box, Strategy const& strategy) + { + return strategy.apply(point, box); + } +}; + +template +struct within +{ + template + static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy) + { + assert_dimension_equal(); + return strategy.apply(box1, box2); + } }; -template -struct within - : detail::within::point_in_box + +template +struct within +{ + template + static inline bool apply(Point const& point, Ring const& ring, Strategy const& strategy) + { + return detail::within::point_in_ring < Point, - Box, - Strategy, - 0, - dimension::type::value - > -{}; + Ring, + order_as_direction::value>::value, + geometry::closure::value, + Strategy + >::apply(point, ring, strategy) == 1; + } +}; -template -struct within - : detail::within::box_in_box +template +struct within +{ + template + static inline bool apply(Point const& point, Polygon const& polygon, Strategy const& strategy) + { + return detail::within::point_in_polygon < - Box1, - Box2, - Strategy, - 0, - dimension::type::value - > -{}; - - - -template -struct within - : detail::within::point_in_ring - < - Point, - Ring, - order_as_direction::value>::value, - geometry::closure::value, - Strategy - > -{}; - -template -struct within - : detail::within::point_in_polygon - < - Point, - Polygon, - order_as_direction::value>::value, - geometry::closure::value, - Strategy - > -{}; + Point, + Polygon, + order_as_direction::value>::value, + geometry::closure::value, + Strategy + >::apply(point, polygon, strategy) == 1; + } +}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH -#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS -namespace strategy { namespace within -{ - -/// Strategy for box-in-box (not used but has to be present for default strategy) -struct unused_strategy {}; - -namespace services -{ - -// Specialize for box-in-areal (box-in-box). This is meant to do box-in-box -// but will be catched by box-in-any-areal, which has to change later -// (we might introduce another tag which is not "areal", derived by poly/ring/ -// multi_poly, but NOT by box, and use that here. E.g. "polygonal") -// Using cartesian prevents spherical yet from compiling, which is good. -template -struct default_strategy -{ - typedef unused_strategy type; -}; - -} // namespace services - -}} // namespace strategy::within - -#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS - /*! \brief \brief_check12{is completely inside} \ingroup within \details \details_check12{within, is completely inside}. \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry -\param geometry1 \param_geometry -\param geometry2 \param_geometry -\param geometry1 geometry which might be within the second geometry -\param geometry2 geometry which might contain the first geometry +\param geometry1 \param_geometry which might be within the second geometry +\param geometry2 \param_geometry which might contain the first geometry \return true if geometry1 is completely contained within geometry2, else false \note The default strategy is used for within detection @@ -387,28 +261,34 @@ inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2) { concept::check(); concept::check(); + assert_dimension_equal(); typedef typename point_type::type point_type1; typedef typename point_type::type point_type2; typedef typename strategy::within::services::default_strategy < + typename tag::type, + typename tag::type, typename tag::type, typename tag_cast::type, areal_tag>::type, - typename cs_tag::type, - typename cs_tag::type, - point_type1, - point_type2 + typename tag_cast + < + typename cs_tag::type, spherical_tag + >::type, + typename tag_cast + < + typename cs_tag::type, spherical_tag + >::type, + Geometry1, + Geometry2 >::type strategy_type; return dispatch::within < - typename tag::type, - typename tag::type, Geometry1, - Geometry2, - strategy_type - >::apply(geometry1, geometry2, strategy_type()) == 1; + Geometry2 + >::apply(geometry1, geometry2, strategy_type()); } /*! @@ -417,9 +297,7 @@ inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2) \details \details_check12{within, is completely inside}, \brief_strategy. \details_strategy_reasons \tparam Geometry1 \tparam_geometry \tparam Geometry2 \tparam_geometry -\param geometry1 \param_geometry -\param geometry2 \param_geometry -\param geometry1 \param_geometry geometry which might be within the second geometry +\param geometry1 \param_geometry which might be within the second geometry \param geometry2 \param_geometry which might contain the first geometry \param strategy strategy to be used \return true if geometry1 is completely contained within geometry2, @@ -443,21 +321,22 @@ template inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy) { - // Always assume a point-in-polygon strategy here. - // Because for point-in-box, it makes no sense to specify one. - BOOST_CONCEPT_ASSERT( (geometry::concept::WithinStrategy) ); - + concept::within::check + < + typename tag::type, + typename tag::type, + typename tag_cast::type, areal_tag>::type, + Strategy + >(); concept::check(); concept::check(); + assert_dimension_equal(); return dispatch::within < - typename tag::type, - typename tag::type, Geometry1, - Geometry2, - Strategy - >::apply(geometry1, geometry2, strategy) == 1; + Geometry2 + >::apply(geometry1, geometry2, strategy); } }} // namespace boost::geometry diff --git a/3party/boost/boost/geometry/arithmetic/arithmetic.hpp b/3party/boost/boost/geometry/arithmetic/arithmetic.hpp index 395a603b22..6479ecc4a6 100644 --- a/3party/boost/boost/geometry/arithmetic/arithmetic.hpp +++ b/3party/boost/boost/geometry/arithmetic/arithmetic.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/arithmetic/determinant.hpp b/3party/boost/boost/geometry/arithmetic/determinant.hpp new file mode 100644 index 0000000000..db3b867096 --- /dev/null +++ b/3party/boost/boost/geometry/arithmetic/determinant.hpp @@ -0,0 +1,76 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP +#define BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP + + +#include + +#include +#include +#include + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ + +template +class calculate_determinant +{ + template + static inline ReturnType rt(T const& v) + { + return boost::numeric_cast(v); + } + +public : + + static inline ReturnType apply(U const& ux, U const& uy + , V const& vx, V const& vy) + { + return rt(ux) * rt(vy) - rt(uy) * rt(vx); + } +}; + +template +inline ReturnType determinant(U const& ux, U const& uy + , V const& vx, V const& vy) +{ + return calculate_determinant + < + ReturnType, U, V + >::apply(ux, uy, vx, vy); +} + + +template +inline ReturnType determinant(U const& u, V const& v) +{ + BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); + BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); + + return calculate_determinant + < + ReturnType, + typename geometry::coordinate_type::type, + typename geometry::coordinate_type::type + >::apply(get<0>(u), get<1>(u), get<0>(v), get<1>(v)); +} + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP diff --git a/3party/boost/boost/geometry/arithmetic/dot_product.hpp b/3party/boost/boost/geometry/arithmetic/dot_product.hpp index 76fd66aad3..13fe968779 100644 --- a/3party/boost/boost/geometry/arithmetic/dot_product.hpp +++ b/3party/boost/boost/geometry/arithmetic/dot_product.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/access.hpp b/3party/boost/boost/geometry/core/access.hpp index 29f2ded574..cdc8ff9cff 100644 --- a/3party/boost/boost/geometry/core/access.hpp +++ b/3party/boost/boost/geometry/core/access.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -18,12 +18,13 @@ #include #include -#include #include +#include #include #include #include +#include namespace boost { namespace geometry @@ -79,6 +80,52 @@ struct indexed_access {}; } // namespace traits +#ifndef DOXYGEN_NO_DETAIL +namespace detail +{ + +template +< + typename Geometry, + typename CoordinateType, + std::size_t Index, + std::size_t Dimension +> +struct indexed_access_non_pointer +{ + static inline CoordinateType get(Geometry const& geometry) + { + return traits::indexed_access::get(geometry); + } + static inline void set(Geometry& b, CoordinateType const& value) + { + traits::indexed_access::set(b, value); + } +}; + +template +< + typename Geometry, + typename CoordinateType, + std::size_t Index, + std::size_t Dimension +> +struct indexed_access_pointer +{ + static inline CoordinateType get(Geometry const* geometry) + { + return traits::indexed_access::type, Index, Dimension>::get(*geometry); + } + static inline void set(Geometry* geometry, CoordinateType const& value) + { + traits::indexed_access::type, Index, Dimension>::set(*geometry, value); + } +}; + + +} // namespace detail +#endif // DOXYGEN_NO_DETAIL + #ifndef DOXYGEN_NO_DISPATCH namespace core_dispatch @@ -89,7 +136,9 @@ template typename Tag, typename Geometry, typename - CoordinateType, std::size_t Dimension + CoordinateType, + std::size_t Dimension, + typename IsPointer > struct access { @@ -103,7 +152,8 @@ template typename Geometry, typename CoordinateType, std::size_t Index, - std::size_t Dimension + std::size_t Dimension, + typename IsPointer > struct indexed_access { @@ -112,7 +162,7 @@ struct indexed_access }; template -struct access +struct access { static inline CoordinateType get(Point const& point) { @@ -124,6 +174,20 @@ struct access } }; +template +struct access +{ + static inline CoordinateType get(Point const* point) + { + return traits::access::type, Dimension>::get(*point); + } + static inline void set(Point* p, CoordinateType const& value) + { + traits::access::type, Dimension>::set(*p, value); + } +}; + + template < typename Box, @@ -131,17 +195,21 @@ template std::size_t Index, std::size_t Dimension > -struct indexed_access -{ - static inline CoordinateType get(Box const& box) - { - return traits::indexed_access::get(box); - } - static inline void set(Box& b, CoordinateType const& value) - { - traits::indexed_access::set(b, value); - } -}; +struct indexed_access + : detail::indexed_access_non_pointer +{}; + +template +< + typename Box, + typename CoordinateType, + std::size_t Index, + std::size_t Dimension +> +struct indexed_access + : detail::indexed_access_pointer +{}; + template < @@ -150,17 +218,21 @@ template std::size_t Index, std::size_t Dimension > -struct indexed_access -{ - static inline CoordinateType get(Segment const& segment) - { - return traits::indexed_access::get(segment); - } - static inline void set(Segment& segment, CoordinateType const& value) - { - traits::indexed_access::set(segment, value); - } -}; +struct indexed_access + : detail::indexed_access_non_pointer +{}; + + +template +< + typename Segment, + typename CoordinateType, + std::size_t Index, + std::size_t Dimension +> +struct indexed_access + : detail::indexed_access_pointer +{}; } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH @@ -199,14 +271,13 @@ inline typename coordinate_type::type get(Geometry const& geometry { boost::ignore_unused_variable_warning(dummy); - typedef typename boost::remove_const::type ncg_type; - typedef core_dispatch::access < typename tag::type, - ncg_type, - typename coordinate_type::type, - Dimension + typename geometry::util::bare_type::type, + typename coordinate_type::type, + Dimension, + typename boost::is_pointer::type > coord_access_type; return coord_access_type::get(geometry); @@ -234,14 +305,13 @@ inline void set(Geometry& geometry { boost::ignore_unused_variable_warning(dummy); - typedef typename boost::remove_const::type ncg_type; - typedef core_dispatch::access < typename tag::type, - ncg_type, - typename coordinate_type::type, - Dimension + typename geometry::util::bare_type::type, + typename coordinate_type::type, + Dimension, + typename boost::is_pointer::type > coord_access_type; coord_access_type::set(geometry, value); @@ -269,15 +339,14 @@ inline typename coordinate_type::type get(Geometry const& geometry { boost::ignore_unused_variable_warning(dummy); - typedef typename boost::remove_const::type ncg_type; - typedef core_dispatch::indexed_access < typename tag::type, - ncg_type, - typename coordinate_type::type, + typename geometry::util::bare_type::type, + typename coordinate_type::type, Index, - Dimension + Dimension, + typename boost::is_pointer::type > coord_access_type; return coord_access_type::get(geometry); @@ -306,14 +375,14 @@ inline void set(Geometry& geometry { boost::ignore_unused_variable_warning(dummy); - typedef typename boost::remove_const::type ncg_type; - typedef core_dispatch::indexed_access < - typename tag::type, ncg_type, - typename coordinate_type::type, + typename tag::type, + typename geometry::util::bare_type::type, + typename coordinate_type::type, Index, - Dimension + Dimension, + typename boost::is_pointer::type > coord_access_type; coord_access_type::set(geometry, value); diff --git a/3party/boost/boost/geometry/core/closure.hpp b/3party/boost/boost/geometry/core/closure.hpp index c1d3a902cc..aab02e7871 100644 --- a/3party/boost/boost/geometry/core/closure.hpp +++ b/3party/boost/boost/geometry/core/closure.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/coordinate_dimension.hpp b/3party/boost/boost/geometry/core/coordinate_dimension.hpp index f9f9055ba3..2f3c914601 100644 --- a/3party/boost/boost/geometry/core/coordinate_dimension.hpp +++ b/3party/boost/boost/geometry/core/coordinate_dimension.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -20,9 +20,9 @@ #include #include #include -#include #include +#include namespace boost { namespace geometry { @@ -58,7 +58,7 @@ template struct dimension : dimension::type> {}; template -struct dimension : traits::dimension

{}; +struct dimension : traits::dimension::type> {}; } // namespace core_dispatch #endif @@ -75,7 +75,7 @@ struct dimension : core_dispatch::dimension < typename tag::type, - typename boost::remove_const::type + typename geometry::util::bare_type::type > {}; diff --git a/3party/boost/boost/geometry/core/coordinate_system.hpp b/3party/boost/boost/geometry/core/coordinate_system.hpp index 9c0920cd67..01e5ad1dd7 100644 --- a/3party/boost/boost/geometry/core/coordinate_system.hpp +++ b/3party/boost/boost/geometry/core/coordinate_system.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -16,8 +16,9 @@ #include -#include + #include +#include namespace boost { namespace geometry @@ -61,10 +62,13 @@ namespace core_dispatch }; - template - struct coordinate_system + template + struct coordinate_system { - typedef typename traits::coordinate_system

::type type; + typedef typename traits::coordinate_system + < + typename geometry::util::bare_type::type + >::type type; }; @@ -82,11 +86,10 @@ namespace core_dispatch template struct coordinate_system { - typedef typename boost::remove_const::type ncg; typedef typename core_dispatch::coordinate_system < typename tag::type, - ncg + typename geometry::util::bare_type::type >::type type; }; diff --git a/3party/boost/boost/geometry/core/coordinate_type.hpp b/3party/boost/boost/geometry/core/coordinate_type.hpp index ae4300a658..d17f66ab73 100644 --- a/3party/boost/boost/geometry/core/coordinate_type.hpp +++ b/3party/boost/boost/geometry/core/coordinate_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -16,9 +16,10 @@ #include -#include +#include #include +#include #include @@ -63,12 +64,17 @@ struct coordinate_type template struct coordinate_type { - typedef typename traits::coordinate_type::type type; + typedef typename traits::coordinate_type + < + typename geometry::util::bare_type::type + >::type type; }; + } // namespace core_dispatch #endif // DOXYGEN_NO_DISPATCH + /*! \brief \brief_meta{type, coordinate type (int\, float\, double\, etc), \meta_point_type} \tparam Geometry \tparam_geometry @@ -79,11 +85,11 @@ struct coordinate_type template struct coordinate_type { - typedef typename core_dispatch::coordinate_type - < - typename tag::type, - typename boost::remove_const::type - >::type type; + typedef typename core_dispatch::coordinate_type + < + typename tag::type, + typename geometry::util::bare_type::type + >::type type; }; template diff --git a/3party/boost/boost/geometry/core/cs.hpp b/3party/boost/boost/geometry/core/cs.hpp index a53d6e278a..3588ed1a86 100644 --- a/3party/boost/boost/geometry/core/cs.hpp +++ b/3party/boost/boost/geometry/core/cs.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/exception.hpp b/3party/boost/boost/geometry/core/exception.hpp index 4f60e67aa1..97d249e938 100644 --- a/3party/boost/boost/geometry/core/exception.hpp +++ b/3party/boost/boost/geometry/core/exception.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -29,6 +29,32 @@ class exception : public std::exception {}; +/*! +\brief Empty Input Exception +\ingroup core +\details The empty_input_exception is thrown if free functions, e.g. distance, + are called with empty geometries, e.g. a linestring + without points, a polygon without points, an empty multi-geometry. +\qbk{ +[heading See also] +\* [link geometry.reference.algorithms.area the area function] +\* [link geometry.reference.algorithms.distance the distance function] +\* [link geometry.reference.algorithms.length the length function] +} + */ +class empty_input_exception : public geometry::exception +{ +public: + + inline empty_input_exception() {} + + virtual char const* what() const throw() + { + return "Boost.Geometry Empty-Input exception"; + } +}; + + }} // namespace boost::geometry #endif // BOOST_GEOMETRY_CORE_EXCEPTION_HPP diff --git a/3party/boost/boost/geometry/core/exterior_ring.hpp b/3party/boost/boost/geometry/core/exterior_ring.hpp index 894a9000e2..70012c22db 100644 --- a/3party/boost/boost/geometry/core/exterior_ring.hpp +++ b/3party/boost/boost/geometry/core/exterior_ring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/geometry_id.hpp b/3party/boost/boost/geometry/core/geometry_id.hpp index 873017f15f..369c5cfa1a 100644 --- a/3party/boost/boost/geometry/core/geometry_id.hpp +++ b/3party/boost/boost/geometry/core/geometry_id.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/interior_rings.hpp b/3party/boost/boost/geometry/core/interior_rings.hpp index cdb1305d99..10af2ae4ee 100644 --- a/3party/boost/boost/geometry/core/interior_rings.hpp +++ b/3party/boost/boost/geometry/core/interior_rings.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/interior_type.hpp b/3party/boost/boost/geometry/core/interior_type.hpp index 805ca4b7b9..02328372f0 100644 --- a/3party/boost/boost/geometry/core/interior_type.hpp +++ b/3party/boost/boost/geometry/core/interior_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/is_areal.hpp b/3party/boost/boost/geometry/core/is_areal.hpp index 3fe2185ca5..5ddfa753bc 100644 --- a/3party/boost/boost/geometry/core/is_areal.hpp +++ b/3party/boost/boost/geometry/core/is_areal.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/mutable_range.hpp b/3party/boost/boost/geometry/core/mutable_range.hpp index 04bc6c1922..9b53e40577 100644 --- a/3party/boost/boost/geometry/core/mutable_range.hpp +++ b/3party/boost/boost/geometry/core/mutable_range.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/point_order.hpp b/3party/boost/boost/geometry/core/point_order.hpp index fa956e259e..f09086a9d4 100644 --- a/3party/boost/boost/geometry/core/point_order.hpp +++ b/3party/boost/boost/geometry/core/point_order.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/point_type.hpp b/3party/boost/boost/geometry/core/point_type.hpp index 4217afdad5..e148c84a57 100644 --- a/3party/boost/boost/geometry/core/point_type.hpp +++ b/3party/boost/boost/geometry/core/point_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -22,6 +22,7 @@ #include #include #include +#include namespace boost { namespace geometry { @@ -115,11 +116,10 @@ struct point_type template struct point_type { - typedef typename boost::remove_const::type ncg; typedef typename core_dispatch::point_type < typename tag::type, - ncg + typename boost::geometry::util::bare_type::type >::type type; }; diff --git a/3party/boost/boost/geometry/core/radian_access.hpp b/3party/boost/boost/geometry/core/radian_access.hpp index 9aa833704f..bac77d7bc7 100644 --- a/3party/boost/boost/geometry/core/radian_access.hpp +++ b/3party/boost/boost/geometry/core/radian_access.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/reverse_dispatch.hpp b/3party/boost/boost/geometry/core/reverse_dispatch.hpp index 668fb1649c..2e4fb8005f 100644 --- a/3party/boost/boost/geometry/core/reverse_dispatch.hpp +++ b/3party/boost/boost/geometry/core/reverse_dispatch.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/ring_type.hpp b/3party/boost/boost/geometry/core/ring_type.hpp index a53b95c967..9b984faf3c 100644 --- a/3party/boost/boost/geometry/core/ring_type.hpp +++ b/3party/boost/boost/geometry/core/ring_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/tag.hpp b/3party/boost/boost/geometry/core/tag.hpp index b5e44958e1..4c790fdc9e 100644 --- a/3party/boost/boost/geometry/core/tag.hpp +++ b/3party/boost/boost/geometry/core/tag.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -16,9 +16,9 @@ #include -#include #include +#include namespace boost { namespace geometry @@ -47,6 +47,7 @@ struct tag } // namespace traits + /*! \brief \brief_meta{type, tag, \meta_geometry_type} \details With Boost.Geometry, tags are the driving force of the tag dispatching @@ -61,7 +62,7 @@ struct tag { typedef typename traits::tag < - typename boost::remove_const::type + typename geometry::util::bare_type::type >::type type; }; diff --git a/3party/boost/boost/geometry/core/tag_cast.hpp b/3party/boost/boost/geometry/core/tag_cast.hpp index cf1bd0b6e2..47a2e834f1 100644 --- a/3party/boost/boost/geometry/core/tag_cast.hpp +++ b/3party/boost/boost/geometry/core/tag_cast.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/core/tags.hpp b/3party/boost/boost/geometry/core/tags.hpp index f110a079ae..9272858ed2 100644 --- a/3party/boost/boost/geometry/core/tags.hpp +++ b/3party/boost/boost/geometry/core/tags.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -20,18 +20,21 @@ namespace boost { namespace geometry // Tags defining strategies linked to coordinate systems +/// Tag used for casting spherical/geographic coordinate systems +struct spherical_tag {}; + /// Tag indicating Cartesian coordinate system family (cartesian,epsg) struct cartesian_tag {}; /// Tag indicating Spherical polar coordinate system family -struct spherical_polar_tag {}; +struct spherical_polar_tag : spherical_tag {}; /// Tag indicating Spherical equatorial coordinate system family -struct spherical_equatorial_tag {}; +struct spherical_equatorial_tag : spherical_tag {}; /// Tag indicating Geographic coordinate system family (geographic) -struct geographic_tag {}; +struct geographic_tag : spherical_tag {}; @@ -53,6 +56,9 @@ struct linear_tag {}; /// For areal types (polygon, multi_polygon, box, ring) struct areal_tag {}; +// Subset of areal types (polygon, multi_polygon, ring) +struct polygonal_tag : areal_tag {}; + /// For volume types (also box (?), polyhedron) struct volumetric_tag {}; @@ -70,10 +76,10 @@ struct point_tag : single_tag, pointlike_tag {}; struct linestring_tag : single_tag, linear_tag {}; /// OGC Polygon identifying tag -struct polygon_tag : single_tag, areal_tag {}; +struct polygon_tag : single_tag, polygonal_tag {}; /// Convenience (linear) ring identifying tag -struct ring_tag : single_tag, areal_tag {}; +struct ring_tag : single_tag, polygonal_tag {}; /// Convenience 2D or 3D box (mbr / aabb) identifying tag struct box_tag : single_tag, areal_tag {}; diff --git a/3party/boost/boost/geometry/core/topological_dimension.hpp b/3party/boost/boost/geometry/core/topological_dimension.hpp index 05ad405a89..02f1ed341e 100644 --- a/3party/boost/boost/geometry/core/topological_dimension.hpp +++ b/3party/boost/boost/geometry/core/topological_dimension.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/wkt.hpp b/3party/boost/boost/geometry/domains/gis/io/wkt/wkt.hpp deleted file mode 100644 index 420e816ccc..0000000000 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/wkt.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. - -// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library -// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. - -// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WKT_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WKT_HPP - - -#include -#include - -#include -#include - - -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WKT_HPP diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_array.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_array.hpp index bd2b88df24..275ccb5c2b 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_array.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_array.hpp @@ -1,7 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2010 Alfredo Correa -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_fusion.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_fusion.hpp index 3c81672f89..a9aba916a5 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_fusion.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_fusion.hpp @@ -1,7 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2011 Akira Takahashi -// Copyright (c) 2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2011-2012 Akira Takahashi +// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -165,7 +165,7 @@ struct tag fusion_adapt_detail::is_fusion_sequence \ >::type \ > \ - { typedef cs::cartesian type; }; \ + { typedef CoordinateSystem type; }; \ }}} diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon.hpp index 9fe982b046..fed2362b6e 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp index a7c9767d7a..87c3b60650 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp index c5f05e0c55..c9c1bc7b61 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp index bba0c272f2..c2a6a44dba 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp index 8f39c917d0..2aabb5663c 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp index 426608fd5d..5703601e05 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp index a8aabfb71a..93b21fee94 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp index df1ee1d466..825ef8061f 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp index 4bc628cc4b..496dbeaec6 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp index 72cd57f995..990d608460 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp index d80f50f70b..3c8601fe19 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp index c1d7792e16..70189819ca 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp index 28803eef38..5c9cdd6a82 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp index d163f6bb36..beb51fe0b8 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2010-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/geometries/adapted/boost_tuple.hpp b/3party/boost/boost/geometry/geometries/adapted/boost_tuple.hpp index b2e18771f1..58065fe9af 100644 --- a/3party/boost/boost/geometry/geometries/adapted/boost_tuple.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/boost_tuple.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/adapted/c_array.hpp b/3party/boost/boost/geometry/geometries/adapted/c_array.hpp index ebbfbd4699..1b4523d969 100644 --- a/3party/boost/boost/geometry/geometries/adapted/c_array.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/c_array.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp b/3party/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp index 636770df8b..e9200e0fd0 100644 --- a/3party/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp +++ b/3party/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/box.hpp b/3party/boost/boost/geometry/geometries/box.hpp index a42e72c91b..a2e3d4fd79 100644 --- a/3party/boost/boost/geometry/geometries/box.hpp +++ b/3party/boost/boost/geometry/geometries/box.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/concepts/box_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/box_concept.hpp index e0eb80798e..ea0d84cf31 100644 --- a/3party/boost/boost/geometry/geometries/concepts/box_concept.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/box_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/concepts/check.hpp b/3party/boost/boost/geometry/geometries/concepts/check.hpp index cd913e48bf..f8001f0d12 100644 --- a/3party/boost/boost/geometry/geometries/concepts/check.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/check.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -44,7 +44,7 @@ class check BOOST_CONCEPT_ASSERT((Concept )); }; -}} // namespace detail::check +}} // namespace detail::concept_check #endif // DOXYGEN_NO_DETAIL diff --git a/3party/boost/boost/geometry/geometries/concepts/linestring_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/linestring_concept.hpp index 1a538cd4d3..091336fe30 100644 --- a/3party/boost/boost/geometry/geometries/concepts/linestring_concept.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/linestring_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/concepts/point_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/point_concept.hpp index bcf59de98d..1e1b31e61f 100644 --- a/3party/boost/boost/geometry/geometries/concepts/point_concept.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/point_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) // -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/concepts/polygon_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/polygon_concept.hpp index c7c45b9ec0..b478a2274e 100644 --- a/3party/boost/boost/geometry/geometries/concepts/polygon_concept.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/polygon_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/concepts/ring_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/ring_concept.hpp index 4fb37f5151..02a36c96f1 100644 --- a/3party/boost/boost/geometry/geometries/concepts/ring_concept.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/ring_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/concepts/segment_concept.hpp b/3party/boost/boost/geometry/geometries/concepts/segment_concept.hpp index 2616d8c3f9..8d2d300153 100644 --- a/3party/boost/boost/geometry/geometries/concepts/segment_concept.hpp +++ b/3party/boost/boost/geometry/geometries/concepts/segment_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/geometries.hpp b/3party/boost/boost/geometry/geometries/geometries.hpp index 7488c29d8c..cda55c1d28 100644 --- a/3party/boost/boost/geometry/geometries/geometries.hpp +++ b/3party/boost/boost/geometry/geometries/geometries.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/linestring.hpp b/3party/boost/boost/geometry/geometries/linestring.hpp index 177ddf68e7..38bc3d4c49 100644 --- a/3party/boost/boost/geometry/geometries/linestring.hpp +++ b/3party/boost/boost/geometry/geometries/linestring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/point.hpp b/3party/boost/boost/geometry/geometries/point.hpp index 35786e6bf6..b40a47355d 100644 --- a/3party/boost/boost/geometry/geometries/point.hpp +++ b/3party/boost/boost/geometry/geometries/point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/point_xy.hpp b/3party/boost/boost/geometry/geometries/point_xy.hpp index e4185a332a..652930666f 100644 --- a/3party/boost/boost/geometry/geometries/point_xy.hpp +++ b/3party/boost/boost/geometry/geometries/point_xy.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -36,6 +36,9 @@ namespace model { namespace d2 [heading Model of] [link geometry.reference.concepts.concept_point Point Concept] } + +\qbk{[include reference/geometries/point_assign_warning.qbk]} + */ template class point_xy : public model::point diff --git a/3party/boost/boost/geometry/geometries/polygon.hpp b/3party/boost/boost/geometry/geometries/polygon.hpp index 0186aaa59b..ec8d1ec38f 100644 --- a/3party/boost/boost/geometry/geometries/polygon.hpp +++ b/3party/boost/boost/geometry/geometries/polygon.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/register/box.hpp b/3party/boost/boost/geometry/geometries/register/box.hpp index e7fd189543..838c2bb5fc 100644 --- a/3party/boost/boost/geometry/geometries/register/box.hpp +++ b/3party/boost/boost/geometry/geometries/register/box.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/register/linestring.hpp b/3party/boost/boost/geometry/geometries/register/linestring.hpp index 69934aa551..b064398746 100644 --- a/3party/boost/boost/geometry/geometries/register/linestring.hpp +++ b/3party/boost/boost/geometry/geometries/register/linestring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/register/point.hpp b/3party/boost/boost/geometry/geometries/register/point.hpp index 518a88c159..676582576f 100644 --- a/3party/boost/boost/geometry/geometries/register/point.hpp +++ b/3party/boost/boost/geometry/geometries/register/point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/register/ring.hpp b/3party/boost/boost/geometry/geometries/register/ring.hpp index 5ead4c2cc1..fb6cb67200 100644 --- a/3party/boost/boost/geometry/geometries/register/ring.hpp +++ b/3party/boost/boost/geometry/geometries/register/ring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/register/segment.hpp b/3party/boost/boost/geometry/geometries/register/segment.hpp index 0db1d9ebba..6ea88c0918 100644 --- a/3party/boost/boost/geometry/geometries/register/segment.hpp +++ b/3party/boost/boost/geometry/geometries/register/segment.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/ring.hpp b/3party/boost/boost/geometry/geometries/ring.hpp index e577145c2c..998619785a 100644 --- a/3party/boost/boost/geometry/geometries/ring.hpp +++ b/3party/boost/boost/geometry/geometries/ring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometries/segment.hpp b/3party/boost/boost/geometry/geometries/segment.hpp index 1a3a440853..3f47f79ec4 100644 --- a/3party/boost/boost/geometry/geometries/segment.hpp +++ b/3party/boost/boost/geometry/geometries/segment.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/geometry.hpp b/3party/boost/boost/geometry/geometry.hpp index 694659785e..b696b652cf 100644 --- a/3party/boost/boost/geometry/geometry.hpp +++ b/3party/boost/boost/geometry/geometry.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -16,7 +16,6 @@ // Shortcut to include all header files - #include #include #include @@ -41,12 +40,17 @@ #include #include #include +#include +#include #include #include -#include +#include #include +#include #include #include +#include +#include #include #include #include @@ -60,6 +64,7 @@ #include #include #include +#include #include #include #include @@ -76,12 +81,11 @@ #include #include #include -#include +#include #include #include -#include - +#include #endif // BOOST_GEOMETRY_GEOMETRY_HPP diff --git a/3party/boost/boost/geometry/util/write_dsv.hpp b/3party/boost/boost/geometry/io/dsv/write.hpp similarity index 96% rename from 3party/boost/boost/geometry/util/write_dsv.hpp rename to 3party/boost/boost/geometry/io/dsv/write.hpp index 3fef63e778..62929f8073 100644 --- a/3party/boost/boost/geometry/util/write_dsv.hpp +++ b/3party/boost/boost/geometry/io/dsv/write.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,9 +11,8 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_UTIL_WRITE_DSV_HPP -#define BOOST_GEOMETRY_UTIL_WRITE_DSV_HPP - +#ifndef BOOST_GEOMETRY_IO_DSV_WRITE_HPP +#define BOOST_GEOMETRY_IO_DSV_WRITE_HPP #include #include @@ -30,7 +29,6 @@ #include - namespace boost { namespace geometry { @@ -38,7 +36,6 @@ namespace boost { namespace geometry namespace detail { namespace dsv { - struct dsv_settings { std::string coordinate_separator; @@ -99,7 +96,6 @@ struct stream_coordinate } }; - /*! \brief Stream indexed coordinate of a box/segment as \ref DSV */ @@ -136,8 +132,6 @@ struct stream_indexed } }; - - /*! \brief Stream points as \ref DSV */ @@ -201,7 +195,6 @@ private: \note Used in polygon, all multi-geometries */ - template struct dsv_poly { @@ -246,7 +239,6 @@ struct dsv_per_index } }; - template struct dsv_indexed { @@ -268,7 +260,6 @@ struct dsv_indexed }} // namespace detail::dsv #endif // DOXYGEN_NO_DETAIL - #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { @@ -276,19 +267,16 @@ namespace dispatch template struct dsv {}; - template struct dsv : detail::dsv::dsv_point {}; - template struct dsv : detail::dsv::dsv_range {}; - template struct dsv : detail::dsv::dsv_indexed @@ -299,28 +287,23 @@ struct dsv : detail::dsv::dsv_indexed {}; - template struct dsv : detail::dsv::dsv_range {}; - template struct dsv : detail::dsv::dsv_poly {}; - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH - #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace dsv { - // FIXME: This class is not copyable/assignable but it is used as such --mloskot template class dsv_manipulator @@ -356,11 +339,9 @@ private: dsv_settings m_settings; }; - }} // namespace detail::dsv #endif // DOXYGEN_NO_DETAIL - /*! \brief Main DSV-streaming function \details DSV stands for Delimiter Separated Values. Geometries can be streamed @@ -389,8 +370,6 @@ inline detail::dsv::dsv_manipulator dsv(Geometry const& geometry list_open, list_close, list_separator)); } - }} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_UTIL_WRITE_DSV_HPP +#endif // BOOST_GEOMETRY_IO_DSV_WRITE_HPP diff --git a/3party/boost/boost/geometry/domains/gis/io/io.hpp b/3party/boost/boost/geometry/io/io.hpp similarity index 65% rename from 3party/boost/boost/geometry/domains/gis/io/io.hpp rename to 3party/boost/boost/geometry/io/io.hpp index 39703e3c3e..9340060776 100644 --- a/3party/boost/boost/geometry/domains/gis/io/io.hpp +++ b/3party/boost/boost/geometry/io/io.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,27 +11,22 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_HPP +#ifndef BOOST_GEOMETRY_IO_HPP +#define BOOST_GEOMETRY_IO_HPP - -#include -#include - -#include -#include +#include +#include namespace boost { namespace geometry { struct format_wkt {}; -struct format_wkb {}; -struct format_dsv {}; +struct format_wkb {}; // TODO +struct format_dsv {}; // TODO #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { - template struct read { @@ -46,12 +41,9 @@ struct read } }; - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH - - template inline void read(Geometry& geometry, std::string const& wkt) { @@ -59,7 +51,8 @@ inline void read(Geometry& geometry, std::string const& wkt) dispatch::read::apply(geometry, wkt); } +// TODO: wriite + }} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_HPP +#endif // BOOST_GEOMETRY_IO_HPP diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/detail/wkt.hpp b/3party/boost/boost/geometry/io/wkt/detail/prefix.hpp similarity index 67% rename from 3party/boost/boost/geometry/domains/gis/io/wkt/detail/wkt.hpp rename to 3party/boost/boost/geometry/io/wkt/detail/prefix.hpp index 576a1688fb..45e43b88d4 100644 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/detail/wkt.hpp +++ b/3party/boost/boost/geometry/io/wkt/detail/prefix.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,16 +11,15 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_HPP - +#ifndef BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP +#define BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL -namespace detail { namespace wkt { - +namespace detail { namespace wkt +{ struct prefix_point { @@ -37,13 +36,10 @@ struct prefix_linestring static inline const char* apply() { return "LINESTRING"; } }; - - }} // namespace wkt::impl #endif }} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_HPP +#endif // BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/detail/wkt_multi.hpp b/3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp similarity index 84% rename from 3party/boost/boost/geometry/domains/gis/io/wkt/detail/wkt_multi.hpp rename to 3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp index abfbd28534..0e5abbca81 100644 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/detail/wkt_multi.hpp +++ b/3party/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -15,7 +15,7 @@ #define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP -#include +#include #include @@ -23,7 +23,8 @@ namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL -namespace detail { namespace wkt { +namespace detail { namespace wkt +{ struct prefix_null { diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/read_wkt.hpp b/3party/boost/boost/geometry/io/wkt/read.hpp similarity index 97% rename from 3party/boost/boost/geometry/domains/gis/io/wkt/read_wkt.hpp rename to 3party/boost/boost/geometry/io/wkt/read.hpp index bc534a2113..e926939d51 100644 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/read_wkt.hpp +++ b/3party/boost/boost/geometry/io/wkt/read.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,8 +11,8 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_READ_WKT_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_READ_WKT_HPP +#ifndef BOOST_GEOMETRY_IO_WKT_READ_HPP +#define BOOST_GEOMETRY_IO_WKT_READ_HPP #include @@ -23,10 +23,8 @@ #include #include - #include - #include #include #include @@ -43,13 +41,11 @@ #include -#include +#include namespace boost { namespace geometry { - - /*! \brief Exception showing things wrong with WKT parsing \ingroup wkt @@ -92,10 +88,10 @@ private : }; - #ifndef DOXYGEN_NO_DETAIL // (wkt: Well Known Text, defined by OGC for all geometries and implemented by e.g. databases (MySQL, PostGIS)) -namespace detail { namespace wkt { +namespace detail { namespace wkt +{ typedef boost::tokenizer > tokenizer; @@ -652,7 +648,6 @@ struct read_wkt } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH - /*! \brief Parses OGC Well-Known Text (\ref WKT) into a geometry (any geometry) \ingroup wkt @@ -688,5 +683,4 @@ inline void read_wkt(std::string const& wkt, Geometry& geometry) }} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_READ_WKT_HPP +#endif // BOOST_GEOMETRY_IO_WKT_READ_HPP diff --git a/3party/boost/boost/geometry/io/wkt/stream.hpp b/3party/boost/boost/geometry/io/wkt/stream.hpp new file mode 100644 index 0000000000..86e49fdaf1 --- /dev/null +++ b/3party/boost/boost/geometry/io/wkt/stream.hpp @@ -0,0 +1,40 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_IO_WKT_STREAM_HPP +#define BOOST_GEOMETRY_IO_WKT_STREAM_HPP + +#include + +// This short file contains only one manipulator, streaming as WKT +// Don't include this in any standard-included header file. + +// Don't use namespace boost::geometry, to enable the library to stream custom +// geometries which are living outside the namespace boost::geometry + +/*! +\brief Streams a geometry as Well-Known Text +\ingroup wkt +*/ +template +inline std::basic_ostream& operator<< + ( + std::basic_ostream &os, + Geometry const& geom + ) +{ + os << boost::geometry::wkt(geom); + return os; +} + +#endif // BOOST_GEOMETRY_IO_WKT_STREAM_HPP diff --git a/3party/boost/boost/geometry/io/wkt/wkt.hpp b/3party/boost/boost/geometry/io/wkt/wkt.hpp new file mode 100644 index 0000000000..28bd1e42aa --- /dev/null +++ b/3party/boost/boost/geometry/io/wkt/wkt.hpp @@ -0,0 +1,25 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_IO_WKT_WKT_HPP +#define BOOST_GEOMETRY_IO_WKT_WKT_HPP + +#include +#include + +// BSG 2011-02-03 +// We don't include stream.hpp by default. That tries to stream anything not known +// by default (such as ttmath) and reports errors. +// Users can include stream.hpp themselves (if they want to) + +#endif // BOOST_GEOMETRY_IO_WKT_WKT_HPP diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/write_wkt.hpp b/3party/boost/boost/geometry/io/wkt/write.hpp similarity index 95% rename from 3party/boost/boost/geometry/domains/gis/io/wkt/write_wkt.hpp rename to 3party/boost/boost/geometry/io/wkt/write.hpp index 7bf52c13c6..a3e3173d05 100644 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/write_wkt.hpp +++ b/3party/boost/boost/geometry/io/wkt/write.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,8 +11,8 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WRITE_WKT_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WRITE_WKT_HPP +#ifndef BOOST_GEOMETRY_IO_WKT_WRITE_HPP +#define BOOST_GEOMETRY_IO_WKT_WRITE_HPP #include #include @@ -22,7 +22,6 @@ #include #include - #include #include #include @@ -32,8 +31,7 @@ #include #include -#include - +#include namespace boost { namespace geometry { @@ -87,9 +85,6 @@ struct double_closing_parenthesis static inline const char* apply() { return "))"; } }; - - - /*! \brief Stream points as \ref WKT */ @@ -147,9 +142,6 @@ private: \brief Stream sequence of points as WKT-part, e.g. (1 2),(3 4) \note Used in polygon, all multi-geometries */ - - - template struct wkt_sequence : wkt_range @@ -160,7 +152,6 @@ struct wkt_sequence > {}; - template struct wkt_poly { @@ -186,7 +177,6 @@ struct wkt_poly } }; - template struct wkt_box { @@ -246,7 +236,6 @@ struct wkt_segment }} // namespace detail::wkt #endif // DOXYGEN_NO_DETAIL - #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { @@ -261,7 +250,6 @@ struct wkt ); }; - template struct wkt : detail::wkt::wkt_point @@ -271,7 +259,6 @@ struct wkt > {}; - template struct wkt : detail::wkt::wkt_range @@ -282,7 +269,6 @@ struct wkt > {}; - /*! \brief Specialization to stream a box as WKT \details A "box" does not exist in WKT. @@ -298,7 +284,6 @@ struct wkt : detail::wkt::wkt_segment {}; - /*! \brief Specialization to stream a ring as WKT \details A ring or "linear_ring" does not exist in WKT. @@ -315,7 +300,6 @@ struct wkt > {}; - /*! \brief Specialization to stream polygon as WKT */ @@ -328,11 +312,9 @@ struct wkt > {}; - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH - /*! \brief Generic geometry template manipulator class, takes corresponding output class from traits class \ingroup wkt @@ -391,4 +373,4 @@ inline wkt_manipulator wkt(Geometry const& geometry) }} // namespace boost::geometry -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WRITE_WKT_HPP +#endif // BOOST_GEOMETRY_IO_WKT_WRITE_HPP diff --git a/3party/boost/boost/geometry/iterators/base.hpp b/3party/boost/boost/geometry/iterators/base.hpp index fb18f14363..1e824654e6 100644 --- a/3party/boost/boost/geometry/iterators/base.hpp +++ b/3party/boost/boost/geometry/iterators/base.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/iterators/closing_iterator.hpp b/3party/boost/boost/geometry/iterators/closing_iterator.hpp index 501ff8ab43..7cd8fa0150 100644 --- a/3party/boost/boost/geometry/iterators/closing_iterator.hpp +++ b/3party/boost/boost/geometry/iterators/closing_iterator.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp b/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp index cd89f06d88..566669e26d 100644 --- a/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp +++ b/3party/boost/boost/geometry/iterators/ever_circling_iterator.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -95,67 +95,115 @@ private: bool m_skip_first; }; - - template -class ever_circling_range_iterator - : public boost::iterator_adaptor - < - ever_circling_range_iterator, - typename boost::range_iterator::type - > +struct ever_circling_range_iterator + : public boost::iterator_facade + < + ever_circling_range_iterator, + typename boost::range_value::type const, + boost::random_access_traversal_tag + > { -public : - typedef typename boost::range_iterator::type iterator_type; + /// Constructor including the range it is based on + explicit inline ever_circling_range_iterator(Range& range) + : m_range(&range) + , m_iterator(boost::begin(range)) + , m_size(boost::size(range)) + , m_index(0) + {} - explicit inline ever_circling_range_iterator(Range& range, - bool skip_first = false) - : m_range(range) - , m_skip_first(skip_first) + /// Default constructor + explicit inline ever_circling_range_iterator() + : m_range(NULL) + , m_size(0) + , m_index(0) + {} + + inline ever_circling_range_iterator& operator=(ever_circling_range_iterator const& source) { - this->base_reference() = boost::begin(m_range); + m_range = source.m_range; + m_iterator = source.m_iterator; + m_size = source.m_size; + m_index = source.m_index; + return *this; } - explicit inline ever_circling_range_iterator(Range& range, iterator_type start, - bool skip_first = false) - : m_range(range) - , m_skip_first(skip_first) - { - this->base_reference() = start; - } - - /// Navigate to a certain position, should be in [start .. end], if at end - /// it will circle again. - inline void moveto(iterator_type it) - { - this->base_reference() = it; - check_end(); - } + typedef std::ptrdiff_t difference_type; private: - friend class boost::iterator_core_access; - inline void increment(bool possibly_skip = true) + inline typename boost::range_value::type const& dereference() const { - (this->base_reference())++; - check_end(possibly_skip); + return *m_iterator; } - inline void check_end(bool possibly_skip = true) + inline difference_type distance_to(ever_circling_range_iterator const& other) const { - if (this->base_reference() == boost::end(m_range)) + return other.m_index - this->m_index; + } + + inline bool equal(ever_circling_range_iterator const& other) const + { + return this->m_range == other.m_range + && this->m_index == other.m_index; + } + + inline void increment() + { + ++m_index; + if (m_index >= 0 && m_index < m_size) { - this->base_reference() = boost::begin(m_range); - if (m_skip_first && possibly_skip) - { - increment(false); - } + ++m_iterator; + } + else + { + update_iterator(); } } - Range& m_range; - bool m_skip_first; + inline void decrement() + { + --m_index; + if (m_index >= 0 && m_index < m_size) + { + --m_iterator; + } + else + { + update_iterator(); + } + } + + inline void advance(difference_type n) + { + if (m_index >= 0 && m_index < m_size + && m_index + n >= 0 && m_index + n < m_size) + { + m_index += n; + m_iterator += n; + } + else + { + m_index += n; + update_iterator(); + } + } + + inline void update_iterator() + { + while (m_index < 0) + { + m_index += m_size; + } + m_index = m_index % m_size; + this->m_iterator = boost::begin(*m_range) + m_index; + } + + Range* m_range; + typename boost::range_iterator::type m_iterator; + difference_type m_size; + difference_type m_index; }; diff --git a/3party/boost/boost/geometry/multi/algorithms/append.hpp b/3party/boost/boost/geometry/multi/algorithms/append.hpp new file mode 100644 index 0000000000..e72be036ae --- /dev/null +++ b/3party/boost/boost/geometry/multi/algorithms/append.hpp @@ -0,0 +1,52 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP +#define BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP + +#include + +#include + + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch +{ + +namespace splitted_dispatch +{ + +template +struct append_point + : detail::append::append_point +{}; + +template +struct append_range + : detail::append::append_range +{}; + +} + + +} // namespace dispatch +#endif // DOXYGEN_NO_DISPATCH + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP diff --git a/3party/boost/boost/geometry/multi/algorithms/area.hpp b/3party/boost/boost/geometry/multi/algorithms/area.hpp index c0f6870f9d..6695686358 100644 --- a/3party/boost/boost/geometry/multi/algorithms/area.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/area.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -20,6 +20,7 @@ #include #include #include +#include namespace boost { namespace geometry @@ -30,7 +31,7 @@ namespace boost { namespace geometry namespace dispatch { template -struct area +struct area : detail::multi_sum < typename Strategy::return_type, @@ -38,9 +39,9 @@ struct area Strategy, area < - polygon_tag, typename boost::range_value::type, - Strategy + Strategy, + polygon_tag > > {}; diff --git a/3party/boost/boost/geometry/multi/algorithms/centroid.hpp b/3party/boost/boost/geometry/multi/algorithms/centroid.hpp index e69850fc6f..855ed22fda 100644 --- a/3party/boost/boost/geometry/multi/algorithms/centroid.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/centroid.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -18,9 +18,7 @@ #include #include -#include #include -#include #include @@ -73,12 +71,14 @@ struct centroid_multi static inline void apply(Multi const& multi, Point& centroid, Strategy const& strategy) { +#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW) // If there is nothing in any of the ranges, it is not possible // to calculate the centroid if (geometry::num_points(multi) == 0) { throw centroid_exception(); } +#endif typename Strategy::state_type state; diff --git a/3party/boost/boost/geometry/multi/algorithms/clear.hpp b/3party/boost/boost/geometry/multi/algorithms/clear.hpp index 808da7825f..0b14b6ce9c 100644 --- a/3party/boost/boost/geometry/multi/algorithms/clear.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/clear.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -28,7 +28,7 @@ namespace dispatch { template -struct clear +struct clear : detail::clear::collection_clear {}; diff --git a/3party/boost/boost/geometry/multi/algorithms/convert.hpp b/3party/boost/boost/geometry/multi/algorithms/convert.hpp new file mode 100644 index 0000000000..4745791135 --- /dev/null +++ b/3party/boost/boost/geometry/multi/algorithms/convert.hpp @@ -0,0 +1,128 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP +#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP + + +#include + +#include + +#include + + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace conversion +{ + +template +struct single_to_multi: private Policy +{ + static inline void apply(Single const& single, Multi& multi) + { + traits::resize::apply(multi, 1); + Policy::apply(single, *boost::begin(multi)); + } +}; + + + +template +struct multi_to_multi: private Policy +{ + static inline void apply(Multi1 const& multi1, Multi2& multi2) + { + traits::resize::apply(multi2, boost::size(multi1)); + + typename boost::range_iterator::type it1 + = boost::begin(multi1); + typename boost::range_iterator::type it2 + = boost::begin(multi2); + + for (; it1 != boost::end(multi1); ++it1, ++it2) + { + Policy::apply(*it1, *it2); + } + } +}; + + +}} // namespace detail::convert +#endif // DOXYGEN_NO_DETAIL + + +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch +{ + +// Dispatch for multi <-> multi, specifying their single-version as policy. +// Note that, even if the multi-types are mutually different, their single +// version types might be the same and therefore we call boost::is_same again + +template +struct convert + : detail::conversion::multi_to_multi + < + Multi1, + Multi2, + convert + < + typename boost::range_value::type, + typename boost::range_value::type, + typename single_tag_of + < + typename tag::type + >::type, + typename single_tag_of + < + typename tag::type + >::type, + DimensionCount + > + > +{}; + +template +struct convert + : detail::conversion::single_to_multi + < + Single, + Multi, + convert + < + Single, + typename boost::range_value::type, + typename tag::type, + typename single_tag_of + < + typename tag::type + >::type, + DimensionCount, + false + > + > +{}; + + +} // namespace dispatch +#endif // DOXYGEN_NO_DISPATCH + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP diff --git a/3party/boost/boost/geometry/multi/algorithms/correct.hpp b/3party/boost/boost/geometry/multi/algorithms/correct.hpp index 6f351454ae..d0c3e10753 100644 --- a/3party/boost/boost/geometry/multi/algorithms/correct.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/correct.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -32,19 +32,19 @@ namespace dispatch { template -struct correct +struct correct : detail::correct::correct_nop {}; template -struct correct +struct correct : detail::correct::correct_nop {}; template -struct correct +struct correct : detail::multi_modify < Geometry, diff --git a/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp b/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp new file mode 100644 index 0000000000..ba398c0f42 --- /dev/null +++ b/3party/boost/boost/geometry/multi/algorithms/covered_by.hpp @@ -0,0 +1,70 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP +#define BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP + + +#include +#include +#include +#include +#include + + +namespace boost { namespace geometry +{ + + +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch +{ + +template +struct covered_by +{ + template + static inline bool apply(Point const& point, + MultiPolygon const& multi_polygon, Strategy const& strategy) + { + return detail::within::geometry_multi_within_code + < + Point, + MultiPolygon, + Strategy, + detail::within::point_in_polygon + < + Point, + typename boost::range_value::type, + order_as_direction + < + geometry::point_order::value + >::value, + geometry::closure::value, + Strategy + > + >::apply(point, multi_polygon, strategy) >= 0; + } +}; + + +} // namespace dispatch + + +#endif // DOXYGEN_NO_DISPATCH + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp index d0abcd7b53..08ab14bd69 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp index c87f724f91..b52efd2512 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/modify.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp index f684da4b98..4ae79058da 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp index a98ae2cbf7..a47685ceb1 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp index ecbe028dac..72be5ddbf4 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -42,7 +42,7 @@ struct copy_segment_point_multi BOOST_ASSERT ( seg_id.multi_index >= 0 - && seg_id.multi_index < boost::size(multi) + && seg_id.multi_index < int(boost::size(multi)) ); // Call the single-version diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp index 72b843f1e4..f474b12fdf 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -44,7 +44,7 @@ struct copy_segments_multi BOOST_ASSERT ( seg_id.multi_index >= 0 - && seg_id.multi_index < boost::size(multi_geometry) + && seg_id.multi_index < int(boost::size(multi_geometry)) ); // Call the single-version diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp index 295f9e52aa..e23acf99b3 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -35,7 +35,7 @@ struct get_ring BOOST_ASSERT ( id.multi_index >= 0 - && id.multi_index < boost::size(multi_polygon) + && id.multi_index < int(boost::size(multi_polygon)) ); return get_ring::apply(id, multi_polygon[id.multi_index]); diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp index 5e8efd0477..1ee03cc4d0 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp index 6e150cf585..4636187880 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/select_rings.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -30,7 +30,8 @@ namespace dispatch struct select_rings { template - static inline void apply(Multi const& multi, Geometry const& geometry, ring_identifier id, Map& map) + static inline void apply(Multi const& multi, Geometry const& geometry, + ring_identifier id, Map& map, bool midpoint) { typedef typename boost::range_iterator < @@ -43,7 +44,7 @@ namespace dispatch for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it) { id.ring_index = -1; - per_polygon::apply(*it, geometry, id, map); + per_polygon::apply(*it, geometry, id, map, midpoint); id.multi_index++; } } diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp index 532441bf82..57d5ff92ca 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp index bef070550a..ac462ed4c5 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -31,13 +31,13 @@ namespace detail { namespace point_on_border template < - typename MultiGeometry, typename Point, + typename MultiGeometry, typename Policy > struct point_on_multi { - static inline bool apply(MultiGeometry const& multi, Point& point) + static inline bool apply(Point& point, MultiGeometry const& multi, bool midpoint) { // Take a point on the first multi-geometry // (i.e. the first that is not empty) @@ -48,7 +48,7 @@ struct point_on_multi it != boost::end(multi); ++it) { - if (Policy::apply(*it, point)) + if (Policy::apply(point, *it, midpoint)) { return true; } @@ -69,16 +69,16 @@ namespace dispatch { -template -struct point_on_border +template +struct point_on_border : detail::point_on_border::point_on_multi < - Multi, Point, + Multi, detail::point_on_border::point_on_polygon < - typename boost::range_value::type, - Point + Point, + typename boost::range_value::type > > {}; diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp index 15a1da73d2..28a4805ed1 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -46,7 +46,7 @@ struct full_section_multi BOOST_ASSERT ( section.ring_id.multi_index >= 0 - && section.ring_id.multi_index < boost::size(multi) + && section.ring_id.multi_index < int(boost::size(multi)) ); return Policy::apply(multi[section.ring_id.multi_index], section); diff --git a/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp b/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp index facbe117fd..16f70c193d 100644 --- a/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/distance.hpp b/3party/boost/boost/geometry/multi/algorithms/distance.hpp index e59ab63ce8..8acb3f9006 100644 --- a/3party/boost/boost/geometry/multi/algorithms/distance.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/distance.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -23,6 +23,7 @@ #include #include +#include #include @@ -36,6 +37,12 @@ namespace detail { namespace distance template struct distance_single_to_multi + : private dispatch::distance + < + Geometry, + typename range_value::type, + Strategy + > { typedef typename strategy::distance::services::return_type::type return_type; @@ -43,19 +50,24 @@ struct distance_single_to_multi MultiGeometry const& multi, Strategy const& strategy) { + return_type mindist = return_type(); bool first = true; - return_type mindist; for(typename range_iterator::type it = boost::begin(multi); it != boost::end(multi); - ++it) + ++it, first = false) { - return_type dist = geometry::distance(geometry, *it); + return_type dist = dispatch::distance + < + Geometry, + typename range_value::type, + Strategy + >::apply(geometry, *it, strategy); + if (first || dist < mindist) { mindist = dist; } - first = false; } return mindist; @@ -64,18 +76,24 @@ struct distance_single_to_multi template struct distance_multi_to_multi + : private distance_single_to_multi + < + typename range_value::type, + Multi2, + Strategy + > { typedef typename strategy::distance::services::return_type::type return_type; static inline return_type apply(Multi1 const& multi1, Multi2 const& multi2, Strategy const& strategy) { + return_type mindist = return_type(); bool first = true; - return_type mindist; for(typename range_iterator::type it = boost::begin(multi1); it != boost::end(multi1); - ++it) + ++it, first = false) { return_type dist = distance_single_to_multi < @@ -87,7 +105,6 @@ struct distance_multi_to_multi { mindist = dist; } - first = false; } return mindist; @@ -105,17 +122,27 @@ namespace dispatch template < - typename SingleGeometryTag, typename G1, typename G2, - typename Strategy + typename Strategy, + typename SingleGeometryTag +> +struct distance +< + G1, G2, Strategy, + SingleGeometryTag, multi_tag, strategy_tag_distance_point_point, + false > -struct distance : detail::distance::distance_single_to_multi {}; template -struct distance +struct distance +< + G1, G2, Strategy, + multi_tag, multi_tag, strategy_tag_distance_point_point, + false +> : detail::distance::distance_multi_to_multi {}; diff --git a/3party/boost/boost/geometry/multi/algorithms/envelope.hpp b/3party/boost/boost/geometry/multi/algorithms/envelope.hpp index f5b54e1a76..1876b5f91e 100644 --- a/3party/boost/boost/geometry/multi/algorithms/envelope.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/envelope.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/equals.hpp b/3party/boost/boost/geometry/multi/algorithms/equals.hpp index e6f76a13da..a307ebae8b 100644 --- a/3party/boost/boost/geometry/multi/algorithms/equals.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/equals.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/for_each.hpp b/3party/boost/boost/geometry/multi/algorithms/for_each.hpp index 8b6971a9c0..1be38e0a7e 100644 --- a/3party/boost/boost/geometry/multi/algorithms/for_each.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/for_each.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/intersection.hpp b/3party/boost/boost/geometry/multi/algorithms/intersection.hpp index 870a1b2ab4..31e74a79ba 100644 --- a/3party/boost/boost/geometry/multi/algorithms/intersection.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/intersection.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -109,6 +110,69 @@ struct intersection_linestring_multi_linestring_point }; +// This loop is quite similar to the loop above, but beacuse the iterator +// is second (above) or first (below) argument, it is not trivial to merge them. +template +< + typename MultiLinestring, typename Areal, + bool ReverseAreal, + typename OutputIterator, typename LineStringOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_of_multi_linestring_with_areal +{ + static inline OutputIterator apply(MultiLinestring const& ml, Areal const& areal, + OutputIterator out, + Strategy const& strategy) + { + for (typename boost::range_iterator + < + MultiLinestring const + >::type it = boost::begin(ml); + it != boost::end(ml); + ++it) + { + out = intersection_of_linestring_with_areal + < + typename boost::range_value::type, + Areal, ReverseAreal, + OutputIterator, LineStringOut, OverlayType, Strategy + >::apply(*it, areal, out, strategy); + } + + return out; + + } +}; + +// This one calls the one above with reversed arguments +template +< + typename Areal, typename MultiLinestring, + bool ReverseAreal, + typename OutputIterator, typename LineStringOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_of_areal_with_multi_linestring +{ + static inline OutputIterator apply(Areal const& areal, MultiLinestring const& ml, + OutputIterator out, + Strategy const& strategy) + { + return intersection_of_multi_linestring_with_areal + < + MultiLinestring, Areal, ReverseAreal, + OutputIterator, LineStringOut, + OverlayType, + Strategy + >::apply(ml, areal, out, strategy); + } +}; + + + template < typename MultiLinestring, typename Box, @@ -118,7 +182,7 @@ template struct clip_multi_linestring { static inline OutputIterator apply(MultiLinestring const& multi_linestring, - Box const& box, OutputIterator out, Strategy const& strategy) + Box const& box, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; @@ -222,6 +286,148 @@ struct intersection_insert {}; +template +< + typename Linestring, typename MultiPolygon, + bool ReverseLinestring, bool ReverseMultiPolygon, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + linestring_tag, multi_polygon_tag, linestring_tag, + false, true, false, + Linestring, MultiPolygon, + ReverseLinestring, ReverseMultiPolygon, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_linestring_with_areal + < + Linestring, MultiPolygon, + ReverseMultiPolygon, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + + +// Derives from areal/mls because runtime arguments are in that order. +// areal/mls reverses it itself to mls/areal +template +< + typename Polygon, typename MultiLinestring, + bool ReversePolygon, bool ReverseMultiLinestring, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + polygon_tag, multi_linestring_tag, linestring_tag, + true, false, false, + Polygon, MultiLinestring, + ReversePolygon, ReverseMultiLinestring, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_areal_with_multi_linestring + < + Polygon, MultiLinestring, + ReversePolygon, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + + +template +< + typename MultiLinestring, typename Ring, + bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + multi_linestring_tag, ring_tag, linestring_tag, + false, true, false, + MultiLinestring, Ring, + ReverseMultiLinestring, ReverseRing, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_multi_linestring_with_areal + < + MultiLinestring, Ring, + ReverseRing, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + +template +< + typename MultiLinestring, typename Polygon, + bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + multi_linestring_tag, polygon_tag, linestring_tag, + false, true, false, + MultiLinestring, Polygon, + ReverseMultiLinestring, ReverseRing, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_multi_linestring_with_areal + < + MultiLinestring, Polygon, + ReverseRing, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + + + +template +< + typename MultiLinestring, typename MultiPolygon, + bool ReverseMultiLinestring, bool ReverseMultiPolygon, bool ReverseOut, + typename OutputIterator, typename GeometryOut, + overlay_type OverlayType, + typename Strategy +> +struct intersection_insert + < + multi_linestring_tag, multi_polygon_tag, linestring_tag, + false, true, false, + MultiLinestring, MultiPolygon, + ReverseMultiLinestring, ReverseMultiPolygon, ReverseOut, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > : detail::intersection::intersection_of_multi_linestring_with_areal + < + MultiLinestring, MultiPolygon, + ReverseMultiPolygon, + OutputIterator, GeometryOut, + OverlayType, + Strategy + > +{}; + + } // namespace dispatch #endif diff --git a/3party/boost/boost/geometry/multi/algorithms/length.hpp b/3party/boost/boost/geometry/multi/algorithms/length.hpp index ee1f68cdbd..51ff9ef3c2 100644 --- a/3party/boost/boost/geometry/multi/algorithms/length.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/length.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -20,6 +20,7 @@ #include #include #include +#include namespace boost { namespace geometry diff --git a/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp b/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp index 795277fee9..213339a18c 100644 --- a/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/num_geometries.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp b/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp index 0b1c2066d6..87b0bdea91 100644 --- a/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/num_points.hpp b/3party/boost/boost/geometry/multi/algorithms/num_points.hpp index 943e764a41..5ea53854eb 100644 --- a/3party/boost/boost/geometry/multi/algorithms/num_points.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/num_points.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp b/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp index 505f388eb1..147f6fcc30 100644 --- a/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/perimeter.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -22,6 +22,7 @@ #include #include +#include namespace boost { namespace geometry { diff --git a/3party/boost/boost/geometry/multi/algorithms/reverse.hpp b/3party/boost/boost/geometry/multi/algorithms/reverse.hpp index 402454ceae..f8a9442ac0 100644 --- a/3party/boost/boost/geometry/multi/algorithms/reverse.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/reverse.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/simplify.hpp b/3party/boost/boost/geometry/multi/algorithms/simplify.hpp index d27bc75d39..dc3c7b5937 100644 --- a/3party/boost/boost/geometry/multi/algorithms/simplify.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/simplify.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/transform.hpp b/3party/boost/boost/geometry/multi/algorithms/transform.hpp index db758d9ae0..09926778f9 100644 --- a/3party/boost/boost/geometry/multi/algorithms/transform.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/transform.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/unique.hpp b/3party/boost/boost/geometry/multi/algorithms/unique.hpp index 051061aa51..5067e71f3f 100644 --- a/3party/boost/boost/geometry/multi/algorithms/unique.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/unique.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/algorithms/within.hpp b/3party/boost/boost/geometry/multi/algorithms/within.hpp index e9fcbb65ab..a3ec7514b7 100644 --- a/3party/boost/boost/geometry/multi/algorithms/within.hpp +++ b/3party/boost/boost/geometry/multi/algorithms/within.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -37,7 +37,7 @@ template typename Strategy, typename Policy > -struct geometry_in_multi +struct geometry_multi_within_code { static inline int apply(Geometry const& geometry, MultiGeometry const& multi, @@ -48,7 +48,8 @@ struct geometry_in_multi it != boost::end(multi); ++it) { - // Geometry within a multi: true if within one of them + // Geometry coding on multi: 1 (within) if within one of them; + // 0 (touch) if on border of one of them int const code = Policy::apply(geometry, *it, strategy); if (code != -1) { @@ -68,23 +69,32 @@ struct geometry_in_multi namespace dispatch { -template -struct within - : detail::within::geometry_in_multi - < - Point, - MultiPolygon, - Strategy, - detail::within::point_in_polygon - < - Point, - typename boost::range_value::type, - order_as_direction::value>::value, - geometry::closure::value, - Strategy - > - > -{}; +template +struct within +{ + template + static inline bool apply(Point const& point, + MultiPolygon const& multi_polygon, Strategy const& strategy) + { + return detail::within::geometry_multi_within_code + < + Point, + MultiPolygon, + Strategy, + detail::within::point_in_polygon + < + Point, + typename boost::range_value::type, + order_as_direction + < + geometry::point_order::value + >::value, + geometry::closure::value, + Strategy + > + >::apply(point, multi_polygon, strategy) == 1; + } +}; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH diff --git a/3party/boost/boost/geometry/multi/core/closure.hpp b/3party/boost/boost/geometry/multi/core/closure.hpp index 8d403309de..3964db256c 100644 --- a/3party/boost/boost/geometry/multi/core/closure.hpp +++ b/3party/boost/boost/geometry/multi/core/closure.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/geometry_id.hpp b/3party/boost/boost/geometry/multi/core/geometry_id.hpp index d91f567d97..9d69cb20d9 100644 --- a/3party/boost/boost/geometry/multi/core/geometry_id.hpp +++ b/3party/boost/boost/geometry/multi/core/geometry_id.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/interior_rings.hpp b/3party/boost/boost/geometry/multi/core/interior_rings.hpp index 9f775d0dfb..5a200d486c 100644 --- a/3party/boost/boost/geometry/multi/core/interior_rings.hpp +++ b/3party/boost/boost/geometry/multi/core/interior_rings.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/is_areal.hpp b/3party/boost/boost/geometry/multi/core/is_areal.hpp index 06fac0159f..ad8daeb497 100644 --- a/3party/boost/boost/geometry/multi/core/is_areal.hpp +++ b/3party/boost/boost/geometry/multi/core/is_areal.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/point_order.hpp b/3party/boost/boost/geometry/multi/core/point_order.hpp index 0a60b85769..6b08468e8c 100644 --- a/3party/boost/boost/geometry/multi/core/point_order.hpp +++ b/3party/boost/boost/geometry/multi/core/point_order.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/point_type.hpp b/3party/boost/boost/geometry/multi/core/point_type.hpp index 7ba6a611a3..3c77e973b8 100644 --- a/3party/boost/boost/geometry/multi/core/point_type.hpp +++ b/3party/boost/boost/geometry/multi/core/point_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/ring_type.hpp b/3party/boost/boost/geometry/multi/core/ring_type.hpp index 84fd95686c..faafaed021 100644 --- a/3party/boost/boost/geometry/multi/core/ring_type.hpp +++ b/3party/boost/boost/geometry/multi/core/ring_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/core/tags.hpp b/3party/boost/boost/geometry/multi/core/tags.hpp index 69398f7919..dcfca65b2f 100644 --- a/3party/boost/boost/geometry/multi/core/tags.hpp +++ b/3party/boost/boost/geometry/multi/core/tags.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -27,7 +27,7 @@ struct multi_point_tag : multi_tag, pointlike_tag {}; struct multi_linestring_tag : multi_tag, linear_tag {}; /// OGC Multi polygon identifying tag -struct multi_polygon_tag : multi_tag, areal_tag {}; +struct multi_polygon_tag : multi_tag, polygonal_tag {}; /// OGC Geometry Collection identifying tag struct geometry_collection_tag : multi_tag {}; diff --git a/3party/boost/boost/geometry/multi/core/topological_dimension.hpp b/3party/boost/boost/geometry/multi/core/topological_dimension.hpp index dbce993450..55118f1c73 100644 --- a/3party/boost/boost/geometry/multi/core/topological_dimension.hpp +++ b/3party/boost/boost/geometry/multi/core/topological_dimension.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp index cd9d9cd8bd..18f4ff0c25 100644 --- a/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp +++ b/3party/boost/boost/geometry/multi/geometries/concepts/check.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp index bc155f718a..b0519f07ee 100644 --- a/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp +++ b/3party/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp index db3f99b89d..f5942df070 100644 --- a/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp +++ b/3party/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp b/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp index a460d07921..ca730d4f6b 100644 --- a/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp +++ b/3party/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp b/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp new file mode 100644 index 0000000000..90cf85a0f6 --- /dev/null +++ b/3party/boost/boost/geometry/multi/geometries/multi_geometries.hpp @@ -0,0 +1,21 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP +#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP + +#include +#include +#include + +#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP diff --git a/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp b/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp index a723b66b05..67d4da06b7 100644 --- a/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp +++ b/3party/boost/boost/geometry/multi/geometries/multi_linestring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/multi_point.hpp b/3party/boost/boost/geometry/multi/geometries/multi_point.hpp index a381b0e3fd..002d8f8a4b 100644 --- a/3party/boost/boost/geometry/multi/geometries/multi_point.hpp +++ b/3party/boost/boost/geometry/multi/geometries/multi_point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp b/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp index 5f4a80db26..af8d042873 100644 --- a/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp +++ b/3party/boost/boost/geometry/multi/geometries/multi_polygon.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp b/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp index 17fd172be2..5ececdb8e8 100644 --- a/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp +++ b/3party/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp b/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp index ddd1f280c5..813f54733d 100644 --- a/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp +++ b/3party/boost/boost/geometry/multi/geometries/register/multi_point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp b/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp index 9586645210..801b98cf24 100644 --- a/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp +++ b/3party/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/util/write_dsv.hpp b/3party/boost/boost/geometry/multi/io/dsv/write.hpp similarity index 57% rename from 3party/boost/boost/geometry/multi/util/write_dsv.hpp rename to 3party/boost/boost/geometry/multi/io/dsv/write.hpp index 31c96116bd..be40b5da5a 100644 --- a/3party/boost/boost/geometry/multi/util/write_dsv.hpp +++ b/3party/boost/boost/geometry/multi/io/dsv/write.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,12 +11,12 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_MULTI_UTIL_WRITE_DSV_HPP -#define BOOST_GEOMETRY_MULTI_UTIL_WRITE_DSV_HPP +#ifndef BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP +#define BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP #include -#include +#include namespace boost { namespace geometry { @@ -25,10 +25,24 @@ namespace boost { namespace geometry namespace detail { namespace dsv { - template struct dsv_multi { + typedef dispatch::dsv + < + typename single_tag_of + < + typename tag::type + >::type, + typename boost::range_value::type + > dispatch_one; + + typedef typename boost::range_iterator + < + MultiGeometry const + >::type iterator; + + template static inline void apply(std::basic_ostream& os, MultiGeometry const& multi, @@ -36,23 +50,18 @@ struct dsv_multi { os << settings.list_open; - typedef typename boost::range_iterator - < - MultiGeometry const - >::type iterator; + bool first = true; for(iterator it = boost::begin(multi); it != boost::end(multi); - ++it) + ++it, first = false) { - os << geometry::dsv(*it); + os << (first ? "" : settings.list_separator); + dispatch_one::apply(os, *it, settings); } os << settings.list_close; } }; - - - }} // namespace detail::dsv #endif // DOXYGEN_NO_DETAIL @@ -61,18 +70,14 @@ struct dsv_multi namespace dispatch { - template struct dsv : detail::dsv::dsv_multi {}; - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH - - }} // namespace boost::geometry -#endif // BOOST_GEOMETRY_MULTI_UTIL_WRITE_DSV_HPP +#endif // BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP diff --git a/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp b/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp new file mode 100644 index 0000000000..37b07979ba --- /dev/null +++ b/3party/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp @@ -0,0 +1,51 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP +#define BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP + +#include + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace wkt +{ + +struct prefix_null +{ + static inline const char* apply() { return ""; } +}; + +struct prefix_multipoint +{ + static inline const char* apply() { return "MULTIPOINT"; } +}; + +struct prefix_multilinestring +{ + static inline const char* apply() { return "MULTILINESTRING"; } +}; + +struct prefix_multipolygon +{ + static inline const char* apply() { return "MULTIPOLYGON"; } +}; + +}} // namespace wkt::impl +#endif + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/read_wkt_multi.hpp b/3party/boost/boost/geometry/multi/io/wkt/read.hpp similarity index 50% rename from 3party/boost/boost/geometry/domains/gis/io/wkt/read_wkt_multi.hpp rename to 3party/boost/boost/geometry/multi/io/wkt/read.hpp index 379a9fa154..218ddf9999 100644 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/read_wkt_multi.hpp +++ b/3party/boost/boost/geometry/multi/io/wkt/read.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,23 +11,22 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_READ_WKT_MULTI_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_READ_WKT_MULTI_HPP +#ifndef BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP +#define BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP #include #include #include #include - -#include -#include - +#include +#include namespace boost { namespace geometry { -namespace detail { namespace wkt { +namespace detail { namespace wkt +{ template class Parser, typename PrefixPolicy> struct multi_parser @@ -59,11 +58,71 @@ struct multi_parser handle_close_parenthesis(it, tokens.end(), wkt); } + + check_end(it, tokens.end(), wkt); } }; +template +struct noparenthesis_point_parser +{ + static inline void apply(tokenizer::iterator& it, tokenizer::iterator end, + std::string const& wkt, P& point) + { + parsing_assigner::value>::apply(it, end, point, wkt); + } +}; +template +struct multi_point_parser +{ + static inline void apply(std::string const& wkt, MultiGeometry& geometry) + { + traits::clear::apply(geometry); + tokenizer tokens(wkt, boost::char_separator(" ", ",()")); + tokenizer::iterator it; + + if (initialize(tokens, PrefixPolicy::apply(), wkt, it)) + { + handle_open_parenthesis(it, tokens.end(), wkt); + + // If first point definition starts with "(" then parse points as (x y) + // otherwise as "x y" + bool using_brackets = (it != tokens.end() && *it == "("); + + while(it != tokens.end() && *it != ")") + { + traits::resize::apply(geometry, boost::size(geometry) + 1); + + if (using_brackets) + { + point_parser + < + typename boost::range_value::type + >::apply(it, tokens.end(), wkt, geometry.back()); + } + else + { + noparenthesis_point_parser + < + typename boost::range_value::type + >::apply(it, tokens.end(), wkt, geometry.back()); + } + + if (it != tokens.end() && *it == ",") + { + // Skip "," after point is parsed + ++it; + } + } + + handle_close_parenthesis(it, tokens.end(), wkt); + } + + check_end(it, tokens.end(), wkt); + } +}; }} // namespace detail::wkt @@ -73,15 +132,13 @@ namespace dispatch template struct read_wkt - : detail::wkt::multi_parser + : detail::wkt::multi_point_parser < MultiGeometry, - detail::wkt::point_parser, detail::wkt::prefix_multipoint > {}; - template struct read_wkt : detail::wkt::multi_parser @@ -92,7 +149,6 @@ struct read_wkt > {}; - template struct read_wkt : detail::wkt::multi_parser @@ -103,10 +159,9 @@ struct read_wkt > {}; - } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH }} // namespace boost::geometry -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_READ_WKT_MULTI_HPP +#endif // BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP diff --git a/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp b/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp new file mode 100644 index 0000000000..55f1713d4d --- /dev/null +++ b/3party/boost/boost/geometry/multi/io/wkt/wkt.hpp @@ -0,0 +1,20 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP +#define BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP + +#include +#include + +#endif // BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP diff --git a/3party/boost/boost/geometry/domains/gis/io/wkt/write_wkt_multi.hpp b/3party/boost/boost/geometry/multi/io/wkt/write.hpp similarity index 83% rename from 3party/boost/boost/geometry/domains/gis/io/wkt/write_wkt_multi.hpp rename to 3party/boost/boost/geometry/multi/io/wkt/write.hpp index f7ee47dcd7..374da28b53 100644 --- a/3party/boost/boost/geometry/domains/gis/io/wkt/write_wkt_multi.hpp +++ b/3party/boost/boost/geometry/multi/io/wkt/write.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -11,16 +11,12 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WRITE_WKT_MULTI_HPP -#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WRITE_WKT_MULTI_HPP - - +#ifndef BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP +#define BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP #include - -#include -#include - +#include +#include namespace boost { namespace geometry { @@ -29,7 +25,6 @@ namespace boost { namespace geometry namespace detail { namespace wkt { - template struct wkt_multi { @@ -60,12 +55,10 @@ struct wkt_multi }} // namespace wkt::impl #endif - #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { - template struct wkt : detail::wkt::wkt_multi @@ -80,7 +73,6 @@ struct wkt > {}; - template struct wkt : detail::wkt::wkt_multi @@ -94,7 +86,6 @@ struct wkt > {}; - template struct wkt : detail::wkt::wkt_multi @@ -114,4 +105,4 @@ struct wkt }} // namespace boost::geometry -#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_WRITE_WKT_MULTI_HPP +#endif // BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP diff --git a/3party/boost/boost/geometry/multi/multi.hpp b/3party/boost/boost/geometry/multi/multi.hpp index b80a15112d..db33a9dd03 100644 --- a/3party/boost/boost/geometry/multi/multi.hpp +++ b/3party/boost/boost/geometry/multi/multi.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -17,19 +17,21 @@ #include #include -#include #include +#include #include #include #include #include #include - +#include #include #include #include +#include #include +#include #include #include #include @@ -46,6 +48,7 @@ #include #include +#include #include #include @@ -56,6 +59,7 @@ #include #include #include +#include #include #include @@ -66,8 +70,8 @@ #include #include -#include - +#include +#include #endif // BOOST_GEOMETRY_MULTI_HPP diff --git a/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp b/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp index fc709fce51..f28daf20bb 100644 --- a/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp +++ b/3party/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/multi/views/detail/range_type.hpp b/3party/boost/boost/geometry/multi/views/detail/range_type.hpp index 19c01c6f36..172feb251f 100644 --- a/3party/boost/boost/geometry/multi/views/detail/range_type.hpp +++ b/3party/boost/boost/geometry/multi/views/detail/range_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/policies/compare.hpp b/3party/boost/boost/geometry/policies/compare.hpp index caac032938..2e952d3e15 100644 --- a/3party/boost/boost/geometry/policies/compare.hpp +++ b/3party/boost/boost/geometry/policies/compare.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/policies/relate/de9im.hpp b/3party/boost/boost/geometry/policies/relate/de9im.hpp index 40a8d9722d..766d80b220 100644 --- a/3party/boost/boost/geometry/policies/relate/de9im.hpp +++ b/3party/boost/boost/geometry/policies/relate/de9im.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -167,14 +167,6 @@ struct segments_de9im true); } - - static inline return_type parallel() - { - return de9im_segment(0,0, - -1, -1, 1, - -1, -1, 0, - 1, 0, 2, false, false, true); - } }; diff --git a/3party/boost/boost/geometry/policies/relate/direction.hpp b/3party/boost/boost/geometry/policies/relate/direction.hpp index a27df50916..cfbaf7dd15 100644 --- a/3party/boost/boost/geometry/policies/relate/direction.hpp +++ b/3party/boost/boost/geometry/policies/relate/direction.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -15,6 +15,7 @@ #include +#include #include #include @@ -31,6 +32,8 @@ namespace policies { namespace relate struct direction_type { + // NOTE: "char" will be replaced by enum in future version + inline direction_type(side_info const& s, char h, int ha, int hb, int da = 0, int db = 0, @@ -60,6 +63,8 @@ struct direction_type } + // TODO: replace this + // NOTE: "char" will be replaced by enum in future version // "How" is the intersection formed? char how; @@ -121,7 +126,9 @@ struct segments_direction typedef typename select_most_precise::type rtype; + template static inline return_type segments_intersect(side_info const& sides, + R const&, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, S1 const& s1, S2 const& s2) @@ -235,20 +242,31 @@ struct segments_direction return return_type('d', false); } - - static inline return_type parallel() + static inline return_type error(std::string const&) { - return return_type('p', false); - } - - static inline return_type error(std::string const& msg) - { - // msg - return return_type('d', false); + // Return "E" to denote error + // This will throw an error in get_turn_info + // TODO: change to enum or similar + return return_type('E', false); } private : + static inline bool is_left + ( + coordinate_type const& ux, + coordinate_type const& uy, + coordinate_type const& vx, + coordinate_type const& vy + ) + { + // This is a "side calculation" as in the strategies, but here terms are precalculated + // We might merge this with side, offering a pre-calculated term (in fact already done using cross-product) + // Waiting for implementing spherical... + + rtype const zero = rtype(); + return geometry::detail::determinant(ux, uy, vx, vy) > zero; + } template static inline return_type calculate_side(side_info const& sides, @@ -259,11 +277,7 @@ private : coordinate_type dpx = get(s2) - get<0, 0>(s1); coordinate_type dpy = get(s2) - get<0, 1>(s1); - // This is a "side calculation" as in the strategies, but here two terms are precalculated - // We might merge this with side, offering a pre-calculated term - // Waiting for implementing spherical... - - return dx1 * dpy - dy1 * dpx > 0 + return is_left(dx1, dy1, dpx, dpy) ? return_type(sides, how, how_a, how_b, -1, 1) : return_type(sides, how, how_a, how_b, 1, -1); } @@ -277,7 +291,7 @@ private : coordinate_type dpx = get(s2) - get<0, 0>(s1); coordinate_type dpy = get(s2) - get<0, 1>(s1); - return dx1 * dpy - dy1 * dpx > 0 + return is_left(dx1, dy1, dpx, dpy) ? return_type(sides, how, how_a, how_b, 1, 1) : return_type(sides, how, how_a, how_b, -1, -1); } @@ -293,7 +307,7 @@ private : coordinate_type dpx = get<1, 0>(s2) - get<0, 0>(s1); coordinate_type dpy = get<1, 1>(s2) - get<0, 1>(s1); - int dir = dx1 * dpy - dy1 * dpx > 0 ? 1 : -1; + int dir = is_left(dx1, dy1, dpx, dpy) ? 1 : -1; // From other perspective, then reverse bool const is_a = which == 'A'; @@ -321,7 +335,7 @@ private : // Ending at the middle, one ARRIVES, the other one is NEUTRAL // (because it both "arrives" and "departs" there - return dx * dpy - dy * dpx > 0 + return is_left(dx, dy, dpx, dpy) ? return_type(sides, 'm', 1, 0, 1, 1) : return_type(sides, 'm', 1, 0, -1, -1); } @@ -334,7 +348,7 @@ private : coordinate_type dpx = get<1, 0>(s1) - get<0, 0>(s2); coordinate_type dpy = get<1, 1>(s1) - get<0, 1>(s2); - return dx * dpy - dy * dpx > 0 + return is_left(dx, dy, dpx, dpy) ? return_type(sides, 'm', 0, 1, 1, 1) : return_type(sides, 'm', 0, 1, -1, -1); } diff --git a/3party/boost/boost/geometry/policies/relate/intersection_points.hpp b/3party/boost/boost/geometry/policies/relate/intersection_points.hpp index cb47dedc99..d7d5199051 100644 --- a/3party/boost/boost/geometry/policies/relate/intersection_points.hpp +++ b/3party/boost/boost/geometry/policies/relate/intersection_points.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -35,48 +36,33 @@ struct segments_intersection_points typedef ReturnType return_type; typedef S1 segment_type1; typedef S2 segment_type2; + typedef typename select_calculation_type < S1, S2, CalculationType >::type coordinate_type; - // Get the same type, but at least a double - typedef typename select_most_precise::type rtype; - + template static inline return_type segments_intersect(side_info const&, + R const& r, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, S1 const& s1, S2 const& s2) { - return_type result; typedef typename geometry::coordinate_type < typename return_type::point_type - >::type coordinate_type; + >::type return_coordinate_type; - // Get the same type, but at least a double (also used for divisions - typedef typename select_most_precise - < - coordinate_type, double - >::type promoted_type; - - promoted_type const s1x = get<0, 0>(s1); - promoted_type const s1y = get<0, 1>(s1); - - // Calculate other determinants - Cramers rule - promoted_type const wx = get<0, 0>(s1) - get<0, 0>(s2); - promoted_type const wy = get<0, 1>(s1) - get<0, 1>(s2); - promoted_type const d = (dy2 * dx1) - (dx2 * dy1); - promoted_type const da = (promoted_type(dx2) * wy) - (promoted_type(dy2) * wx); - - // r: ratio 0-1 where intersection divides A/B - promoted_type const r = da / d; + coordinate_type const s1x = get<0, 0>(s1); + coordinate_type const s1y = get<0, 1>(s1); + return_type result; result.count = 1; set<0>(result.intersections[0], - boost::numeric_cast(s1x + r * promoted_type(dx1))); + boost::numeric_cast(R(s1x) + r * R(dx1))); set<1>(result.intersections[0], - boost::numeric_cast(s1y + r * promoted_type(dy1))); + boost::numeric_cast(R(s1y) + r * R(dy1))); return result; } @@ -111,7 +97,7 @@ struct segments_intersection_points return collinear_inside(s, index1, 1 - index1); } - static inline return_type collinear_a_in_b(S1 const& s, bool opposite) + static inline return_type collinear_a_in_b(S1 const& s, bool) { return collinear_inside(s); } @@ -135,7 +121,7 @@ struct segments_intersection_points return result; } - static inline return_type segment_equal(S1 const& s, bool opposite) + static inline return_type segment_equal(S1 const& s, bool) { return_type result; result.count = 2; @@ -151,7 +137,7 @@ struct segments_intersection_points { return return_type(); } - static inline return_type error(std::string const& msg) + static inline return_type error(std::string const&) { return return_type(); } @@ -160,10 +146,7 @@ struct segments_intersection_points { return return_type(); } - static inline return_type parallel() - { - return return_type(); - } + static inline return_type degenerate(S1 const& s, bool) { return_type result; diff --git a/3party/boost/boost/geometry/policies/relate/intersection_points_determinant.hpp b/3party/boost/boost/geometry/policies/relate/intersection_points_determinant.hpp deleted file mode 100644 index c9db1bb472..0000000000 --- a/3party/boost/boost/geometry/policies/relate/intersection_points_determinant.hpp +++ /dev/null @@ -1,176 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. - -// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP -#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP - - -#include - -#include -#include - -#include -#include -#include -#include - - -namespace boost { namespace geometry -{ - -namespace policies { namespace relate -{ - - -template -struct segments_intersection_points -{ - typedef ReturnType return_type; - typedef S1 segment_type1; - typedef S2 segment_type2; - typedef typename select_calculation_type - < - S1, S2, CalculationType - >::type coordinate_type; - - // Get the same type, but at least a double - typedef typename select_most_precise::type rtype; - - static inline return_type segments_intersect(side_info const&, - coordinate_type const& dx1, coordinate_type const& dy1, - coordinate_type const& dx2, coordinate_type const& dy2, - S1 const& s1, S2 const& s2) - { - return_type result; - typedef typename geometry::coordinate_type - < - typename return_type::point_type - >::type coordinate_type; - - // Get the same type, but at least a double (also used for divisions - typedef typename select_most_precise - < - coordinate_type, double - >::type promoted_type; - - coordinate_type const s1x = get<0, 0>(s1); - coordinate_type const s1y = get<0, 1>(s1); - - // Calculate other determinants - Cramers rule - promoted_type const wx = get<0, 0>(s1) - get<0, 0>(s2); - promoted_type const wy = get<0, 1>(s1) - get<0, 1>(s2); - promoted_type const d = (dy2 * dx1) - (dx2 * dy1); - promoted_type const da = (dx2 * wy) - (dy2 * wx); - - // r: ratio 0-1 where intersection divides A/B - promoted_type const r = da / d; - - result.count = 1; - set<0>(result.intersections[0], - boost::numeric_cast(s1x + r * dx1)); - set<1>(result.intersections[0], - boost::numeric_cast(s1y + r * dy1)); - - return result; - } - - static inline return_type collinear_touch(coordinate_type const& x, - coordinate_type const& y, bool, char) - { - return_type result; - result.count = 1; - set<0>(result.intersections[0], x); - set<1>(result.intersections[0], y); - return result; - } - - template - static inline return_type collinear_inside(S const& s) - { - return_type result; - result.count = 2; - set<0>(result.intersections[0], get<0, 0>(s)); - set<1>(result.intersections[0], get<0, 1>(s)); - set<0>(result.intersections[1], get<1, 0>(s)); - set<1>(result.intersections[1], get<1, 1>(s)); - return result; - } - - template - static inline return_type collinear_interior_boundary_intersect(S const& s, bool, bool) - { - return collinear_inside(s); - } - - static inline return_type collinear_a_in_b(S1 const& s, bool) - { - return collinear_inside(s); - } - static inline return_type collinear_b_in_a(S2 const& s, bool) - { - return collinear_inside(s); - } - - static inline return_type collinear_overlaps( - coordinate_type const& x1, coordinate_type const& y1, - coordinate_type const& x2, coordinate_type const& y2, bool) - { - return_type result; - result.count = 2; - set<0>(result.intersections[0], x1); - set<1>(result.intersections[0], y1); - set<0>(result.intersections[1], x2); - set<1>(result.intersections[1], y2); - return result; - } - - static inline return_type segment_equal(S1 const& s, bool) - { - return_type result; - result.count = 2; - set<0>(result.intersections[0], get<0, 0>(s)); - set<1>(result.intersections[0], get<0, 1>(s)); - set<0>(result.intersections[1], get<1, 0>(s)); - set<1>(result.intersections[1], get<1, 1>(s)); - return result; - } - - static inline return_type disjoint() - { - return return_type(); - } - static inline return_type error(std::string const& msg) - { - return return_type(); - } - - static inline return_type collinear_disjoint() - { - return return_type(); - } - static inline return_type parallel() - { - return return_type(); - } - static inline return_type degenerate(S1 const& s, bool) - { - return_type result; - result.count = 1; - set<0>(result.intersections[0], get<0, 0>(s)); - set<1>(result.intersections[0], get<0, 1>(s)); - return result; - } -}; - - -}} // namespace policies::relate - -}} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP diff --git a/3party/boost/boost/geometry/policies/relate/intersection_points_slope.hpp b/3party/boost/boost/geometry/policies/relate/intersection_points_slope.hpp deleted file mode 100644 index 79dacbbb8c..0000000000 --- a/3party/boost/boost/geometry/policies/relate/intersection_points_slope.hpp +++ /dev/null @@ -1,213 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. - -// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP -#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP - - -#include - -#include -#include - -#include -#include -#include -#include - - -namespace boost { namespace geometry -{ - -namespace policies { namespace relate -{ - - -template -struct segments_intersection_points -{ - typedef ReturnType return_type; - typedef S1 segment_type1; - typedef S2 segment_type2; - typedef typename select_calculation_type - < - S1, S2, CalculationType - >::type coordinate_type; - - // Get the same type, but at least a double (also used for divisions - typedef typename select_most_precise - < - coordinate_type, double - >::type promoted_type; - - template - static inline return_type rico( - coordinate_type const& dm1, coordinate_type const& dn1, - coordinate_type const& dm2, coordinate_type const& dn2, - S1 const& s1, S2 const& s2) - { - promoted_type const a1 = dn1 / dm1; - promoted_type const a2 = dn2 / dm2; - promoted_type const da = a1 - a2; - - if (math::equals(da, 0)) - { - return rico<1 - Dimension>(dn1, dm1, dn2, dm2, s1, s2); - } - - promoted_type const b1 = get<0, Dimension>(s1) - a1 * get<0, 1 - Dimension>(s1); - promoted_type const b2 = get<0, Dimension>(s2) - a2 * get<0, 1 - Dimension>(s2); - - promoted_type const v = (b2 - b1) / da; - - return_type result; - result.count = 1; - set<1 - Dimension>(result.intersections[0], - boost::numeric_cast(v)); - set(result.intersections[0], - boost::numeric_cast(a1 * v + b1)); - return result; - } - - static inline return_type cross(S1 const& s1, S2 const& s2) - { - // Take one of first segment, and one of second segment - return_type result; - result.count = 1; - set<0>(result.intersections[0], get<0, 0>(s1)); - set<1>(result.intersections[0], get<0, 1>(s2)); - return result; - } - - - static inline return_type segments_intersect(side_info const& sides, - coordinate_type const& dx1, coordinate_type const& dy1, - coordinate_type const& dx2, coordinate_type const& dy2, - S1 const& s1, S2 const& s2) - { - bool vertical1 = math::equals(dx1, 0); - bool horizontal2 = math::equals(dy2, 0); - if (vertical1 && horizontal2) - { - return cross(s1, s2); - } - - bool vertical2 = math::equals(dx2, 0); - bool horizontal1 = math::equals(dy1, 0); - if (horizontal1 && vertical2) - { - return cross(s2, s1); - } - if (vertical1 || vertical2) - { - return rico<0>(dy1, dx1, dy2, dx2, s1, s2); - } - else - { - // Not crossing, take the most reasonable choice. - // We want to divide by the largest one. - //if ( - - return rico<1>(dx1, dy1, dx2, dy2, s1, s2); - } - } - - static inline return_type collinear_touch(coordinate_type const& x, - coordinate_type const& y, bool, char) - { - return_type result; - result.count = 1; - set<0>(result.intersections[0], x); - set<1>(result.intersections[0], y); - return result; - } - - template - static inline return_type collinear_inside(S const& s) - { - return_type result; - result.count = 2; - set<0>(result.intersections[0], get<0, 0>(s)); - set<1>(result.intersections[0], get<0, 1>(s)); - set<0>(result.intersections[1], get<1, 0>(s)); - set<1>(result.intersections[1], get<1, 1>(s)); - return result; - } - - template - static inline return_type collinear_interior_boundary_intersect(S const& s, bool, bool) - { - return collinear_inside(s); - } - - static inline return_type collinear_a_in_b(S1 const& s, bool) - { - return collinear_inside(s); - } - static inline return_type collinear_b_in_a(S2 const& s, bool) - { - return collinear_inside(s); - } - - static inline return_type collinear_overlaps( - coordinate_type const& x1, coordinate_type const& y1, - coordinate_type const& x2, coordinate_type const& y2, bool) - { - return_type result; - result.count = 2; - set<0>(result.intersections[0], x1); - set<1>(result.intersections[0], y1); - set<0>(result.intersections[1], x2); - set<1>(result.intersections[1], y2); - return result; - } - - static inline return_type segment_equal(S1 const& s, bool) - { - return_type result; - result.count = 2; - set<0>(result.intersections[0], get<0, 0>(s)); - set<1>(result.intersections[0], get<0, 1>(s)); - set<0>(result.intersections[1], get<1, 0>(s)); - set<1>(result.intersections[1], get<1, 1>(s)); - return result; - } - - static inline return_type disjoint() - { - return return_type(); - } - static inline return_type error(std::string const& msg) - { - return return_type(); - } - - static inline return_type collinear_disjoint() - { - return return_type(); - } - static inline return_type parallel() - { - return return_type(); - } - static inline return_type degenerate(S1 const& s, bool) - { - return_type result; - result.count = 1; - set<0>(result.intersections[0], get<0, 0>(s)); - set<1>(result.intersections[0], get<0, 1>(s)); - return result; - } -}; - - -}} // namespace policies::relate - -}} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP diff --git a/3party/boost/boost/geometry/policies/relate/tupled.hpp b/3party/boost/boost/geometry/policies/relate/tupled.hpp index 9cf6e41861..f6713c44c9 100644 --- a/3party/boost/boost/geometry/policies/relate/tupled.hpp +++ b/3party/boost/boost/geometry/policies/relate/tupled.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -49,16 +49,18 @@ struct segments_tupled // Get the same type, but at least a double typedef typename select_most_precise::type rtype; + template static inline return_type segments_intersect(side_info const& sides, + R const& r, coordinate_type const& dx1, coordinate_type const& dy1, coordinate_type const& dx2, coordinate_type const& dy2, segment_type1 const& s1, segment_type2 const& s2) { return boost::make_tuple ( - Policy1::segments_intersect(sides, + Policy1::segments_intersect(sides, r, dx1, dy1, dx2, dy2, s1, s2), - Policy2::segments_intersect(sides, + Policy2::segments_intersect(sides, r, dx1, dy1, dx2, dy2, s1, s2) ); } @@ -164,15 +166,6 @@ struct segments_tupled ); } - - static inline return_type parallel() - { - return boost::make_tuple - ( - Policy1::parallel(), - Policy2::parallel() - ); - } }; }} // namespace policies::relate diff --git a/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp b/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp index 037e390b5c..747c140754 100644 --- a/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp +++ b/3party/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -31,13 +31,6 @@ #include -// Temporary, comparing sorting, this can be removed in the end -//#define BOOST_GEOMETRY_USE_FLEX_SORT -//#define BOOST_GEOMETRY_USE_FLEX_SORT2 -#if defined(BOOST_GEOMETRY_USE_FLEX_SORT) -# include -#endif - namespace boost { namespace geometry { @@ -67,12 +60,17 @@ struct get_extremes StrategyLess less; StrategyGreater greater; - get_extremes() + inline get_extremes() : first(true) {} inline void apply(InputRange const& range) { + if (boost::size(range) == 0) + { + return; + } + // First iterate through this range // (this two-stage approach avoids many point copies, // because iterators are kept in memory. Because iterators are @@ -98,7 +96,7 @@ struct get_extremes } // Then compare with earlier - if (first && boost::size(range) > 0) + if (first) { // First time, assign left/right left = *left_it; @@ -173,62 +171,15 @@ struct assign_range } }; - template static inline void sort(Range& range) { typedef typename boost::range_value::type point_type; typedef geometry::less comparator; -#if defined(GGL_USE_FLEX_SORT) - - #if defined(GGL_USE_FLEX_SORT1) - typedef boost::detail::default_predicate - < - boost::sort_filter_cutoff - < - 18, - boost::detail::insert_sort_core, - boost::sort_filter_ground - < - 30, - boost::detail::heap_sort_core, - boost::detail::quick_sort_core - < - boost::pivot_median_of_three, - boost::default_partitionner - > - > - >, - comparator> my_sort; - my_sort sort; - #elif defined(GGL_USE_FLEX_SORT2) - - // 1, 5, 9, 18, 25: 0.75 - // 50: 0.81 - - typedef boost::detail::default_predicate - >, comparator - > barend_sort; - - barend_sort sort; - #else - #error Define sub-flex-sort - #endif - - sort(boost::begin(range), boost::end(range)); - -#else - std::sort - (boost::begin(range), boost::end(range), comparator()); -#endif + std::sort(boost::begin(range), boost::end(range), comparator()); } - } // namespace detail #endif // DOXYGEN_NO_DETAIL @@ -274,8 +225,15 @@ public: { // First pass. // Get min/max (in most cases left / right) points - // This makes use of the geometry::less/greater predicates with the optional - // direction template parameter to indicate x direction + // This makes use of the geometry::less/greater predicates + + // For the left boundary it is important that multiple points + // are sorted from bottom to top. Therefore the less predicate + // does not take the x-only template parameter (this fixes ticket #6019. + // For the right boundary it is not necessary (though also not harmful), + // because points are sorted from bottom to top in a later stage. + // For symmetry and to get often more balanced lower/upper halves + // we keep it. typedef typename geometry::detail::range_type::type range_type; @@ -288,8 +246,8 @@ public: < range_type, range_iterator, - geometry::less, - geometry::greater + geometry::less, + geometry::greater > extremes; geometry::detail::for_each_range(geometry, extremes); @@ -414,7 +372,7 @@ private: #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS template -struct strategy_convex_hull +struct strategy_convex_hull { typedef strategy::convex_hull::graham_andrew type; }; diff --git a/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp b/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp new file mode 100644 index 0000000000..1398ddb687 --- /dev/null +++ b/3party/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp @@ -0,0 +1,151 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP +#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP + +#include +#include +#include +#include +#include +#include + + +namespace boost { namespace geometry { namespace strategy +{ + +namespace within +{ + +struct decide_within +{ + static inline bool apply(int side, bool& result) + { + if (side != 1) + { + result = false; + return false; + } + return true; // continue + } +}; + +struct decide_covered_by +{ + static inline bool apply(int side, bool& result) + { + if (side != 1) + { + result = side >= 0; + return false; + } + return true; // continue + } +}; + + +template +struct point_in_box_by_side +{ + typedef typename strategy::side::services::default_strategy + < + typename cs_tag::type + >::type side_strategy_type; + + static inline bool apply(Point const& point, Box const& box) + { + // Create (counterclockwise) array of points, the fifth one closes it + // Every point should be on the LEFT side (=1), or ON the border (=0), + // So >= 1 or >= 0 + boost::array::type, 5> bp; + geometry::detail::assign_box_corners_oriented(box, bp); + bp[4] = bp[0]; + + bool result = true; + side_strategy_type strategy; + boost::ignore_unused_variable_warning(strategy); + + for (int i = 1; i < 5; i++) + { + int const side = strategy.apply(point, bp[i - 1], bp[i]); + if (! Decide::apply(side, result)) + { + return result; + } + } + + return result; + } +}; + + +} // namespace within + + +#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS + + +namespace within { namespace services +{ + +template +struct default_strategy + < + point_tag, box_tag, + point_tag, areal_tag, + spherical_tag, spherical_tag, + Point, Box + > +{ + typedef within::point_in_box_by_side + < + Point, Box, within::decide_within + > type; +}; + + + +}} // namespace within::services + + +namespace covered_by { namespace services +{ + + +template +struct default_strategy + < + point_tag, box_tag, + point_tag, areal_tag, + spherical_tag, spherical_tag, + Point, Box + > +{ + typedef within::point_in_box_by_side + < + Point, Box, within::decide_covered_by + > type; +}; + + +}} // namespace covered_by::services + + +#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS + + +}}} // namespace boost::geometry::strategy + + +#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP diff --git a/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp b/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp index a7ebc7f751..423948fff3 100644 --- a/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp +++ b/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp b/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp index c98de8ab32..69188650d8 100644 --- a/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp +++ b/3party/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -17,6 +17,7 @@ #include #include +#include #include @@ -181,23 +182,18 @@ namespace services { // Register using "areal_tag" for ring, polygon, multi-polygon -template -struct default_strategy +template +struct default_strategy { - typedef winding type; + typedef winding::type> type; }; -template -struct default_strategy +template +struct default_strategy { - typedef winding type; + typedef winding::type> type; }; -template -struct default_strategy -{ - typedef winding type; -}; } // namespace services @@ -207,6 +203,29 @@ struct default_strategy +struct default_strategy +{ + typedef strategy::within::winding::type> type; +}; + +template +struct default_strategy +{ + typedef strategy::within::winding::type> type; +}; + + +}}} // namespace strategy::covered_by::services +#endif + + }} // namespace boost::geometry diff --git a/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp b/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp index b4e95b8a40..4a1a22d1cf 100644 --- a/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp +++ b/3party/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 1995, 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 1995, 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -27,7 +27,7 @@ //#define GL_DEBUG_DOUGLAS_PEUCKER #ifdef GL_DEBUG_DOUGLAS_PEUCKER -#include +#include #endif @@ -60,8 +60,7 @@ namespace detail {} // Necessary for proper compilation - inline douglas_peucker_point operator=( - douglas_peucker_point const& other) + inline douglas_peucker_point operator=(douglas_peucker_point const& ) { return douglas_peucker_point(*this); } @@ -94,7 +93,12 @@ class douglas_peucker { public : - typedef typename strategy::distance::services::comparable_type::type distance_strategy_type; + // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954 + // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more. + // For now we have to take the real distance. + typedef PointDistanceStrategy distance_strategy_type; + // typedef typename strategy::distance::services::comparable_type::type distance_strategy_type; + typedef typename strategy::distance::services::return_type::type return_type; private : @@ -145,7 +149,7 @@ private : #ifdef GL_DEBUG_DOUGLAS_PEUCKER std::cout << "consider " << dsv(it->p) << " at " << double(dist) - << ((dist > max_dist) ? " maybe" : " no") + << ((dist > max_dist) ? " maybe" : " no") << std::endl; #endif diff --git a/3party/boost/boost/geometry/strategies/area.hpp b/3party/boost/boost/geometry/strategies/area.hpp index 2e9353c135..e192d9b28b 100644 --- a/3party/boost/boost/geometry/strategies/area.hpp +++ b/3party/boost/boost/geometry/strategies/area.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp b/3party/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp index 033c4a433d..74b63532c0 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -16,9 +16,11 @@ #include -#include -#include +#include +#include +#include +#include namespace boost { namespace geometry @@ -82,7 +84,8 @@ private : inline return_type area() const { return_type result = sum; - result *= 0.5; + return_type const two = 2; + result /= two; return result; } }; @@ -96,7 +99,7 @@ public : summation& state) { // SUM += x2 * y1 - x1 * y2; - state.sum += get<0>(p2) * get<1>(p1) - get<0>(p1) * get<1>(p2); + state.sum += detail::determinant(p2, p1); } static inline return_type result(summation const& state) diff --git a/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp b/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp new file mode 100644 index 0000000000..7680b8362c --- /dev/null +++ b/3party/boost/boost/geometry/strategies/cartesian/box_in_box.hpp @@ -0,0 +1,176 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP +#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP + + +#include +#include +#include +#include + + +namespace boost { namespace geometry { namespace strategy +{ + + +namespace within +{ + +struct box_within_range +{ + template + static inline bool apply(BoxContainedValue const& bed_min + , BoxContainedValue const& bed_max + , BoxContainingValue const& bing_min + , BoxContainingValue const& bing_max) + { + return bed_min > bing_min && bed_max < bing_max; + } +}; + + +struct box_covered_by_range +{ + template + static inline bool apply(BoxContainedValue const& bed_min + , BoxContainedValue const& bed_max + , BoxContainingValue const& bing_min + , BoxContainingValue const& bing_max) + { + return bed_min >= bing_min && bed_max <= bing_max; + } +}; + + +template +< + typename SubStrategy, + typename Box1, + typename Box2, + std::size_t Dimension, + std::size_t DimensionCount +> +struct relate_box_box_loop +{ + static inline bool apply(Box1 const& b_contained, Box2 const& b_containing) + { + assert_dimension_equal(); + + if (! SubStrategy::apply( + get(b_contained), + get(b_contained), + get(b_containing), + get(b_containing) + ) + ) + { + return false; + } + + return relate_box_box_loop + < + SubStrategy, + Box1, Box2, + Dimension + 1, DimensionCount + >::apply(b_contained, b_containing); + } +}; + +template +< + typename SubStrategy, + typename Box1, + typename Box2, + std::size_t DimensionCount +> +struct relate_box_box_loop +{ + static inline bool apply(Box1 const& , Box2 const& ) + { + return true; + } +}; + +template +< + typename Box1, + typename Box2, + typename SubStrategy = box_within_range +> +struct box_in_box +{ + static inline bool apply(Box1 const& box1, Box2 const& box2) + { + return relate_box_box_loop + < + SubStrategy, + Box1, Box2, 0, dimension::type::value + >::apply(box1, box2); + } +}; + + +} // namespace within + + +#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS + + +namespace within { namespace services +{ + +template +struct default_strategy + < + box_tag, box_tag, + box_tag, areal_tag, + cartesian_tag, cartesian_tag, + BoxContained, BoxContaining + > +{ + typedef within::box_in_box type; +}; + + +}} // namespace within::services + +namespace covered_by { namespace services +{ + +template +struct default_strategy + < + box_tag, box_tag, + box_tag, areal_tag, + cartesian_tag, cartesian_tag, + BoxContained, BoxContaining + > +{ + typedef within::box_in_box + < + BoxContained, BoxContaining, + within::box_covered_by_range + > type; +}; + +}} // namespace covered_by::services + + +#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS + + +}}} // namespace boost::geometry::strategy + +#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP diff --git a/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp b/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp index 4df6a478ec..ea92cf37b0 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/cart_intersect.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -16,6 +16,9 @@ #include #include +#include +#include + #include #include @@ -38,21 +41,30 @@ namespace strategy { namespace intersection namespace detail { -template -struct segment_arrange +template +static inline void segment_arrange(Segment const& s, T& s_1, T& s_2, bool& swapped) { - template - static inline void apply(Segment const& s, T& s_1, T& s_2, bool& swapped) + s_1 = get<0, Dimension>(s); + s_2 = get<1, Dimension>(s); + if (s_1 > s_2) { - s_1 = get<0, Dimension>(s); - s_2 = get<1, Dimension>(s); - if (s_1 > s_2) - { - std::swap(s_1, s_2); - swapped = true; - } + std::swap(s_1, s_2); + swapped = true; } -}; +} + +template +inline typename geometry::point_type::type get_from_index( + Segment const& segment) +{ + typedef typename geometry::point_type::type point_type; + point_type point; + geometry::detail::assign::assign_point_from_index + < + Segment, point_type, Index, 0, dimension::type::value + >::apply(segment, point); + return point; +} } #endif @@ -91,10 +103,10 @@ struct relate_cartesian_segments /// Relate segments a and b static inline return_type apply(segment_type1 const& a, segment_type2 const& b) { - coordinate_type dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir - coordinate_type dx_b = get<1, 0>(b) - get<0, 0>(b); - coordinate_type dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir - coordinate_type dy_b = get<1, 1>(b) - get<0, 1>(b); + coordinate_type const dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir + coordinate_type const dx_b = get<1, 0>(b) - get<0, 0>(b); + coordinate_type const dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir + coordinate_type const dy_b = get<1, 1>(b) - get<0, 1>(b); return apply(a, b, dx_a, dy_a, dx_b, dy_b); } @@ -105,50 +117,42 @@ struct relate_cartesian_segments coordinate_type const& dx_a, coordinate_type const& dy_a, coordinate_type const& dx_b, coordinate_type const& dy_b) { - // 1) Handle "disjoint", probably common case. - // per dimension, 2 cases: a_1----------a_2 b_1-------b_2 or B left of A - coordinate_type ax_1, ax_2, bx_1, bx_2; - bool ax_swapped = false, bx_swapped = false; - detail::segment_arrange::apply(a, ax_1, ax_2, ax_swapped); - detail::segment_arrange::apply(b, bx_1, bx_2, bx_swapped); - if (ax_2 < bx_1 || ax_1 > bx_2) - { - return Policy::disjoint(); - } - - // 1b) In Y-dimension - coordinate_type ay_1, ay_2, by_1, by_2; - bool ay_swapped = false, by_swapped = false; - detail::segment_arrange::apply(a, ay_1, ay_2, ay_swapped); - detail::segment_arrange::apply(b, by_1, by_2, by_swapped); - if (ay_2 < ay_1 || ay_1 > by_2) - { - return Policy::disjoint(); - } - typedef side::side_by_triangle side; side_info sides; - // 2) Calculate sides - // Note: Do NOT yet calculate the determinant here, but use the SIDE strategy. - // Determinant calculation is not robust; side (orient) can be made robust - // (and is much robuster even without measures) - sides.set<1>(side::apply(a.first, a.second, b.first), - side::apply(a.first, a.second, b.second)); + bool collinear_use_first = math::abs(dx_a) + math::abs(dx_b) >= math::abs(dy_a) + math::abs(dy_b); - if (sides.same<1>()) + sides.set<0> + ( + side::apply(detail::get_from_index<0>(b) + , detail::get_from_index<1>(b) + , detail::get_from_index<0>(a)), + side::apply(detail::get_from_index<0>(b) + , detail::get_from_index<1>(b) + , detail::get_from_index<1>(a)) + ); + sides.set<1> + ( + side::apply(detail::get_from_index<0>(a) + , detail::get_from_index<1>(a) + , detail::get_from_index<0>(b)), + side::apply(detail::get_from_index<0>(a) + , detail::get_from_index<1>(a) + , detail::get_from_index<1>(b)) + ); + + bool collinear = sides.collinear(); + + robustness_verify_collinear(a, b, sides, collinear); + robustness_verify_meeting(a, b, sides, collinear, collinear_use_first); + + if (sides.same<0>() || sides.same<1>()) { // Both points are at same side of other segment, we can leave - return Policy::disjoint(); - } - - // 2b) For other segment - sides.set<0>(side::apply(b.first, b.second, a.first), - side::apply(b.first, b.second, a.second)); - - if (sides.same<0>()) - { - return Policy::disjoint(); + if (robustness_verify_same_side(a, b, sides)) + { + return Policy::disjoint(); + } } // Degenerate cases: segments of single point, lying on other segment, non disjoint @@ -162,76 +166,343 @@ struct relate_cartesian_segments return Policy::degenerate(b, false); } - bool collinear = sides.collinear(); - - // Get the same type, but at least a double (also used for divisions typedef typename select_most_precise < coordinate_type, double >::type promoted_type; - - promoted_type const d = (dy_b * dx_a) - (dx_b * dy_a); - // Determinant d should be nonzero. - // If it is zero, we have an robustness issue here, - // (and besides that we cannot divide by it) - if(math::equals(d, zero) && ! collinear) - //if(! collinear && sides.as_collinear()) + // r: ratio 0-1 where intersection divides A/B + // (only calculated for non-collinear segments) + promoted_type r; + if (! collinear) { -#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION - std::cout << "Determinant zero? Type : " - << typeid(coordinate_type).name() - << std::endl; + // Calculate determinants - Cramers rule + coordinate_type const wx = get<0, 0>(a) - get<0, 0>(b); + coordinate_type const wy = get<0, 1>(a) - get<0, 1>(b); + coordinate_type const d = geometry::detail::determinant(dx_a, dy_a, dx_b, dy_b); + coordinate_type const da = geometry::detail::determinant(dx_b, dy_b, wx, wy); - std::cout << " dx_a : " << dx_a << std::endl; - std::cout << " dy_a : " << dy_a << std::endl; - std::cout << " dx_b : " << dx_b << std::endl; - std::cout << " dy_b : " << dy_b << std::endl; - - std::cout << " side a <-> b.first : " << sides.get<0,0>() << std::endl; - std::cout << " side a <-> b.second: " << sides.get<0,1>() << std::endl; - std::cout << " side b <-> a.first : " << sides.get<1,0>() << std::endl; - std::cout << " side b <-> a.second: " << sides.get<1,1>() << std::endl; -#endif - - if (sides.as_collinear()) + coordinate_type const zero = coordinate_type(); + if (math::equals(d, zero)) { + // This is still a collinear case (because of FP imprecision this can occur here) + // sides.debug(); sides.set<0>(0,0); sides.set<1>(0,0); collinear = true; } else { - return Policy::error("Determinant zero!"); + r = promoted_type(da) / promoted_type(d); + + if (! robustness_verify_r(a, b, r)) + { + return Policy::disjoint(); + } + + robustness_handle_meeting(a, b, sides, dx_a, dy_a, wx, wy, d, r); + + if (robustness_verify_disjoint_at_one_collinear(a, b, sides)) + { + return Policy::disjoint(); + } + } } if(collinear) { - // Segments are collinear. We'll find out how. - if (math::equals(dx_b, zero)) + if (collinear_use_first) { - // Vertical -> Check y-direction - return relate_collinear(a, b, - ay_1, ay_2, by_1, by_2, - ay_swapped, by_swapped); + return relate_collinear<0>(a, b); } else { - // Check x-direction - return relate_collinear(a, b, - ax_1, ax_2, bx_1, bx_2, - ax_swapped, bx_swapped); + // Y direction contains larger segments (maybe dx is zero) + return relate_collinear<1>(a, b); } } - return Policy::segments_intersect(sides, + return Policy::segments_intersect(sides, r, dx_a, dy_a, dx_b, dy_b, a, b); } private : + + // Ratio should lie between 0 and 1 + // Also these three conditions might be of FP imprecision, the segments were actually (nearly) collinear + template + static inline bool robustness_verify_r( + segment_type1 const& a, segment_type2 const& b, + T& r) + { + T const zero = 0; + T const one = 1; + if (r < zero || r > one) + { + if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b)) + { + // Can still be disjoint (even if not one is left or right from another) + // This is e.g. in case #snake4 of buffer test. + return false; + } + + //std::cout << "ROBUSTNESS: correction of r " << r << std::endl; + // sides.debug(); + + // ROBUSTNESS: the r value can in epsilon-cases much larger than 1, while (with perfect arithmetic) + // it should be one. It can be 1.14 or even 1.98049 or 2 (while still intersecting) + + // If segments are crossing (we can see that with the sides) + // and one is inside the other, there must be an intersection point. + // We correct for that. + // This is (only) in case #ggl_list_20110820_christophe in unit tests + + // If segments are touching (two sides zero), of course they should intersect + // This is (only) in case #buffer_rt_i in the unit tests) + + // If one touches in the middle, they also should intersect (#buffer_rt_j) + + // Note that even for ttmath r is occasionally > 1, e.g. 1.0000000000000000000000036191231203575 + + if (r > one) + { + r = one; + } + else if (r < zero) + { + r = zero; + } + } + return true; + } + + static inline void robustness_verify_collinear( + segment_type1 const& a, segment_type2 const& b, + side_info& sides, + bool& collinear) + { + if ((sides.zero<0>() && ! sides.zero<1>()) || (sides.zero<1>() && ! sides.zero<0>())) + { + // If one of the segments is collinear, the other must be as well. + // So handle it as collinear. + // (In float/double epsilon margins it can easily occur that one or two of them are -1/1) + // sides.debug(); + sides.set<0>(0,0); + sides.set<1>(0,0); + collinear = true; + } + } + + static inline void robustness_verify_meeting( + segment_type1 const& a, segment_type2 const& b, + side_info& sides, + bool& collinear, bool& collinear_use_first) + { + if (sides.meeting()) + { + // If two segments meet each other at their segment-points, two sides are zero, + // the other two are not (unless collinear but we don't mean those here). + // However, in near-epsilon ranges it can happen that two sides are zero + // but they do not meet at their segment-points. + // In that case they are nearly collinear and handled as such. + if (! point_equals + ( + select(sides.zero_index<0>(), a), + select(sides.zero_index<1>(), b) + ) + ) + { + sides.set<0>(0,0); + sides.set<1>(0,0); + collinear = true; + + if (collinear_use_first && analyse_equal<0>(a, b)) + { + collinear_use_first = false; + } + else if (! collinear_use_first && analyse_equal<1>(a, b)) + { + collinear_use_first = true; + } + + } + } + } + + // Verifies and if necessary correct missed touch because of robustness + // This is the case at multi_polygon_buffer unittest #rt_m + static inline bool robustness_verify_same_side( + segment_type1 const& a, segment_type2 const& b, + side_info& sides) + { + int corrected = 0; + if (sides.one_touching<0>()) + { + if (point_equals( + select(sides.zero_index<0>(), a), + select(0, b) + )) + { + sides.correct_to_zero<1, 0>(); + corrected = 1; + } + if (point_equals + ( + select(sides.zero_index<0>(), a), + select(1, b) + )) + { + sides.correct_to_zero<1, 1>(); + corrected = 2; + } + } + else if (sides.one_touching<1>()) + { + if (point_equals( + select(sides.zero_index<1>(), b), + select(0, a) + )) + { + sides.correct_to_zero<0, 0>(); + corrected = 3; + } + if (point_equals + ( + select(sides.zero_index<1>(), b), + select(1, a) + )) + { + sides.correct_to_zero<0, 1>(); + corrected = 4; + } + } + + return corrected == 0; + } + + static inline bool robustness_verify_disjoint_at_one_collinear( + segment_type1 const& a, segment_type2 const& b, + side_info const& sides) + { + if (sides.one_of_all_zero()) + { + if (verify_disjoint<0>(a, b) || verify_disjoint<1>(a, b)) + { + return true; + } + } + return false; + } + + + // If r is one, or zero, segments should meet and their endpoints. + // Robustness issue: check if this is really the case. + // It turns out to be no problem, see buffer test #rt_s1 (and there are many cases generated) + // It generates an "ends in the middle" situation which is correct. + template + static inline void robustness_handle_meeting(segment_type1 const& a, segment_type2 const& b, + side_info& sides, + T const& dx_a, T const& dy_a, T const& wx, T const& wy, + T const& d, R const& r) + { + return; + + T const db = geometry::detail::determinant(dx_a, dy_a, wx, wy); + + R const zero = 0; + R const one = 1; + if (math::equals(r, zero) || math::equals(r, one)) + { + R rb = db / d; + if (rb <= 0 || rb >= 1 || math::equals(rb, 0) || math::equals(rb, 1)) + { + if (sides.one_zero<0>() && ! sides.one_zero<1>()) // or vice versa + { +#if defined(BOOST_GEOMETRY_COUNT_INTERSECTION_EQUAL) + extern int g_count_intersection_equal; + g_count_intersection_equal++; +#endif + sides.debug(); + std::cout << "E r=" << r << " r.b=" << rb << " "; + } + } + } + } + + template + static inline bool verify_disjoint(segment_type1 const& a, + segment_type2 const& b) + { + coordinate_type a_1, a_2, b_1, b_2; + bool a_swapped = false, b_swapped = false; + detail::segment_arrange(a, a_1, a_2, a_swapped); + detail::segment_arrange(b, b_1, b_2, b_swapped); + return math::smaller(a_2, b_1) || math::larger(a_1, b_2); + } + + template + static inline typename point_type::type select(int index, Segment const& segment) + { + return index == 0 + ? detail::get_from_index<0>(segment) + : detail::get_from_index<1>(segment) + ; + } + + // We cannot use geometry::equals here. Besides that this will be changed + // to compare segment-coordinate-values directly (not necessary to retrieve point first) + template + static inline bool point_equals(Point1 const& point1, Point2 const& point2) + { + return math::equals(get<0>(point1), get<0>(point2)) + && math::equals(get<1>(point1), get<1>(point2)) + ; + } + + // We cannot use geometry::equals here. Besides that this will be changed + // to compare segment-coordinate-values directly (not necessary to retrieve point first) + template + static inline bool point_equality(Point1 const& point1, Point2 const& point2, + bool& equals_0, bool& equals_1) + { + equals_0 = math::equals(get<0>(point1), get<0>(point2)); + equals_1 = math::equals(get<1>(point1), get<1>(point2)); + return equals_0 && equals_1; + } + + template + static inline bool analyse_equal(segment_type1 const& a, segment_type2 const& b) + { + coordinate_type const a_1 = geometry::get<0, Dimension>(a); + coordinate_type const a_2 = geometry::get<1, Dimension>(a); + coordinate_type const b_1 = geometry::get<0, Dimension>(b); + coordinate_type const b_2 = geometry::get<1, Dimension>(b); + return math::equals(a_1, b_1) + || math::equals(a_2, b_1) + || math::equals(a_1, b_2) + || math::equals(a_2, b_2) + ; + } + + template + static inline return_type relate_collinear(segment_type1 const& a, + segment_type2 const& b) + { + coordinate_type a_1, a_2, b_1, b_2; + bool a_swapped = false, b_swapped = false; + detail::segment_arrange(a, a_1, a_2, a_swapped); + detail::segment_arrange(b, b_1, b_2, b_swapped); + if (math::smaller(a_2, b_1) || math::larger(a_1, b_2)) + //if (a_2 < b_1 || a_1 > b_2) + { + return Policy::disjoint(); + } + return relate_collinear(a, b, a_1, a_2, b_1, b_2, a_swapped, b_swapped); + } + /// Relate segments known collinear static inline return_type relate_collinear(segment_type1 const& a , segment_type2 const& b @@ -260,25 +531,28 @@ private : // Handle "equal", in polygon neighbourhood comparisons a common case - // Check if segments are equal... - bool const a1_eq_b1 = math::equals(get<0, 0>(a), get<0, 0>(b)) - && math::equals(get<0, 1>(a), get<0, 1>(b)); - bool const a2_eq_b2 = math::equals(get<1, 0>(a), get<1, 0>(b)) - && math::equals(get<1, 1>(a), get<1, 1>(b)); - if (a1_eq_b1 && a2_eq_b2) + bool const opposite = a_swapped ^ b_swapped; + bool const both_swapped = a_swapped && b_swapped; + + // Check if segments are equal or opposite equal... + bool const swapped_a1_eq_b1 = math::equals(a_1, b_1); + bool const swapped_a2_eq_b2 = math::equals(a_2, b_2); + + if (swapped_a1_eq_b1 && swapped_a2_eq_b2) { - return Policy::segment_equal(a, false); + return Policy::segment_equal(a, opposite); } - // ... or opposite equal - bool const a1_eq_b2 = math::equals(get<0, 0>(a), get<1, 0>(b)) - && math::equals(get<0, 1>(a), get<1, 1>(b)); - bool const a2_eq_b1 = math::equals(get<1, 0>(a), get<0, 0>(b)) - && math::equals(get<1, 1>(a), get<0, 1>(b)); - if (a1_eq_b2 && a2_eq_b1) - { - return Policy::segment_equal(a, true); - } + bool const swapped_a2_eq_b1 = math::equals(a_2, b_1); + bool const swapped_a1_eq_b2 = math::equals(a_1, b_2); + + bool const a1_eq_b1 = both_swapped ? swapped_a2_eq_b2 : a_swapped ? swapped_a2_eq_b1 : b_swapped ? swapped_a1_eq_b2 : swapped_a1_eq_b1; + bool const a2_eq_b2 = both_swapped ? swapped_a1_eq_b1 : a_swapped ? swapped_a1_eq_b2 : b_swapped ? swapped_a2_eq_b1 : swapped_a2_eq_b2; + + bool const a1_eq_b2 = both_swapped ? swapped_a2_eq_b1 : a_swapped ? swapped_a2_eq_b2 : b_swapped ? swapped_a1_eq_b1 : swapped_a1_eq_b2; + bool const a2_eq_b1 = both_swapped ? swapped_a1_eq_b2 : a_swapped ? swapped_a1_eq_b1 : b_swapped ? swapped_a2_eq_b2 : swapped_a2_eq_b1; + + // The rest below will return one or two intersections. @@ -286,7 +560,7 @@ private : // For IM it is important to know which relates to which. So this information is given, // without performance penalties to intersection calculation - bool const has_common_points = a1_eq_b1 || a1_eq_b2 || a2_eq_b1 || a2_eq_b2; + bool const has_common_points = swapped_a1_eq_b1 || swapped_a1_eq_b2 || swapped_a2_eq_b1 || swapped_a2_eq_b2; // "Touch" -> one intersection point -> one but not two common points @@ -306,7 +580,7 @@ private : // #4: a2<----a1 b1--->b2 (no arrival at all) // Where the arranged forms have two forms: // a_1-----a_2/b_1-------b_2 or reverse (B left of A) - if (has_common_points && (math::equals(a_2, b_1) || math::equals(b_2, a_1))) + if ((swapped_a2_eq_b1 || swapped_a1_eq_b2) && ! swapped_a1_eq_b1 && ! swapped_a2_eq_b2) { if (a2_eq_b1) return Policy::collinear_touch(get<1, 0>(a), get<1, 1>(a), 0, -1); if (a1_eq_b2) return Policy::collinear_touch(get<0, 0>(a), get<0, 1>(a), -1, 0); @@ -347,8 +621,8 @@ private : // In robustness it can occur that a point of A is inside B AND a point of B is inside A, // still while has_common_points is true (so one point equals the other). // If that is the case we select on length. - coordinate_type const length_a = abs(a_1 - a_2); - coordinate_type const length_b = abs(b_1 - b_2); + coordinate_type const length_a = geometry::math::abs(a_1 - a_2); + coordinate_type const length_b = geometry::math::abs(b_1 - b_2); if (length_a > length_b) { a_in_b = false; @@ -366,7 +640,6 @@ private : if (a1_eq_b1) return Policy::collinear_interior_boundary_intersect(a_in_b ? a : b, a_in_b, arrival_a, -arrival_a, false); } - bool const opposite = a_swapped ^ b_swapped; // "Inside", a completely within b or b completely within a @@ -428,7 +701,6 @@ private : the picture might seem wrong but it (supposed to be) is right. */ - bool const both_swapped = a_swapped && b_swapped; if (b_1 < a_2 && a_2 < b_2) { // Left column, from bottom to top @@ -450,7 +722,7 @@ private : ; } // Nothing should goes through. If any we have made an error - // Robustness: it can occur here... + // std::cout << "Robustness issue, non-logical behaviour" << std::endl; return Policy::error("Robustness issue, non-logical behaviour"); } }; diff --git a/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp b/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp index 63ad37af35..8b42715e0b 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -177,7 +178,7 @@ public : calculation_type const y1 = boost::numeric_cast(get<1>(p1)); calculation_type const x2 = boost::numeric_cast(get<0>(p2)); calculation_type const y2 = boost::numeric_cast(get<1>(p2)); - calculation_type const ai = x1 * y2 - x2 * y1; + calculation_type const ai = geometry::detail::determinant(p1, p2); state.count++; state.sum_a2 += ai; state.sum_x += ai * (x1 + x2); @@ -187,7 +188,7 @@ public : static inline bool result(sums const& state, Point& centroid) { calculation_type const zero = calculation_type(); - if (state.count > 0 && state.sum_a2 != zero) + if (state.count > 0 && ! math::equals(state.sum_a2, zero)) { calculation_type const v3 = 3; calculation_type const a3 = v3 * state.sum_a2; diff --git a/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp b/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp index bf1e7716e1..48feae51df 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp @@ -1,7 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. -// Copyright (c) 2009-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. +// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp index 063571fc37..13d4168445 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -75,23 +75,27 @@ template class projected_point { public : - typedef typename strategy::distance::services::return_type::type calculation_type; - -private : - // The three typedefs below are necessary to calculate distances // from segments defined in integer coordinates. // Integer coordinates can still result in FP distances. // There is a division, which must be represented in FP. // So promote. - typedef typename promote_floating_point::type fp_type; + typedef typename promote_floating_point + < + typename strategy::distance::services::return_type + < + Strategy + >::type + >::type calculation_type; + +private : // A projected point of points in Integer coordinates must be able to be // represented in FP. typedef model::point < - fp_type, + calculation_type, dimension::value, typename coordinate_system::type > fp_point_type; @@ -139,19 +143,19 @@ public : boost::ignore_unused_variable_warning(strategy); calculation_type const zero = calculation_type(); - fp_type const c1 = dot_product(w, v); + calculation_type const c1 = dot_product(w, v); if (c1 <= zero) { return strategy.apply(p, p1); } - fp_type const c2 = dot_product(v, v); + calculation_type const c2 = dot_product(v, v); if (c2 <= c1) { return strategy.apply(p, p2); } // See above, c1 > 0 AND c2 > c1 so: c2 != 0 - fp_type const b = c1 / c2; + calculation_type const b = c1 / c2; fp_strategy_type fp_strategy = strategy::distance::services::get_similar diff --git a/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp index 2c8ee0f360..51d2722663 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2008-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -22,8 +22,7 @@ #include -#include -#include +#include @@ -82,7 +81,8 @@ template class pythagoras { public : - typedef typename select_calculation_type + + typedef typename util::calculation_type::geometric::binary < Point1, Point2, @@ -136,10 +136,14 @@ class pythagoras { typedef comparable::pythagoras comparable_type; public : - typedef typename promote_floating_point - < - typename services::return_type::type - >::type calculation_type; + typedef typename util::calculation_type::geometric::binary + < + Point1, + Point2, + CalculationType, + double, + double // promote integer to double + >::type calculation_type; /*! \brief applies the distance calculation using pythagoras @@ -219,7 +223,7 @@ struct get_comparable > { typedef comparable::pythagoras comparable_type; public : - static inline comparable_type apply(pythagoras const& input) + static inline comparable_type apply(pythagoras const& ) { return comparable_type(); } @@ -303,7 +307,7 @@ struct get_comparable > { typedef comparable::pythagoras comparable_type; public : - static inline comparable_type apply(comparable::pythagoras const& input) + static inline comparable_type apply(comparable::pythagoras const& ) { return comparable_type(); } diff --git a/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp b/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp new file mode 100644 index 0000000000..275f7550e4 --- /dev/null +++ b/3party/boost/boost/geometry/strategies/cartesian/point_in_box.hpp @@ -0,0 +1,172 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP +#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP + + +#include +#include +#include +#include + + +namespace boost { namespace geometry { namespace strategy +{ + +namespace within +{ + + +struct within_range +{ + template + static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value) + { + return value > min_value && value < max_value; + } +}; + + +struct covered_by_range +{ + template + static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value) + { + return value >= min_value && value <= max_value; + } +}; + + +template +< + typename SubStrategy, + typename Point, + typename Box, + std::size_t Dimension, + std::size_t DimensionCount +> +struct relate_point_box_loop +{ + static inline bool apply(Point const& point, Box const& box) + { + if (! SubStrategy::apply(get(point), + get(box), + get(box)) + ) + { + return false; + } + + return relate_point_box_loop + < + SubStrategy, + Point, Box, + Dimension + 1, DimensionCount + >::apply(point, box); + } +}; + + +template +< + typename SubStrategy, + typename Point, + typename Box, + std::size_t DimensionCount +> +struct relate_point_box_loop +{ + static inline bool apply(Point const& , Box const& ) + { + return true; + } +}; + + +template +< + typename Point, + typename Box, + typename SubStrategy = within_range +> +struct point_in_box +{ + static inline bool apply(Point const& point, Box const& box) + { + return relate_point_box_loop + < + SubStrategy, + Point, Box, + 0, dimension::type::value + >::apply(point, box); + } +}; + + +} // namespace within + + +#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS + + +namespace within { namespace services +{ + +template +struct default_strategy + < + point_tag, box_tag, + point_tag, areal_tag, + cartesian_tag, cartesian_tag, + Point, Box + > +{ + typedef within::point_in_box type; +}; + + +}} // namespace within::services + + +namespace covered_by { namespace services +{ + + +template +struct default_strategy + < + point_tag, box_tag, + point_tag, areal_tag, + cartesian_tag, cartesian_tag, + Point, Box + > +{ + typedef within::point_in_box + < + Point, Box, + within::covered_by_range + > type; +}; + + +}} // namespace covered_by::services + + +#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS + + +}}} // namespace boost::geometry::strategy + + +#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP diff --git a/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp b/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp index a930daa9a8..94da5cc677 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp b/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp index 2ebd22a5f9..a774d3c52d 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp b/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp index b4255c8a12..967090c50a 100644 --- a/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp +++ b/3party/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -17,10 +17,9 @@ #include #include +#include #include - #include - #include @@ -66,7 +65,6 @@ public : CalculationType >::type coordinate_type; -//std::cout << "side: " << typeid(coordinate_type).name() << std::endl; coordinate_type const x = get<0>(p); coordinate_type const y = get<1>(p); @@ -87,9 +85,14 @@ public : promoted_type const dpx = x - sx1; promoted_type const dpy = y - sy1; - promoted_type const s = dx * dpy - dy * dpx; + promoted_type const s + = geometry::detail::determinant + ( + dx, dy, + dpx, dpy + ); - promoted_type zero = promoted_type(); + promoted_type const zero = promoted_type(); return math::equals(s, zero) ? 0 : s > zero ? 1 : -1; diff --git a/3party/boost/boost/geometry/strategies/centroid.hpp b/3party/boost/boost/geometry/strategies/centroid.hpp index abeebeae99..4963e6b40b 100644 --- a/3party/boost/boost/geometry/strategies/centroid.hpp +++ b/3party/boost/boost/geometry/strategies/centroid.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/compare.hpp b/3party/boost/boost/geometry/strategies/compare.hpp index a4b2d8c4d7..2958319229 100644 --- a/3party/boost/boost/geometry/strategies/compare.hpp +++ b/3party/boost/boost/geometry/strategies/compare.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/concepts/area_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/area_concept.hpp index 49ed505c43..75821b52a1 100644 --- a/3party/boost/boost/geometry/strategies/concepts/area_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/area_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -44,11 +44,11 @@ class AreaStrategy { static void apply() { - Strategy const* str; - state_type *st; + Strategy const* str = 0; + state_type *st = 0; // 4) must implement a method apply with the following signature - spoint_type const* sp; + spoint_type const* sp = 0; str->apply(*sp, *sp, *st); // 5) must implement a static method result with the following signature diff --git a/3party/boost/boost/geometry/strategies/concepts/centroid_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/centroid_concept.hpp index c9f2837930..f493ef6810 100644 --- a/3party/boost/boost/geometry/strategies/concepts/centroid_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/centroid_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -45,17 +45,17 @@ class CentroidStrategy { static void apply() { - Strategy *str; - state_type *st; + Strategy *str = 0; + state_type *st = 0; // 4) must implement a static method apply, // getting two segment-points - spoint_type const* sp; + spoint_type const* sp = 0; str->apply(*sp, *sp, *st); // 5) must implement a static method result // getting the centroid - point_type *c; + point_type *c = 0; bool r = str->result(*st, *c); boost::ignore_unused_variable_warning(str); diff --git a/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp index b2e014a1f6..b31f0caa4e 100644 --- a/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp index a29ad63580..ba347d015a 100644 --- a/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/distance_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -19,13 +19,7 @@ #include -#include -#include -#include -#include -#include -#include -#include +#include #include #include @@ -50,40 +44,15 @@ private : template static void apply(ApplyMethod const&) { - namespace ft = boost::function_types; - typedef typename ft::parameter_types - < - ApplyMethod - >::type parameter_types; - - typedef typename boost::mpl::if_ - < - ft::is_member_function_pointer, - boost::mpl::int_<1>, - boost::mpl::int_<0> - >::type base_index; - // 1: inspect and define both arguments of apply - typedef typename boost::remove_reference + typedef typename parameter_type_of < - typename boost::mpl::at - < - parameter_types, - base_index - >::type + ApplyMethod, 0 >::type ptype1; - typedef typename boost::remove_reference + typedef typename parameter_type_of < - typename boost::mpl::at - < - parameter_types, - typename boost::mpl::plus - < - base_index, - boost::mpl::int_<1> - >::type - >::type + ApplyMethod, 1 >::type ptype2; // 2) check if apply-arguments fulfill point concept @@ -120,9 +89,9 @@ private : >::type tag; // 7) must implement apply with arguments - Strategy* str; - ptype1 *p1; - ptype2 *p2; + Strategy* str = 0; + ptype1 *p1 = 0; + ptype2 *p2 = 0; rtype r = str->apply(*p1, *p2); // 8) must define (meta)struct "get_similar" with apply @@ -177,40 +146,14 @@ private : template static void apply(ApplyMethod const&) { - namespace ft = boost::function_types; - typedef typename ft::parameter_types + typedef typename parameter_type_of < - ApplyMethod - >::type parameter_types; - - typedef typename boost::mpl::if_ - < - ft::is_member_function_pointer, - boost::mpl::int_<1>, - boost::mpl::int_<0> - >::type base_index; - - // 1: inspect and define both arguments of apply - typedef typename boost::remove_reference - < - typename boost::mpl::at - < - parameter_types, - base_index - >::type + ApplyMethod, 0 >::type ptype; - typedef typename boost::remove_reference + typedef typename parameter_type_of < - typename boost::mpl::at - < - parameter_types, - typename boost::mpl::plus - < - base_index, - boost::mpl::int_<1> - >::type - >::type + ApplyMethod, 1 >::type sptype; // 2) check if apply-arguments fulfill point concept @@ -236,10 +179,10 @@ private : ); - Strategy *str; - ptype *p; - sptype *sp1; - sptype *sp2; + Strategy *str = 0; + ptype *p = 0; + sptype *sp1 = 0; + sptype *sp2 = 0; rtype r = str->apply(*p, *sp1, *sp2); diff --git a/3party/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp index 9ccf807b94..43bcccf374 100644 --- a/3party/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp index 3afa401d97..92e5156b5a 100644 --- a/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/simplify_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -79,9 +79,9 @@ private : (concept::PointSegmentDistanceStrategy) ); - Strategy *str; - std::vector const* v1; - std::vector * v2; + Strategy *str = 0; + std::vector const* v1 = 0; + std::vector * v2 = 0; // 2) must implement method apply with arguments // - Range diff --git a/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp b/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp index c1f07bc713..a9684b98e1 100644 --- a/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp +++ b/3party/boost/boost/geometry/strategies/concepts/within_concept.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -17,6 +17,9 @@ #include +#include + +#include namespace boost { namespace geometry { namespace concept @@ -24,57 +27,265 @@ namespace boost { namespace geometry { namespace concept /*! - \brief Checks strategy for within (point-in-polygon) - \ingroup within +\brief Checks strategy for within (point-in-polygon) +\ingroup within */ template -class WithinStrategy +class WithinStrategyPolygonal { #ifndef DOXYGEN_NO_CONCEPT_MEMBERS - // 1) must define state_type, + // 1) must define state_type typedef typename Strategy::state_type state_type; - // 2) must define point_type (of "point" in poly) - typedef typename Strategy::point_type point_type; - - // 3) must define point_type, of polygon (segments) - typedef typename Strategy::segment_point_type spoint_type; - - - struct check_methods + struct checker { - static void apply() + template + static void apply(ApplyMethod const&, ResultMethod const& ) { - Strategy const* str; + typedef typename parameter_type_of + < + ApplyMethod, 0 + >::type point_type; + typedef typename parameter_type_of + < + ApplyMethod, 1 + >::type segment_point_type; - state_type* st; - point_type const* p; - spoint_type const* sp; + // CHECK: apply-arguments should both fulfill point concept + BOOST_CONCEPT_ASSERT + ( + (concept::ConstPoint) + ); - // 4) must implement a method apply - // having a point, two segment-points, and state - str->apply(*p, *sp, *sp, *st); + BOOST_CONCEPT_ASSERT + ( + (concept::ConstPoint) + ); - // 5) must implement a method result returning int + // CHECK: return types (result: int, apply: bool) + BOOST_MPL_ASSERT_MSG + ( + (boost::is_same + < + bool, typename boost::function_types::result_type::type + >::type::value), + WRONG_RETURN_TYPE_OF_APPLY + , (bool) + ); + BOOST_MPL_ASSERT_MSG + ( + (boost::is_same + < + int, typename boost::function_types::result_type::type + >::type::value), + WRONG_RETURN_TYPE_OF_RESULT + , (int) + ); + + + // CHECK: calling method apply and result + Strategy const* str = 0; + state_type* st = 0; + point_type const* p = 0; + segment_point_type const* sp = 0; + + bool b = str->apply(*p, *sp, *sp, *st); int r = str->result(*st); boost::ignore_unused_variable_warning(r); + boost::ignore_unused_variable_warning(b); boost::ignore_unused_variable_warning(str); } }; public : - BOOST_CONCEPT_USAGE(WithinStrategy) + BOOST_CONCEPT_USAGE(WithinStrategyPolygonal) { - check_methods::apply(); + checker::apply(&Strategy::apply, &Strategy::result); } #endif }; +template +class WithinStrategyPointBox +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + + struct checker + { + template + static void apply(ApplyMethod const&) + { + typedef typename parameter_type_of + < + ApplyMethod, 0 + >::type point_type; + typedef typename parameter_type_of + < + ApplyMethod, 1 + >::type box_type; + + // CHECK: apply-arguments should fulfill point/box concept + BOOST_CONCEPT_ASSERT + ( + (concept::ConstPoint) + ); + + BOOST_CONCEPT_ASSERT + ( + (concept::ConstBox) + ); + + // CHECK: return types (apply: bool) + BOOST_MPL_ASSERT_MSG + ( + (boost::is_same + < + bool, + typename boost::function_types::result_type::type + >::type::value), + WRONG_RETURN_TYPE + , (bool) + ); -}}} // namespace boost::geometry::concept + // CHECK: calling method apply + Strategy const* str = 0; + point_type const* p = 0; + box_type const* bx = 0; + + bool b = str->apply(*p, *bx); + + boost::ignore_unused_variable_warning(b); + boost::ignore_unused_variable_warning(str); + } + }; + + +public : + BOOST_CONCEPT_USAGE(WithinStrategyPointBox) + { + checker::apply(&Strategy::apply); + } +#endif +}; + +template +class WithinStrategyBoxBox +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + + struct checker + { + template + static void apply(ApplyMethod const&) + { + typedef typename parameter_type_of + < + ApplyMethod, 0 + >::type box_type1; + typedef typename parameter_type_of + < + ApplyMethod, 1 + >::type box_type2; + + // CHECK: apply-arguments should both fulfill box concept + BOOST_CONCEPT_ASSERT + ( + (concept::ConstBox) + ); + + BOOST_CONCEPT_ASSERT + ( + (concept::ConstBox) + ); + + // CHECK: return types (apply: bool) + BOOST_MPL_ASSERT_MSG + ( + (boost::is_same + < + bool, + typename boost::function_types::result_type::type + >::type::value), + WRONG_RETURN_TYPE + , (bool) + ); + + + // CHECK: calling method apply + Strategy const* str = 0; + box_type1 const* b1 = 0; + box_type2 const* b2 = 0; + + bool b = str->apply(*b1, *b2); + + boost::ignore_unused_variable_warning(b); + boost::ignore_unused_variable_warning(str); + } + }; + + +public : + BOOST_CONCEPT_USAGE(WithinStrategyBoxBox) + { + checker::apply(&Strategy::apply); + } +#endif +}; + +// So now: boost::geometry::concept::within +namespace within +{ + +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch +{ + +template +struct check_within +{}; + + +template +struct check_within +{ + BOOST_CONCEPT_ASSERT( (WithinStrategyPolygonal) ); +}; + + +template +struct check_within +{ + BOOST_CONCEPT_ASSERT( (WithinStrategyPointBox) ); +}; + +template +struct check_within +{ + BOOST_CONCEPT_ASSERT( (WithinStrategyBoxBox) ); +}; + + +} // namespace dispatch +#endif + + +/*! +\brief Checks, in compile-time, the concept of any within-strategy +\ingroup concepts +*/ +template +inline void check() +{ + dispatch::check_within c; + boost::ignore_unused_variable_warning(c); +} + + +}}}} // namespace boost::geometry::concept::within + #endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP diff --git a/3party/boost/boost/geometry/strategies/convex_hull.hpp b/3party/boost/boost/geometry/strategies/convex_hull.hpp index 2f46ff90af..f4edc5ba3f 100644 --- a/3party/boost/boost/geometry/strategies/convex_hull.hpp +++ b/3party/boost/boost/geometry/strategies/convex_hull.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -30,7 +30,12 @@ namespace boost { namespace geometry \tparam Geometry the geometry type (hull operates internally per hull over geometry) \tparam Point point-type of output points */ -template +template +< + typename Geometry1, + typename Point, + typename CsTag = typename cs_tag::type +> struct strategy_convex_hull { typedef strategy::not_implemented type; diff --git a/3party/boost/boost/geometry/strategies/covered_by.hpp b/3party/boost/boost/geometry/strategies/covered_by.hpp new file mode 100644 index 0000000000..a878b26c86 --- /dev/null +++ b/3party/boost/boost/geometry/strategies/covered_by.hpp @@ -0,0 +1,72 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP +#define BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP + +#include + + +namespace boost { namespace geometry +{ + + +namespace strategy { namespace covered_by +{ + + +namespace services +{ + +/*! +\brief Traits class binding a covered_by determination strategy to a coordinate system +\ingroup covered_by +\tparam TagContained tag (possibly casted) of point-type +\tparam TagContained tag (possibly casted) of (possibly) containing type +\tparam CsTagContained tag of coordinate system of point-type +\tparam CsTagContaining tag of coordinate system of (possibly) containing type +\tparam Geometry geometry-type of input (often point, or box) +\tparam GeometryContaining geometry-type of input (possibly) containing type +*/ +template +< + typename TagContained, + typename TagContaining, + typename CastedTagContained, + typename CastedTagContaining, + typename CsTagContained, + typename CsTagContaining, + typename GeometryContained, + typename GeometryContaining +> +struct default_strategy +{ + BOOST_MPL_ASSERT_MSG + ( + false, NOT_IMPLEMENTED_FOR_THIS_TYPES + , (types) + ); +}; + + +} // namespace services + + +}} // namespace strategy::covered_by + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP + diff --git a/3party/boost/boost/geometry/strategies/default_area_result.hpp b/3party/boost/boost/geometry/strategies/default_area_result.hpp index 508e91372a..8adfa5d6ea 100644 --- a/3party/boost/boost/geometry/strategies/default_area_result.hpp +++ b/3party/boost/boost/geometry/strategies/default_area_result.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/default_distance_result.hpp b/3party/boost/boost/geometry/strategies/default_distance_result.hpp index ccd06aeffb..ea5f3ff764 100644 --- a/3party/boost/boost/geometry/strategies/default_distance_result.hpp +++ b/3party/boost/boost/geometry/strategies/default_distance_result.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/default_length_result.hpp b/3party/boost/boost/geometry/strategies/default_length_result.hpp index e0e8a7d1f0..706941b9e4 100644 --- a/3party/boost/boost/geometry/strategies/default_length_result.hpp +++ b/3party/boost/boost/geometry/strategies/default_length_result.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/distance.hpp b/3party/boost/boost/geometry/strategies/distance.hpp index 75c624d92e..ef9a7ee10d 100644 --- a/3party/boost/boost/geometry/strategies/distance.hpp +++ b/3party/boost/boost/geometry/strategies/distance.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/intersection.hpp b/3party/boost/boost/geometry/strategies/intersection.hpp index 234d845d6c..fc628c0635 100644 --- a/3party/boost/boost/geometry/strategies/intersection.hpp +++ b/3party/boost/boost/geometry/strategies/intersection.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/intersection_result.hpp b/3party/boost/boost/geometry/strategies/intersection_result.hpp index 018eb87ee3..15917a9eb5 100644 --- a/3party/boost/boost/geometry/strategies/intersection_result.hpp +++ b/3party/boost/boost/geometry/strategies/intersection_result.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/side.hpp b/3party/boost/boost/geometry/strategies/side.hpp index 31587a87c1..376f2fdf1b 100644 --- a/3party/boost/boost/geometry/strategies/side.hpp +++ b/3party/boost/boost/geometry/strategies/side.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/side_info.hpp b/3party/boost/boost/geometry/strategies/side_info.hpp index f2629d53ac..f3a9da0df0 100644 --- a/3party/boost/boost/geometry/strategies/side_info.hpp +++ b/3party/boost/boost/geometry/strategies/side_info.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -44,6 +44,19 @@ public : sides[Which].second = second; } + template + inline void correct_to_zero() + { + if (Index == 0) + { + sides[Which].first = 0; + } + else + { + sides[Which].second = 0; + } + } + template inline int get() const { @@ -67,21 +80,81 @@ public : && sides[1].second == 0; } - // If one of the segments is collinear, the other must be as well. - // So handle it as collinear. - // (In floating point margins it can occur that one of them is 1!) - inline bool as_collinear() const + inline bool crossing() const { - return sides[0].first * sides[0].second == 0 - || sides[1].first * sides[1].second == 0; + return sides[0].first * sides[0].second == -1 + && sides[1].first * sides[1].second == -1; } + inline bool touching() const + { + return (sides[0].first * sides[1].first == -1 + && sides[0].second == 0 && sides[1].second == 0) + || (sides[1].first * sides[0].first == -1 + && sides[1].second == 0 && sides[0].second == 0); + } + + template + inline bool one_touching() const + { + // This is normally a situation which can't occur: + // If one is completely left or right, the other cannot touch + return one_zero() + && sides[1 - Which].first * sides[1 - Which].second == 1; + } + + inline bool meeting() const + { + // Two of them (in each segment) zero, two not + return one_zero<0>() && one_zero<1>(); + } + + template + inline bool zero() const + { + return sides[Which].first == 0 && sides[Which].second == 0; + } + + template + inline bool one_zero() const + { + return (sides[Which].first == 0 && sides[Which].second != 0) + || (sides[Which].first != 0 && sides[Which].second == 0); + } + + inline bool one_of_all_zero() const + { + int const sum = std::abs(sides[0].first) + + std::abs(sides[0].second) + + std::abs(sides[1].first) + + std::abs(sides[1].second); + return sum == 3; + } + + + template + inline int zero_index() const + { + return sides[Which].first == 0 ? 0 : 1; + } + + + inline void debug() const + { + std::cout << sides[0].first << " " + << sides[0].second << " " + << sides[1].first << " " + << sides[1].second + << std::endl; + } + + inline void reverse() { std::swap(sides[0], sides[1]); } -private : +//private : std::pair sides[2]; }; diff --git a/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp b/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp index 0b739dcefb..1bef9b5f2f 100644 --- a/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp +++ b/3party/boost/boost/geometry/strategies/spherical/area_huiller.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/spherical/compare_circular.hpp b/3party/boost/boost/geometry/strategies/spherical/compare_circular.hpp index fee1e2b7e1..2f890dfd87 100644 --- a/3party/boost/boost/geometry/strategies/spherical/compare_circular.hpp +++ b/3party/boost/boost/geometry/strategies/spherical/compare_circular.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp b/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp index f902591bfa..7b353020eb 100644 --- a/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp +++ b/3party/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -26,7 +26,7 @@ #include #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK -# include +# include #endif @@ -101,23 +101,56 @@ public : { // http://williams.best.vwh.net/avform.htm#XTE return_type d1 = m_strategy.apply(sp1, p); + return_type d3 = m_strategy.apply(sp1, sp2); + + if (geometry::math::equals(d3, 0.0)) + { + // "Degenerate" segment, return either d1 or d2 + return d1; + } - // Actually, calculation of d2 not necessary if we know that the projected point is on the great circle... return_type d2 = m_strategy.apply(sp2, p); return_type crs_AD = course(sp1, p); return_type crs_AB = course(sp1, sp2); - return_type XTD = m_radius * geometry::math::abs(asin(sin(d1 / m_radius) * sin(crs_AD - crs_AB))); + return_type crs_BA = crs_AB - geometry::math::pi(); + return_type crs_BD = course(sp2, p); + return_type d_crs1 = crs_AD - crs_AB; + return_type d_crs2 = crs_BD - crs_BA; + + // d1, d2, d3 are in principle not needed, only the sign matters + return_type projection1 = cos( d_crs1 ) * d1 / d3; + return_type projection2 = cos( d_crs2 ) * d2 / d3; #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK -std::cout << "Course " << dsv(sp1) << " to " << dsv(p) << " " << crs_AD * geometry::math::r2d << std::endl; -std::cout << "Course " << dsv(sp1) << " to " << dsv(sp2) << " " << crs_AB * geometry::math::r2d << std::endl; -std::cout << "XTD: " << XTD << " d1: " << d1 << " d2: " << d2 << std::endl; + std::cout << "Course " << dsv(sp1) << " to " << dsv(p) << " " << crs_AD * geometry::math::r2d << std::endl; + std::cout << "Course " << dsv(sp1) << " to " << dsv(sp2) << " " << crs_AB * geometry::math::r2d << std::endl; + std::cout << "Course " << dsv(sp2) << " to " << dsv(p) << " " << crs_BD * geometry::math::r2d << std::endl; + std::cout << "Projection AD-AB " << projection1 << " : " << d_crs1 * geometry::math::r2d << std::endl; + std::cout << "Projection BD-BA " << projection2 << " : " << d_crs2 * geometry::math::r2d << std::endl; #endif + if(projection1 > 0.0 && projection2 > 0.0) + { + return_type XTD = m_radius * geometry::math::abs( asin( sin( d1 / m_radius ) * sin( d_crs1 ) )); - // Return shortest distance, either to projected point on segment sp1-sp2, or to sp1, or to sp2 - return return_type((std::min)((std::min)(d1, d2), XTD)); + #ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK + std::cout << "Projection ON the segment" << std::endl; + std::cout << "XTD: " << XTD << " d1: " << d1 << " d2: " << d2 << std::endl; +#endif + + // Return shortest distance, projected point on segment sp1-sp2 + return return_type(XTD); + } + else + { +#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK + std::cout << "Projection OUTSIDE the segment" << std::endl; +#endif + + // Return shortest distance, project either on point sp1 or sp2 + return return_type( (std::min)( d1 , d2 ) ); + } } inline return_type radius() const { return m_radius; } diff --git a/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp b/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp index eb9bf553b3..59ec1c33ff 100644 --- a/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp +++ b/3party/boost/boost/geometry/strategies/spherical/distance_haversine.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp b/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp index e96f2e7e72..b7cf279d5b 100644 --- a/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp +++ b/3party/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/spherical/ssf.hpp b/3party/boost/boost/geometry/strategies/spherical/ssf.hpp index f0d2334e04..ab7c67559a 100644 --- a/3party/boost/boost/geometry/strategies/spherical/ssf.hpp +++ b/3party/boost/boost/geometry/strategies/spherical/ssf.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2011 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/geometry/strategies/strategies.hpp b/3party/boost/boost/geometry/strategies/strategies.hpp index 25369a7bfb..3aa9ab00f5 100644 --- a/3party/boost/boost/geometry/strategies/strategies.hpp +++ b/3party/boost/boost/geometry/strategies/strategies.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -28,10 +28,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -43,6 +45,7 @@ #include #include +#include #include #include diff --git a/3party/boost/boost/geometry/strategies/strategy_transform.hpp b/3party/boost/boost/geometry/strategies/strategy_transform.hpp index 34e19fc774..61a408c617 100644 --- a/3party/boost/boost/geometry/strategies/strategy_transform.hpp +++ b/3party/boost/boost/geometry/strategies/strategy_transform.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -23,7 +23,9 @@ #include #include #include +#include #include +#include #include #include @@ -66,7 +68,7 @@ template struct transform_coordinates { template - static inline void transform(Src const& source, Dst& dest, T value) + static inline void transform(Src const& , Dst& , T ) { } }; @@ -222,6 +224,17 @@ namespace detail set_from_radian<1>(p, acos(z)); return true; } + + template + inline bool cartesian_to_spherical_equatorial2(T x, T y, T z, P& p) + { + assert_dimension(); + + set_from_radian<0>(p, atan2(y, x)); + set_from_radian<1>(p, asin(z)); + return true; + } + template inline bool cartesian_to_spherical3(T x, T y, T z, P& p) @@ -240,6 +253,23 @@ namespace detail return false; } + template + inline bool cartesian_to_spherical_equatorial3(T x, T y, T z, P& p) + { + assert_dimension(); + + // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates + T const r = sqrt(x * x + y * y + z * z); + set<2>(p, r); + set_from_radian<0>(p, atan2(y, x)); + if (r > 0.0) + { + set_from_radian<1>(p, asin(z / r)); + return true; + } + return false; + } + } // namespace detail #endif // DOXYGEN_NO_DETAIL @@ -323,6 +353,16 @@ struct from_cartesian_3_to_spherical_polar_2 } }; +template +struct from_cartesian_3_to_spherical_equatorial_2 +{ + inline bool apply(P1 const& p1, P2& p2) const + { + assert_dimension(); + return detail::cartesian_to_spherical_equatorial2(get<0>(p1), get<1>(p1), get<2>(p1), p2); + } +}; + /*! \brief Transformation strategy for 3D cartesian (x,y,z) to 3D spherical (phi,theta,r) @@ -340,6 +380,16 @@ struct from_cartesian_3_to_spherical_polar_3 } }; +template +struct from_cartesian_3_to_spherical_equatorial_3 +{ + inline bool apply(P1 const& p1, P2& p2) const + { + assert_dimension(); + return detail::cartesian_to_spherical_equatorial3(get<0>(p1), get<1>(p1), get<2>(p1), p2); + } +}; + #ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS namespace services @@ -421,12 +471,23 @@ struct default_strategy type; }; +template +struct default_strategy +{ + typedef from_cartesian_3_to_spherical_equatorial_2 type; +}; + /// Specialization to transform from XYZ to sphere(phi,theta,r) template struct default_strategy { typedef from_cartesian_3_to_spherical_polar_3 type; }; +template +struct default_strategy +{ + typedef from_cartesian_3_to_spherical_equatorial_3 type; +}; } // namespace services diff --git a/3party/boost/boost/geometry/strategies/tags.hpp b/3party/boost/boost/geometry/strategies/tags.hpp index dce418e9a9..39f2f23036 100644 --- a/3party/boost/boost/geometry/strategies/tags.hpp +++ b/3party/boost/boost/geometry/strategies/tags.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/transform.hpp b/3party/boost/boost/geometry/strategies/transform.hpp index 60e77dceee..3c806acac6 100644 --- a/3party/boost/boost/geometry/strategies/transform.hpp +++ b/3party/boost/boost/geometry/strategies/transform.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp b/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp index 1ff889e3bc..845a71ded3 100644 --- a/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp +++ b/3party/boost/boost/geometry/strategies/transform/inverse_transformer.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp b/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp index 56087432ea..150ff1de9b 100644 --- a/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp +++ b/3party/boost/boost/geometry/strategies/transform/map_transformer.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp b/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp index 196d43388f..68da240934 100644 --- a/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp +++ b/3party/boost/boost/geometry/strategies/transform/matrix_transformers.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -218,7 +218,7 @@ public : // constructor takes an optional third argument doing nothing. inline translate_transformer(coordinate_type const& translate_x, coordinate_type const& translate_y, - coordinate_type const& dummy = 0) + coordinate_type const& = 0) : ublas_transformer( 1, 0, translate_x, 0, 1, translate_y, @@ -275,7 +275,7 @@ class scale_transformer : public ublas_transformer public : inline scale_transformer(coordinate_type const& scale_x, coordinate_type const& scale_y, - coordinate_type const& dummy = 0) + coordinate_type const& = 0) : ublas_transformer( scale_x, 0, 0, 0, scale_y, 0, diff --git a/3party/boost/boost/geometry/strategies/within.hpp b/3party/boost/boost/geometry/strategies/within.hpp index ca61156b8a..0852a22d2d 100644 --- a/3party/boost/boost/geometry/strategies/within.hpp +++ b/3party/boost/boost/geometry/strategies/within.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -16,7 +16,6 @@ #include -#include namespace boost { namespace geometry { @@ -29,28 +28,32 @@ namespace services { /*! - \brief Traits class binding a within determination strategy to a coordinate system - \ingroup within - \tparam CsTagContained tag of coordinate system of point-type - \tparam CsTagContained tag of coordinate system of segment-type - \tparam Point point-type of input points - \tparam PointContaining point-type of input segment-points +\brief Traits class binding a within determination strategy to a coordinate system +\ingroup within +\tparam TagContained tag (possibly casted) of point-type +\tparam TagContained tag (possibly casted) of (possibly) containing type +\tparam CsTagContained tag of coordinate system of point-type +\tparam CsTagContaining tag of coordinate system of (possibly) containing type +\tparam Geometry geometry-type of input (often point, or box) +\tparam GeometryContaining geometry-type of input (possibly) containing type */ template < typename TagContained, typename TagContaining, + typename CastedTagContained, + typename CastedTagContaining, typename CsTagContained, typename CsTagContaining, - typename Point, - typename PointContaining + typename GeometryContained, + typename GeometryContaining > struct default_strategy { BOOST_MPL_ASSERT_MSG ( false, NOT_IMPLEMENTED_FOR_THIS_TYPES - , (types) + , (types) ); }; diff --git a/3party/boost/boost/geometry/util/add_const_if_c.hpp b/3party/boost/boost/geometry/util/add_const_if_c.hpp index 7ef07d281b..9e0c01299c 100644 --- a/3party/boost/boost/geometry/util/add_const_if_c.hpp +++ b/3party/boost/boost/geometry/util/add_const_if_c.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/bare_type.hpp b/3party/boost/boost/geometry/util/bare_type.hpp new file mode 100644 index 0000000000..1b49de6436 --- /dev/null +++ b/3party/boost/boost/geometry/util/bare_type.hpp @@ -0,0 +1,38 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2012 Bruno Lalande, Paris, France. +// Copyright (c) 2012 Mateusz Loskot, London, UK. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP +#define BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP + +#include + + +namespace boost { namespace geometry +{ + +namespace util +{ + +template +struct bare_type +{ + typedef typename boost::remove_const + < + typename boost::remove_pointer::type + >::type type; +}; + + +} // namespace util + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP diff --git a/3party/boost/boost/geometry/util/calculation_type.hpp b/3party/boost/boost/geometry/util/calculation_type.hpp new file mode 100644 index 0000000000..aef58909e7 --- /dev/null +++ b/3party/boost/boost/geometry/util/calculation_type.hpp @@ -0,0 +1,176 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2012 Bruno Lalande, Paris, France. +// Copyright (c) 2012 Mateusz Loskot, London, UK. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP +#define BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP + +#include +#include +#include + +#include +#include + + +namespace boost { namespace geometry +{ + +namespace util +{ + +namespace detail +{ + +struct default_integral +{ +#ifdef BOOST_HAS_LONG_LONG + typedef boost::long_long_type type; +#else + typedef int type; +#endif +}; + +/*! +\details Selects the most appropriate: + - if calculation type is specified (not void), that one is used + - else if type is non-fundamental (user defined e.g. ttmath), that one + - else if type is floating point, the specified default FP is used + - else it is integral and the specified default integral is used + */ +template +< + typename Type, + typename CalculationType, + typename DefaultFloatingPointCalculationType, + typename DefaultIntegralCalculationType +> +struct calculation_type +{ + BOOST_STATIC_ASSERT(( + boost::is_fundamental + < + DefaultFloatingPointCalculationType + >::type::value + )); + BOOST_STATIC_ASSERT(( + boost::is_fundamental + < + DefaultIntegralCalculationType + >::type::value + )); + + + typedef typename boost::mpl::if_ + < + boost::is_void, + typename boost::mpl::if_ + < + boost::is_floating_point, + typename select_most_precise + < + DefaultFloatingPointCalculationType, + Type + >::type, + typename select_most_precise + < + DefaultIntegralCalculationType, + Type + >::type + >::type, + CalculationType + >::type type; +}; + +} // namespace detail + + +namespace calculation_type +{ + +namespace geometric +{ + +template +< + typename Geometry, + typename CalculationType, + typename DefaultFloatingPointCalculationType = double, + typename DefaultIntegralCalculationType = detail::default_integral::type +> +struct unary +{ + typedef typename detail::calculation_type + < + typename geometry::coordinate_type::type, + CalculationType, + DefaultFloatingPointCalculationType, + DefaultIntegralCalculationType + >::type type; +}; + +template +< + typename Geometry1, + typename Geometry2, + typename CalculationType, + typename DefaultFloatingPointCalculationType = double, + typename DefaultIntegralCalculationType = detail::default_integral::type +> +struct binary +{ + typedef typename detail::calculation_type + < + typename select_coordinate_type::type, + CalculationType, + DefaultFloatingPointCalculationType, + DefaultIntegralCalculationType + >::type type; +}; + + +/*! +\brief calculation type (ternary, for three geometry types) + */ +template +< + typename Geometry1, + typename Geometry2, + typename Geometry3, + typename CalculationType, + typename DefaultFloatingPointCalculationType = double, + typename DefaultIntegralCalculationType = detail::default_integral::type +> +struct ternary +{ + typedef typename detail::calculation_type + < + typename select_most_precise + < + typename coordinate_type::type, + typename select_coordinate_type + < + Geometry2, + Geometry3 + >::type + >::type, + CalculationType, + DefaultFloatingPointCalculationType, + DefaultIntegralCalculationType + >::type type; +}; + +}} // namespace calculation_type::geometric + +} // namespace util + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP diff --git a/3party/boost/boost/geometry/util/closure_as_bool.hpp b/3party/boost/boost/geometry/util/closure_as_bool.hpp index 42e841ba32..57fcd52800 100644 --- a/3party/boost/boost/geometry/util/closure_as_bool.hpp +++ b/3party/boost/boost/geometry/util/closure_as_bool.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/coordinate_cast.hpp b/3party/boost/boost/geometry/util/coordinate_cast.hpp index 0683c532ec..16a15cca5b 100644 --- a/3party/boost/boost/geometry/util/coordinate_cast.hpp +++ b/3party/boost/boost/geometry/util/coordinate_cast.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/for_each_coordinate.hpp b/3party/boost/boost/geometry/util/for_each_coordinate.hpp index b099acd141..7a1f55b00b 100644 --- a/3party/boost/boost/geometry/util/for_each_coordinate.hpp +++ b/3party/boost/boost/geometry/util/for_each_coordinate.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -54,7 +54,7 @@ struct coordinates_scanner < IsConst, Point - >::type& point, Op operation) + >::type& , Op operation) { return operation; } diff --git a/3party/boost/boost/geometry/util/math.hpp b/3party/boost/boost/geometry/util/math.hpp index edd9ab0d35..95cbdf2ce4 100644 --- a/3party/boost/boost/geometry/util/math.hpp +++ b/3party/boost/boost/geometry/util/math.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -44,11 +44,43 @@ struct equals template struct equals { + static inline Type get_max(Type const& a, Type const& b, Type const& c) + { + return (std::max)((std::max)(a, b), c); + } + static inline bool apply(Type const& a, Type const& b) { + if (a == b) + { + return true; + } + // See http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.17, // FUTURE: replace by some boost tool or boost::test::close_at_tolerance - return std::abs(a - b) <= std::numeric_limits::epsilon() * std::abs(a); + return std::abs(a - b) <= std::numeric_limits::epsilon() * get_max(std::abs(a), std::abs(b), 1.0); + } +}; + +template +struct smaller +{ + static inline bool apply(Type const& a, Type const& b) + { + return a < b; + } +}; + +template +struct smaller +{ + static inline bool apply(Type const& a, Type const& b) + { + if (equals::apply(a, b)) + { + return false; + } + return a < b; } }; @@ -116,6 +148,28 @@ inline bool equals_with_epsilon(T1 const& a, T2 const& b) >::apply(a, b); } +template +inline bool smaller(T1 const& a, T2 const& b) +{ + typedef typename select_most_precise::type select_type; + return detail::smaller + < + select_type, + boost::is_floating_point::type::value + >::apply(a, b); +} + +template +inline bool larger(T1 const& a, T2 const& b) +{ + typedef typename select_most_precise::type select_type; + return detail::smaller + < + select_type, + boost::is_floating_point::type::value + >::apply(b, a); +} + double const d2r = geometry::math::pi() / 180.0; diff --git a/3party/boost/boost/geometry/util/order_as_direction.hpp b/3party/boost/boost/geometry/util/order_as_direction.hpp index 7e6f6143bb..6895ebf3f1 100644 --- a/3party/boost/boost/geometry/util/order_as_direction.hpp +++ b/3party/boost/boost/geometry/util/order_as_direction.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/parameter_type_of.hpp b/3party/boost/boost/geometry/util/parameter_type_of.hpp new file mode 100644 index 0000000000..b8872d52bf --- /dev/null +++ b/3party/boost/boost/geometry/util/parameter_type_of.hpp @@ -0,0 +1,75 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP +#define BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP + + +#include +#include +#include +#include +#include +#include +#include + + +namespace boost { namespace geometry +{ + + +/*! +\brief Meta-function selecting a parameter type of a (member) function, by index +\ingroup utility + */ +template +struct parameter_type_of +{ + typedef typename boost::function_types::parameter_types + < + Method + >::type parameter_types; + + typedef typename boost::mpl::if_ + < + boost::function_types::is_member_function_pointer, + boost::mpl::int_<1>, + boost::mpl::int_<0> + >::type base_index_type; + + typedef typename boost::mpl::if_c + < + Index == 0, + base_index_type, + typename boost::mpl::plus + < + base_index_type, + boost::mpl::int_ + >::type + >::type indexed_type; + + typedef typename boost::remove_reference + < + typename boost::mpl::at + < + parameter_types, + indexed_type + >::type + >::type type; +}; + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP diff --git a/3party/boost/boost/geometry/util/promote_floating_point.hpp b/3party/boost/boost/geometry/util/promote_floating_point.hpp index 75ff24f5ad..0c74cb8d6c 100644 --- a/3party/boost/boost/geometry/util/promote_floating_point.hpp +++ b/3party/boost/boost/geometry/util/promote_floating_point.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/rational.hpp b/3party/boost/boost/geometry/util/rational.hpp new file mode 100644 index 0000000000..45bee20460 --- /dev/null +++ b/3party/boost/boost/geometry/util/rational.hpp @@ -0,0 +1,179 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2011-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2011-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to 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 BOOST_GEOMETRY_UTIL_RATIONAL_HPP +#define BOOST_GEOMETRY_UTIL_RATIONAL_HPP + +#include +#include + +#include +#include + + +namespace boost{ namespace geometry +{ + + +// Specialize for Boost.Geometry's coordinate cast +// (from string to coordinate type) +namespace detail +{ + +template +struct coordinate_cast > +{ + static inline void split_parts(std::string const& source, std::string::size_type p, + T& before, T& after, bool& negate, std::string::size_type& len) + { + std::string before_part = source.substr(0, p); + std::string const after_part = source.substr(p + 1); + + negate = false; + + if (before_part.size() > 0 && before_part[0] == '-') + { + negate = true; + before_part.erase(0, 1); + } + before = atol(before_part.c_str()); + after = atol(after_part.c_str()); + len = after_part.length(); + } + + + static inline rational apply(std::string const& source) + { + T before, after; + bool negate; + std::string::size_type len; + + // Note: decimal comma is not (yet) supported, it does (and should) not + // occur in a WKT, where points are comma separated. + std::string::size_type p = source.find("."); + if (p == std::string::npos) + { + p = source.find("/"); + if (p == std::string::npos) + { + return rational(atol(source.c_str())); + } + split_parts(source, p, before, after, negate, len); + + return negate + ? -rational(before, after) + : rational(before, after) + ; + + } + + split_parts(source, p, before, after, negate, len); + + T den = 1; + for (std::string::size_type i = 0; i < len; i++) + { + den *= 10; + } + + return negate + ? -rational(before) - rational(after, den) + : rational(before) + rational(after, den) + ; + } +}; + +} // namespace detail + +// Specialize for Boost.Geometry's select_most_precise +template +struct select_most_precise, boost::rational > +{ + typedef typename boost::rational + < + typename select_most_precise::type + > type; +}; + +template +struct select_most_precise, double> +{ + typedef typename boost::rational type; +}; + + +}} // namespace boost::geometry + + +// Specializes boost::rational to boost::numeric::bounds +namespace boost { namespace numeric +{ + +template +struct bounds > +{ + static inline rational lowest() + { + return rational(bounds::lowest(), 1); + } + static inline rational highest() + { + return rational(bounds::highest(), 1); + } +}; + +}} // namespace boost::numeric + + +// Support for boost::numeric_cast to int and to double (necessary for SVG-mapper) +namespace boost { namespace numeric +{ + +template +< + typename T, + typename Traits, + typename OverflowHandler, + typename Float2IntRounder, + typename RawConverter, + typename UserRangeChecker +> +struct converter, Traits, OverflowHandler, Float2IntRounder, RawConverter, UserRangeChecker> +{ + static inline int convert(rational const& arg) + { + return int(rational_cast(arg)); + } +}; + +template +< + typename T, + typename Traits, + typename OverflowHandler, + typename Float2IntRounder, + typename RawConverter, + typename UserRangeChecker +> +struct converter, Traits, OverflowHandler, Float2IntRounder, RawConverter, UserRangeChecker> +{ + static inline double convert(rational const& arg) + { + return rational_cast(arg); + } +}; + + +}} + + +#endif // BOOST_GEOMETRY_UTIL_RATIONAL_HPP diff --git a/3party/boost/boost/geometry/util/select_calculation_type.hpp b/3party/boost/boost/geometry/util/select_calculation_type.hpp index 83096f134c..4946c45e84 100644 --- a/3party/boost/boost/geometry/util/select_calculation_type.hpp +++ b/3party/boost/boost/geometry/util/select_calculation_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/select_coordinate_type.hpp b/3party/boost/boost/geometry/util/select_coordinate_type.hpp index 4b65715ef3..8309da42b7 100644 --- a/3party/boost/boost/geometry/util/select_coordinate_type.hpp +++ b/3party/boost/boost/geometry/util/select_coordinate_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/util/select_most_precise.hpp b/3party/boost/boost/geometry/util/select_most_precise.hpp index 51d33d7fe9..d55fdbfd98 100644 --- a/3party/boost/boost/geometry/util/select_most_precise.hpp +++ b/3party/boost/boost/geometry/util/select_most_precise.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/views/box_view.hpp b/3party/boost/boost/geometry/views/box_view.hpp index 15cc8f9c88..26608b0860 100644 --- a/3party/boost/boost/geometry/views/box_view.hpp +++ b/3party/boost/boost/geometry/views/box_view.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/views/closeable_view.hpp b/3party/boost/boost/geometry/views/closeable_view.hpp index 00ff06e67e..376246d2dc 100644 --- a/3party/boost/boost/geometry/views/closeable_view.hpp +++ b/3party/boost/boost/geometry/views/closeable_view.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/views/detail/points_view.hpp b/3party/boost/boost/geometry/views/detail/points_view.hpp index 2291843f7f..91fbc41c19 100644 --- a/3party/boost/boost/geometry/views/detail/points_view.hpp +++ b/3party/boost/boost/geometry/views/detail/points_view.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/views/detail/range_type.hpp b/3party/boost/boost/geometry/views/detail/range_type.hpp index 9fc1fff3f1..a40670cf99 100644 --- a/3party/boost/boost/geometry/views/detail/range_type.hpp +++ b/3party/boost/boost/geometry/views/detail/range_type.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -15,12 +15,14 @@ #define BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP +#include #include #include #include #include +#include namespace boost { namespace geometry { @@ -34,19 +36,24 @@ namespace dispatch template struct range_type { - // Even if it is not recognized, define itself as a type. - // This enables calling range_type over any range - // (not necessarily a geometry) - - // Furthermore, applicable for ring/linestring - typedef Geometry type; + BOOST_MPL_ASSERT_MSG + ( + false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE + , (types) + ); }; template -struct range_type +struct range_type { - typedef void type; + typedef Geometry type; +}; + +template +struct range_type +{ + typedef Geometry type; }; @@ -56,6 +63,12 @@ struct range_type typedef typename ring_type::type type; }; +template +struct range_type +{ + typedef box_view type; +}; + } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH diff --git a/3party/boost/boost/geometry/views/identity_view.hpp b/3party/boost/boost/geometry/views/identity_view.hpp index 1d06bd1998..5ce6e8e6d6 100644 --- a/3party/boost/boost/geometry/views/identity_view.hpp +++ b/3party/boost/boost/geometry/views/identity_view.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/views/reversible_view.hpp b/3party/boost/boost/geometry/views/reversible_view.hpp index 0f9357ef27..ad22136c81 100644 --- a/3party/boost/boost/geometry/views/reversible_view.hpp +++ b/3party/boost/boost/geometry/views/reversible_view.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/geometry/views/segment_view.hpp b/3party/boost/boost/geometry/views/segment_view.hpp index 11984d4d9b..50ff617a8d 100644 --- a/3party/boost/boost/geometry/views/segment_view.hpp +++ b/3party/boost/boost/geometry/views/segment_view.hpp @@ -1,8 +1,8 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2008-2011 Bruno Lalande, Paris, France. -// Copyright (c) 2009-2011 Mateusz Loskot, London, UK. +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. diff --git a/3party/boost/boost/graph/adj_list_serialize.hpp b/3party/boost/boost/graph/adj_list_serialize.hpp index c1ff4111d0..01db50282f 100644 --- a/3party/boost/boost/graph/adj_list_serialize.hpp +++ b/3party/boost/boost/graph/adj_list_serialize.hpp @@ -61,6 +61,8 @@ inline void save( ar << serialization::make_nvp("v" , indices[target(e,graph)]); ar << serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) ); } + + ar << serialization::make_nvp("graph_property", get_property(graph, graph_all_t()) ); } @@ -95,6 +97,7 @@ inline void load( boost::tie(e,inserted) = add_edge(verts[u], verts[v], graph); ar >> serialization::make_nvp("edge_property", get(edge_all_t(), graph, e) ); } + ar >> serialization::make_nvp("graph_property", get_property(graph, graph_all_t()) ); } template diff --git a/3party/boost/boost/graph/adjacency_list.hpp b/3party/boost/boost/graph/adjacency_list.hpp index 5034fec5a5..21b7500d26 100644 --- a/3party/boost/boost/graph/adjacency_list.hpp +++ b/3party/boost/boost/graph/adjacency_list.hpp @@ -51,11 +51,6 @@ namespace boost { // adjacency_list, and the container_gen traits class which is used // to map the selectors to the container type used to implement the // graph. - // - // The main container_gen traits class uses partial specialization, - // so we also include a workaround. - -#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #if !defined BOOST_NO_SLIST struct slistS {}; @@ -130,93 +125,6 @@ namespace boost { typedef boost::unordered_multiset type; }; -#else // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - -#if !defined BOOST_NO_SLIST - struct slistS { - template - struct bind_ { typedef BOOST_STD_EXTENSION_NAMESPACE::slist type; }; - }; -#endif - - struct vecS { - template - struct bind_ { typedef std::vector type; }; - }; - - struct listS { - template - struct bind_ { typedef std::list type; }; - }; - - struct setS { - template - struct bind_ { typedef std::set > type; }; - }; - - - struct mapS { - template - struct bind_ { typedef std::set > type; }; - }; - - struct multisetS { - template - struct bind_ { typedef std::multiset > type; }; - }; - - struct multimapS { - template - struct bind_ { typedef std::multiset > type; }; - }; - - struct hash_setS { - template - struct bind_ { typedef boost::unordered_set type; }; - }; - - struct hash_mapS { - template - struct bind_ { typedef boost::unordered_set type; }; - }; - - struct hash_multisetS { - template - struct bind_ { typedef boost::unordered_multiset type; }; - }; - - struct hash_multimapS { - template - struct bind_ { typedef boost::unordered_multiset type; }; - }; - - template struct container_selector { - typedef vecS type; - }; - -#define BOOST_CONTAINER_SELECTOR(NAME) \ - template <> struct container_selector { \ - typedef NAME type; \ - } - - BOOST_CONTAINER_SELECTOR(vecS); - BOOST_CONTAINER_SELECTOR(listS); - BOOST_CONTAINER_SELECTOR(mapS); - BOOST_CONTAINER_SELECTOR(setS); - BOOST_CONTAINER_SELECTOR(multisetS); - BOOST_CONTAINER_SELECTOR(hash_mapS); -#if !defined BOOST_NO_SLIST - BOOST_CONTAINER_SELECTOR(slistS); -#endif - - template - struct container_gen { - typedef typename container_selector::type Select; - typedef typename Select:: template bind_::type type; - }; - -#endif // !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - template struct parallel_edge_traits { }; @@ -354,13 +262,7 @@ namespace boost { adjacency_list, VertexListS, OutEdgeListS, DirectedS, -#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES) - typename detail::retag_property_list::type, - typename detail::retag_property_list::type, -#else VertexProperty, EdgeProperty, -#endif GraphProperty, EdgeListS>::type, // Support for named vertices public graph::maybe_named_graph< @@ -371,25 +273,14 @@ namespace boost { VertexProperty> { public: -#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES) - typedef typename graph_detail::graph_prop::property graph_property_type; - typedef typename graph_detail::graph_prop::bundle graph_bundled; - - typedef typename graph_detail::vertex_prop::property vertex_property_type; - typedef typename graph_detail::vertex_prop::bundle vertex_bundled; - - typedef typename graph_detail::edge_prop::property edge_property_type; - typedef typename graph_detail::edge_prop::bundle edge_bundled; -#else typedef GraphProperty graph_property_type; - typedef no_graph_bundle graph_bundled; + typedef typename lookup_one_property::type graph_bundled; typedef VertexProperty vertex_property_type; - typedef no_vertex_bundle vertex_bundled; + typedef typename lookup_one_property::type vertex_bundled; typedef EdgeProperty edge_property_type; - typedef no_edge_bundle edge_bundled; -#endif + typedef typename lookup_one_property::type edge_bundled; private: typedef adjacency_list self; @@ -502,20 +393,20 @@ namespace boost { #define ADJLIST adjacency_list template - inline void set_property(ADJLIST& g, Tag, Value const& value) { - get_property_value(*g.m_property, Tag()) = value; + inline void set_property(ADJLIST& g, Tag tag, Value const& value) { + get_property_value(*g.m_property, tag) = value; } template inline typename graph_property::type& - get_property(ADJLIST& g, Tag) { - return get_property_value(*g.m_property, Tag()); + get_property(ADJLIST& g, Tag tag) { + return get_property_value(*g.m_property, tag); } template inline typename graph_property::type const& - get_property(ADJLIST const& g, Tag) { - return get_property_value(*g.m_property, Tag()); + get_property(ADJLIST const& g, Tag tag) { + return get_property_value(*g.m_property, tag); } // dwa 09/25/00 - needed to be more explicit so reverse_graph would work. @@ -545,58 +436,6 @@ namespace boost { return e.m_target; } - // Support for bundled properties -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES - template - inline - typename property_map, T Bundle::*>::type - get(T Bundle::* p, adjacency_list& g) - { - typedef typename property_map, T Bundle::*>::type - result_type; - return result_type(&g, p); - } - - template - inline - typename property_map, T Bundle::*>::const_type - get(T Bundle::* p, adjacency_list const & g) - { - typedef typename property_map, T Bundle::*>::const_type - result_type; - return result_type(&g, p); - } - - template - inline T - get(T Bundle::* p, adjacency_list const & g, const Key& key) - { - return get(get(p, g), key); - } - - template - inline void - put(T Bundle::* p, adjacency_list& g, const Key& key, const T& value) - { - put(get(p, g), key, value); - } - -#endif - // Mutability Traits template struct graph_mutability_traits { diff --git a/3party/boost/boost/graph/adjacency_list_io.hpp b/3party/boost/boost/graph/adjacency_list_io.hpp index 91b0b465d7..aaba8a43c3 100644 --- a/3party/boost/boost/graph/adjacency_list_io.hpp +++ b/3party/boost/boost/graph/adjacency_list_io.hpp @@ -40,7 +40,7 @@ namespace boost { template std::istream& operator >> ( std::istream& in, property& p ) { - in >> p.m_value >> *(static_cast(&p)); // houpla !! + in >> p.m_value >> p.m_base; // houpla !! return in; } @@ -65,7 +65,7 @@ template void get ( property& p, const V& v, Stag s ) { - get( *(static_cast(&p)),v,s ); + get( p.m_base,v,s ); } template @@ -82,7 +82,7 @@ void getSubset ( property& p, const property& s ) { get( p, s.m_value, Stag() ); - getSubset( p, Snext(s) ); + getSubset( p, s.m_base ); } template PropertyPrinter& operator () ( std::ostream& out, const Val& v ) { - typename property_map::type ps = get(Tag(), *graph); + typename property_map::const_type ps = get(Tag(), *graph); out << ps[ v ] <<" "; PropertyPrinter print(*graph); print(out, v); @@ -248,7 +248,7 @@ struct PropertyPrinter > template PropertyPrinter& operator () ( std::ostream& out, const Val& v ) { - typename property_map::type ps = get(Tag(), *graph); + typename property_map::const_type ps = get(Tag(), *graph); out << ps[ v ] <<" "; PropertyPrinter print(*graph); print(out, v); diff --git a/3party/boost/boost/graph/adjacency_matrix.hpp b/3party/boost/boost/graph/adjacency_matrix.hpp index 47d8d5f28a..65cf27a57d 100644 --- a/3party/boost/boost/graph/adjacency_matrix.hpp +++ b/3party/boost/boost/graph/adjacency_matrix.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -29,7 +30,10 @@ #include #include #include -#include +#include +#include +#include +#include namespace boost { @@ -484,25 +488,14 @@ namespace boost { BOOST_STATIC_ASSERT(!(is_same::value)); #endif -#if !defined(BOOST_GRAPH_NO_BUNDLED_PROPERTIES) - typedef typename graph_detail::graph_prop::property graph_property_type; - typedef typename graph_detail::graph_prop::bundle graph_bundled; - - typedef typename graph_detail::vertex_prop::property vertex_property_type; - typedef typename graph_detail::vertex_prop::bundle vertex_bundled; - - typedef typename graph_detail::edge_prop::property edge_property_type; - typedef typename graph_detail::edge_prop::bundle edge_bundled; -#else typedef GraphProperty graph_property_type; - typedef no_graph_bundle graph_bundled; + typedef typename lookup_one_property::type graph_bundled; typedef VertexProperty vertex_property_type; - typedef no_vertex_bundle vertex_bundled; + typedef typename lookup_one_property::type vertex_bundled; typedef EdgeProperty edge_property_type; - typedef no_edge_bundle edge_bundled; -#endif + typedef typename lookup_one_property::type edge_bundled; public: // should be private typedef typename mpl::if_::type, @@ -640,16 +633,16 @@ namespace boost { #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES // Directly access a vertex or edge bundle vertex_bundled& operator[](vertex_descriptor v) - { return get(vertex_bundle, *this)[v]; } + { return get(vertex_bundle, *this, v); } const vertex_bundled& operator[](vertex_descriptor v) const - { return get(vertex_bundle, *this)[v]; } + { return get(vertex_bundle, *this, v); } edge_bundled& operator[](edge_descriptor e) - { return get(edge_bundle, *this)[e]; } + { return get(edge_bundle, *this, e); } const edge_bundled& operator[](edge_descriptor e) const - { return get(edge_bundle, *this)[e]; } + { return get(edge_bundle, *this, e); } graph_bundled& operator[](graph_bundle_t) { return get_property(*this); } @@ -1035,256 +1028,194 @@ namespace boost { //========================================================================= // Functions required by the PropertyGraph concept + template + struct adj_mat_pm_helper; + + template + struct adj_mat_pm_helper { + typedef typename graph_traits >::vertex_descriptor arg_type; + typedef typed_identity_property_map vi_map_type; + typedef iterator_property_map::iterator, vi_map_type> all_map_type; + typedef iterator_property_map::const_iterator, vi_map_type> all_map_const_type; + typedef transform_value_property_map< + detail::lookup_one_property_f, + all_map_type> + type; + typedef transform_value_property_map< + detail::lookup_one_property_f, + all_map_const_type> + const_type; + typedef typename property_traits::reference single_nonconst_type; + typedef typename property_traits::reference single_const_type; + + static type get_nonconst(adjacency_matrix& g, Prop prop) { + return type(prop, all_map_type(g.m_vertex_properties.begin(), vi_map_type())); + } + + static const_type get_const(const adjacency_matrix& g, Prop prop) { + return const_type(prop, all_map_const_type(g.m_vertex_properties.begin(), vi_map_type())); + } + + static single_nonconst_type get_nonconst_one(adjacency_matrix& g, Prop prop, arg_type v) { + return lookup_one_property::lookup(g.m_vertex_properties[v], prop); + } + + static single_const_type get_const_one(const adjacency_matrix& g, Prop prop, arg_type v) { + return lookup_one_property::lookup(g.m_vertex_properties[v], prop); + } + }; + + template + struct adj_mat_pm_helper { + typedef typename graph_traits >::edge_descriptor edge_descriptor; + + template + struct lookup_property_from_edge { + Tag tag; + lookup_property_from_edge(Tag tag): tag(tag) {} + typedef typename boost::mpl::if_::type ep_type_nonref; + typedef ep_type_nonref& ep_type; + typedef typename lookup_one_property::type& result_type; + result_type operator()(edge_descriptor e) const { + return lookup_one_property::lookup(*static_cast(e.get_property()), tag); + } + }; + + typedef function_property_map< + lookup_property_from_edge, + typename graph_traits >::edge_descriptor> type; + typedef function_property_map< + lookup_property_from_edge, + typename graph_traits >::edge_descriptor> const_type; + typedef edge_descriptor arg_type; + typedef typename lookup_property_from_edge::result_type single_nonconst_type; + typedef typename lookup_property_from_edge::result_type single_const_type; + + static type get_nonconst(adjacency_matrix& g, Tag tag) { + return type(tag); + } + + static const_type get_const(const adjacency_matrix& g, Tag tag) { + return const_type(tag); + } + + static single_nonconst_type get_nonconst_one(adjacency_matrix& g, Tag tag, edge_descriptor e) { + return lookup_one_property::lookup(*static_cast(e.get_property()), tag); + } + + static single_const_type get_const_one(const adjacency_matrix& g, Tag tag, edge_descriptor e) { + return lookup_one_property::lookup(*static_cast(e.get_property()), tag); + } + }; + + template + struct property_map, Tag> + : adj_mat_pm_helper, Tag>::type> {}; + + template + typename property_map, Tag>::type + get(Tag tag, adjacency_matrix& g) { + return property_map, Tag>::get_nonconst(g, tag); + } + + template + typename property_map, Tag>::const_type + get(Tag tag, const adjacency_matrix& g) { + return property_map, Tag>::get_const(g, tag); + } + + template + typename property_map, Tag>::single_nonconst_type + get(Tag tag, adjacency_matrix& g, typename property_map, Tag>::arg_type a) { + return property_map, Tag>::get_nonconst_one(g, tag, a); + } + + template + typename property_map, Tag>::single_const_type + get(Tag tag, const adjacency_matrix& g, typename property_map, Tag>::arg_type a) { + return property_map, Tag>::get_const_one(g, tag, a); + } + + template + void + put(Tag tag, + adjacency_matrix& g, + typename property_map, Tag>::arg_type a, + typename property_map, Tag>::single_const_type val) { + property_map, Tag>::get_nonconst_one(g, tag, a) = val; + } + // O(1) template inline void - set_property(adjacency_matrix& g, Tag, const Value& value) + set_property(adjacency_matrix& g, Tag tag, const Value& value) { - get_property_value(g.m_property, Tag()) = value; + get_property_value(g.m_property, tag) = value; } template inline typename graph_property, Tag>::type& - get_property(adjacency_matrix& g, Tag) + get_property(adjacency_matrix& g, Tag tag) { - return get_property_value(g.m_property, Tag()); + return get_property_value(g.m_property, tag); } template inline const typename graph_property, Tag>::type& - get_property(const adjacency_matrix& g, Tag) + get_property(const adjacency_matrix& g, Tag tag) { - return get_property_value(g.m_property, Tag()); + return get_property_value(g.m_property, tag); } //========================================================================= // Vertex Property Map - template - class adj_matrix_vertex_property_map - : public put_get_helper > - { - public: - typedef T value_type; - typedef R reference; - typedef Vertex key_type; - typedef boost::lvalue_property_map_tag category; - adj_matrix_vertex_property_map() { } - adj_matrix_vertex_property_map(GraphPtr g) : m_g(g) { } - inline reference operator[](key_type v) const { - return get_property_value(m_g->m_vertex_properties[v], Tag()); - } - GraphPtr m_g; + template + struct property_map, vertex_index_t> { + typedef typename adjacency_matrix::vertex_descriptor Vertex; + typedef typed_identity_property_map type; + typedef type const_type; }; - template - struct adj_matrix_vertex_id_map - : public boost::put_get_helper > - { - typedef Vertex value_type; - typedef Vertex reference; - typedef Vertex key_type; - typedef boost::readable_property_map_tag category; - adj_matrix_vertex_id_map() { } - template - inline adj_matrix_vertex_id_map(const Graph&) { } - inline value_type operator[](key_type v) const { return v; } - }; - - namespace detail { - - struct adj_matrix_any_vertex_pa { - template - struct bind_ { - typedef typename property_value::type Value; - typedef typename boost::graph_traits::vertex_descriptor Vertex; - - typedef adj_matrix_vertex_property_map type; - typedef adj_matrix_vertex_property_map const_type; - }; - }; - struct adj_matrix_id_vertex_pa { - template - struct bind_ { - typedef typename Graph::vertex_descriptor Vertex; - typedef adj_matrix_vertex_id_map type; - typedef adj_matrix_vertex_id_map const_type; - }; - }; - - template - struct adj_matrix_choose_vertex_pa_helper { - typedef adj_matrix_any_vertex_pa type; - }; - template <> - struct adj_matrix_choose_vertex_pa_helper { - typedef adj_matrix_id_vertex_pa type; - }; - - template - struct adj_matrix_choose_vertex_pa { - typedef typename adj_matrix_choose_vertex_pa_helper::type Helper; - typedef typename Helper::template bind_ Bind; - typedef typename Bind::type type; - typedef typename Bind::const_type const_type; - }; - - struct adj_matrix_vertex_property_selector { - template - struct bind_ { - typedef adj_matrix_choose_vertex_pa Choice; - typedef typename Choice::type type; - typedef typename Choice::const_type const_type; - }; - }; - - } // namespace detail - - template <> - struct vertex_property_selector { - typedef detail::adj_matrix_vertex_property_selector type; - }; - - //========================================================================= - // Edge Property Map - - - template - class adj_matrix_edge_property_map - : public put_get_helper > - { - public: - typedef T value_type; - typedef R reference; - typedef detail::matrix_edge_desc_impl key_type; - typedef boost::lvalue_property_map_tag category; - inline reference operator[](key_type e) const { - Property& p = *(Property*)e.get_property(); - return get_property_value(p, Tag()); - } - }; - struct adj_matrix_edge_property_selector { - template - struct bind_ { - typedef typename property_value::type T; - typedef typename Graph::vertex_descriptor Vertex; - typedef adj_matrix_edge_property_map type; - typedef adj_matrix_edge_property_map const_type; - }; - }; - template <> - struct edge_property_selector { - typedef adj_matrix_edge_property_selector type; - }; - - //========================================================================= - // Functions required by PropertyGraph - - namespace detail { - - template - typename boost::property_map, - Property>::type - get_dispatch(adjacency_matrix& g, Property, - vertex_property_tag) - { - typedef adjacency_matrix Graph; - typedef typename boost::property_map, - Property>::type PA; - return PA(&g); - } - template - typename boost::property_map, - Property>::type - get_dispatch(adjacency_matrix&, Property, - edge_property_tag) - { - typedef typename boost::property_map, - Property>::type PA; - return PA(); - } - template - typename boost::property_map, - Property>::const_type - get_dispatch(const adjacency_matrix& g, Property, - vertex_property_tag) - { - typedef adjacency_matrix Graph; - typedef typename boost::property_map, - Property>::const_type PA; - return PA(&g); - } - template - typename boost::property_map, - Property>::const_type - get_dispatch(const adjacency_matrix&, Property, - edge_property_tag) - { - typedef typename boost::property_map, - Property>::const_type PA; - return PA(); - } - - } // namespace detail - - template - inline - typename property_map, Property>::type - get(Property p, adjacency_matrix& g) - { - typedef typename property_kind::type Kind; - return detail::get_dispatch(g, p, Kind()); + template + typename property_map, vertex_index_t>::const_type + get(vertex_index_t, adjacency_matrix&) { + return typename property_map, vertex_index_t>::const_type(); } - template - inline - typename property_map, Property>::const_type - get(Property p, const adjacency_matrix& g) - { - typedef typename property_kind::type Kind; - return detail::get_dispatch(g, p, Kind()); + template + typename adjacency_matrix::vertex_descriptor + get(vertex_index_t, + adjacency_matrix&, + typename adjacency_matrix::vertex_descriptor v) { + return v; } - template - inline - typename property_traits< - typename property_map, Property>::const_type - >::value_type - get(Property p, const adjacency_matrix& g, - const Key& key) - { - return get(get(p, g), key); + template + typename property_map, vertex_index_t>::const_type + get(vertex_index_t, const adjacency_matrix&) { + return typename property_map, vertex_index_t>::const_type(); } - template - inline void - put(Property p, adjacency_matrix& g, - const Key& key, const Value& value) - { - typedef adjacency_matrix Graph; - typedef typename boost::property_map::type Map; - Map pmap = get(p, g); - put(pmap, key, value); + template + typename adjacency_matrix::vertex_descriptor + get(vertex_index_t, + const adjacency_matrix&, + typename adjacency_matrix::vertex_descriptor v) { + return v; } //========================================================================= @@ -1298,63 +1229,10 @@ namespace boost { return n; } - // Support for bundled properties -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES - template - inline - typename property_map, - T Bundle::*>::type - get(T Bundle::* p, adjacency_matrix& g) - { - typedef typename property_map, - T Bundle::*>::type - result_type; - return result_type(&g, p); - } - - template - inline - typename property_map, - T Bundle::*>::const_type - get(T Bundle::* p, adjacency_matrix const & g) - { - typedef typename property_map, - T Bundle::*>::const_type - result_type; - return result_type(&g, p); - } - - template - inline T - get(T Bundle::* p, adjacency_matrix const & g, - const Key& key) - { - return get(get(p, g), key); - } - - template - inline void - put(T Bundle::* p, adjacency_matrix& g, - const Key& key, const T& value) - { - put(get(p, g), key, value); - } - -#endif - -#define ADJMAT_PARAMS \ - typename D, typename VP, typename EP, typename GP, typename A -#define ADJMAT adjacency_matrix -template -struct graph_mutability_traits { - typedef mutable_edge_property_graph_tag category; +template +struct graph_mutability_traits > { + typedef mutable_edge_property_graph_tag category; }; -#undef ADJMAT_PARAMS -#undef ADJMAT } // namespace boost diff --git a/3party/boost/boost/graph/astar_search.hpp b/3party/boost/boost/graph/astar_search.hpp index ae60113da4..132dca021c 100644 --- a/3party/boost/boost/graph/astar_search.hpp +++ b/3party/boost/boost/graph/astar_search.hpp @@ -25,7 +25,7 @@ #include #include #include - +#include namespace boost { @@ -34,7 +34,7 @@ namespace boost { struct AStarHeuristicConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); h(u); } Heuristic h; @@ -58,7 +58,7 @@ namespace boost { struct AStarVisitorConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.discover_vertex(u, g); vis.examine_vertex(u, g); @@ -158,6 +158,7 @@ namespace boost { template void tree_edge(Edge e, const Graph& g) { + using boost::get; m_decreased = relax(e, g, m_weight, m_predecessor, m_distance, m_combine, m_compare); @@ -173,6 +174,7 @@ namespace boost { template void gray_target(Edge e, const Graph& g) { + using boost::get; m_decreased = relax(e, g, m_weight, m_predecessor, m_distance, m_combine, m_compare); @@ -189,6 +191,7 @@ namespace boost { template void black_target(Edge e, const Graph& g) { + using boost::get; m_decreased = relax(e, g, m_weight, m_predecessor, m_distance, m_combine, m_compare); @@ -325,6 +328,7 @@ namespace boost { typename detail::map_maker::map_type distance_map_type; typedef typename boost::property_traits::value_type D; + const D inf = arg_pack[_distance_inf | (std::numeric_limits::max)()]; astar_search (g, s, h, @@ -336,8 +340,8 @@ namespace boost { detail::override_const_property(arg_pack, _vertex_index_map, g, vertex_index), detail::make_color_map_from_arg_pack(g, arg_pack), arg_pack[_distance_compare | std::less()], - arg_pack[_distance_combine | closed_plus()], - arg_pack[_distance_inf | (std::numeric_limits::max)()], + arg_pack[_distance_combine | closed_plus(inf)], + inf, arg_pack[_distance_zero | D()]); } @@ -358,6 +362,7 @@ namespace boost { arg_pack_type, tag::weight_map, edge_weight_t, VertexListGraph>::type weight_map_type; typedef typename boost::property_traits::value_type D; + const D inf = arg_pack[_distance_inf | (std::numeric_limits::max)()]; astar_search_no_init (g, s, h, arg_pack[_visitor | make_astar_visitor(null_visitor())], @@ -368,8 +373,8 @@ namespace boost { detail::override_const_property(arg_pack, _vertex_index_map, g, vertex_index), detail::make_color_map_from_arg_pack(g, arg_pack), arg_pack[_distance_compare | std::less()], - arg_pack[_distance_combine | closed_plus()], - arg_pack[_distance_inf | (std::numeric_limits::max)()], + arg_pack[_distance_combine | closed_plus(inf)], + inf, arg_pack[_distance_zero | D()]); } diff --git a/3party/boost/boost/graph/bandwidth.hpp b/3party/boost/boost/graph/bandwidth.hpp index 0bfeefb99c..e8e7bf2cf3 100644 --- a/3party/boost/boost/graph/bandwidth.hpp +++ b/3party/boost/boost/graph/bandwidth.hpp @@ -21,15 +21,14 @@ namespace boost { VertexIndexMap index) { BOOST_USING_STD_MAX(); - typedef typename graph_traits::vertices_size_type size_type; - size_type b = 0; + using std::abs; + typedef typename graph_traits::vertices_size_type vertices_size_type; + vertices_size_type b = 0; typename graph_traits::out_edge_iterator e, end; for (boost::tie(e, end) = out_edges(i, g); e != end; ++e) { int f_i = get(index, i); int f_j = get(index, target(*e, g)); - using namespace std; // to call abs() unqualified - if(f_i > f_j) - b = max BOOST_PREVENT_MACRO_SUBSTITUTION (b, size_type(f_i - f_j)); + b = max BOOST_PREVENT_MACRO_SUBSTITUTION (b, vertices_size_type(abs(f_i - f_j))); } return b; } @@ -47,10 +46,15 @@ namespace boost { bandwidth(const Graph& g, VertexIndexMap index) { BOOST_USING_STD_MAX(); - typename graph_traits::vertices_size_type b = 0; - typename graph_traits::vertex_iterator i, end; - for (boost::tie(i, end) = vertices(g); i != end; ++i) - b = max BOOST_PREVENT_MACRO_SUBSTITUTION (b, ith_bandwidth(*i, g, index)); + using std::abs; + typedef typename graph_traits::vertices_size_type vertices_size_type; + vertices_size_type b = 0; + typename graph_traits::edge_iterator i, end; + for (boost::tie(i, end) = edges(g); i != end; ++i) { + int f_i = get(index, source(*i, g)); + int f_j = get(index, target(*i, g)); + b = max BOOST_PREVENT_MACRO_SUBSTITUTION (b, vertices_size_type(abs(f_i - f_j))); + } return b; } diff --git a/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp b/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp index 8fc02529a8..e102d92209 100644 --- a/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp +++ b/3party/boost/boost/graph/bellman_ford_shortest_paths.hpp @@ -29,13 +29,14 @@ #include #include #include +#include namespace boost { template struct BellmanFordVisitorConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.examine_edge(e, g); vis.edge_relaxed(e, g); vis.edge_not_relaxed(e, g); @@ -95,12 +96,12 @@ namespace boost { BinaryPredicate compare, BellmanFordVisitor v) { - function_requires >(); + BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept )); typedef graph_traits GTraits; typedef typename GTraits::edge_descriptor Edge; typedef typename GTraits::vertex_descriptor Vertex; - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type D_value; typedef typename property_traits::value_type W_value; @@ -170,7 +171,7 @@ namespace boost { bool bellman_dispatch2 (VertexAndEdgeListGraph& g, - detail::error_property_not_found, + param_not_found, Size N, WeightMap weight, PredecessorMap pred, DistanceMap distance, const bgl_named_params& params) { @@ -229,7 +230,7 @@ namespace boost { (VertexAndEdgeListGraph& g, const bgl_named_params& params) { - function_requires >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); return detail::bellman_dispatch (g, num_vertices(g), choose_const_pmap(get_param(params, edge_weight), g, edge_weight), diff --git a/3party/boost/boost/graph/betweenness_centrality.hpp b/3party/boost/boost/graph/betweenness_centrality.hpp index 052f0633c1..a4de175330 100644 --- a/3party/boost/boost/graph/betweenness_centrality.hpp +++ b/3party/boost/boost/graph/betweenness_centrality.hpp @@ -498,14 +498,14 @@ namespace detail { namespace graph { }; template<> - struct brandes_betweenness_centrality_dispatch1 + struct brandes_betweenness_centrality_dispatch1 { template static void run(const Graph& g, CentralityMap centrality, EdgeCentralityMap edge_centrality_map, VertexIndexMap vertex_index, - error_property_not_found) + param_not_found) { brandes_betweenness_centrality_dispatch2(g, centrality, edge_centrality_map, vertex_index); @@ -532,7 +532,7 @@ brandes_betweenness_centrality(const Graph& g, { typedef bgl_named_params named_params; - typedef typename property_value::type ew; + typedef typename get_param_type::type ew; detail::graph::brandes_betweenness_centrality_dispatch1::run( g, choose_param(get_param(params, vertex_centrality), diff --git a/3party/boost/boost/graph/biconnected_components.hpp b/3party/boost/boost/graph/biconnected_components.hpp index 0345963642..1669f69522 100644 --- a/3party/boost/boost/graph/biconnected_components.hpp +++ b/3party/boost/boost/graph/biconnected_components.hpp @@ -20,6 +20,8 @@ #include #include #include +#include +#include namespace boost { @@ -27,27 +29,35 @@ namespace boost { template struct biconnected_components_visitor : public dfs_visitor<> { biconnected_components_visitor - (ComponentMap comp, std::size_t& c, DiscoverTimeMap dtm, + (ComponentMap comp, std::size_t& c, + std::size_t& children_of_root, DiscoverTimeMap dtm, std::size_t& dfs_time, LowPointMap lowpt, PredecessorMap pred, - OutputIterator out, Stack& S, DFSVisitor vis) - : comp(comp), c(c), dtm(dtm), dfs_time(dfs_time), lowpt(lowpt), - pred(pred), out(out), S(S), vis(vis) { } + OutputIterator out, Stack& S, + ArticulationVector& is_articulation_point, IndexMap index_map, + DFSVisitor vis) + : comp(comp), c(c), children_of_root(children_of_root), + dtm(dtm), dfs_time(dfs_time), lowpt(lowpt), + pred(pred), out(out), S(S), + is_articulation_point(is_articulation_point), + index_map(index_map), vis(vis) { } template void initialize_vertex(const Vertex& u, Graph& g) { + put(pred, u, u); vis.initialize_vertex(u, g); } template void start_vertex(const Vertex& u, Graph& g) { - put(pred, u, u); + children_of_root = 0; vis.start_vertex(u, g); } @@ -68,8 +78,14 @@ namespace boost template void tree_edge(const Edge& e, Graph& g) { + typename boost::graph_traits::vertex_descriptor src = source(e, g); + typename boost::graph_traits::vertex_descriptor tgt = target(e, g); + S.push(e); - put(pred, target(e, g), source(e, g)); + put(pred, tgt, src); + if ( get(pred, src) == src ) { + ++children_of_root; + } vis.tree_edge(e, g); } @@ -78,11 +94,13 @@ namespace boost { BOOST_USING_STD_MIN(); - if ( target(e, g) != get(pred, source(e, g)) ) { + typename boost::graph_traits::vertex_descriptor src = source(e, g); + typename boost::graph_traits::vertex_descriptor tgt = target(e, g); + if ( tgt != get(pred, src) ) { S.push(e); - put(lowpt, source(e, g), - min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, source(e, g)), - get(dtm, target(e, g)))); + put(lowpt, src, + min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, src), + get(dtm, tgt))); } vis.back_edge(e, g); } @@ -98,55 +116,42 @@ namespace boost { BOOST_USING_STD_MIN(); Vertex parent = get(pred, u); - const std::size_t dtm_of_dubious_parent = get(dtm, parent); - bool is_art_point = false; - if ( dtm_of_dubious_parent > get(dtm, u) ) { - parent = get(pred, parent); - is_art_point = true; - put(pred, get(pred, u), u); - put(pred, u, parent); - } - - if ( parent == u ) { // at top - if ( get(dtm, u) + 1 == dtm_of_dubious_parent ) - is_art_point = false; + if (parent == u) { // Root of tree is special + is_articulation_point[get(index_map, u)] = (children_of_root > 1); } else { put(lowpt, parent, min BOOST_PREVENT_MACRO_SUBSTITUTION(get(lowpt, parent), - get(lowpt, u))); - - if (get(lowpt, u) >= get(dtm, parent)) { - if ( get(dtm, parent) > get(dtm, get(pred, parent)) ) { - put(pred, u, get(pred, parent)); - put(pred, parent, u); - } - + get(lowpt, u))); + if ( get(lowpt, u) >= get(dtm, parent) ) { + is_articulation_point[get(index_map, parent)] = true; while ( get(dtm, source(S.top(), g)) >= get(dtm, u) ) { put(comp, S.top(), c); S.pop(); } + BOOST_ASSERT (source(S.top(), g) == parent); + BOOST_ASSERT (target(S.top(), g) == u); put(comp, S.top(), c); - S.pop(); + S.pop(); ++c; - if ( S.empty() ) { - put(pred, u, parent); - put(pred, parent, u); - } } } - if ( is_art_point ) + if ( is_articulation_point[get(index_map, u)] ) { *out++ = u; + } vis.finish_vertex(u, g); } ComponentMap comp; std::size_t& c; + std::size_t& children_of_root; DiscoverTimeMap dtm; std::size_t& dfs_time; LowPointMap lowpt; PredecessorMap pred; OutputIterator out; Stack& S; + ArticulationVector& is_articulation_point; + IndexMap index_map; DFSVisitor vis; }; @@ -160,24 +165,26 @@ namespace boost { typedef typename graph_traits::vertex_descriptor vertex_t; typedef typename graph_traits::edge_descriptor edge_t; - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); std::size_t num_components = 0; + std::size_t children_of_root; std::size_t dfs_time = 0; - std::stack S; + std::stack S; + std::vector is_articulation_point(num_vertices(g)); - biconnected_components_visitor, - DFSVisitor> - vis(comp, num_components, dtm, dfs_time, lowpt, pred, out, - S, dfs_vis); + biconnected_components_visitor, + std::vector, VertexIndexMap, DFSVisitor> + vis(comp, num_components, children_of_root, dtm, dfs_time, + lowpt, pred, out, S, is_articulation_point, index_map, dfs_vis); depth_first_search(g, visitor(vis).vertex_index_map(index_map)); @@ -203,7 +210,7 @@ namespace boost }; template <> - struct bicomp_dispatch3 + struct bicomp_dispatch3 { template& params, - error_property_not_found) + param_not_found) { typedef typename graph_traits::vertex_descriptor vertex_t; std::vector pred(num_vertices(g)); @@ -237,8 +244,7 @@ namespace boost DiscoverTimeMap dtm, const bgl_named_params& params, LowPointMap lowpt) { - typedef typename property_value< bgl_named_params, - vertex_predecessor_t>::type dispatch_type; + typedef typename get_param_type< vertex_predecessor_t, bgl_named_params >::type dispatch_type; return bicomp_dispatch3::apply (g, comp, out, index_map, dtm, lowpt, params, @@ -248,7 +254,7 @@ namespace boost template <> - struct bicomp_dispatch2 + struct bicomp_dispatch2 { template apply (const Graph& g, ComponentMap comp, OutputIterator out, VertexIndexMap index_map, DiscoverTimeMap dtm, const bgl_named_params& params, - error_property_not_found) + param_not_found) { typedef typename graph_traits::vertices_size_type vertices_size_type; std::vector lowpt(num_vertices(g)); vertices_size_type vst(0); - typedef typename property_value< bgl_named_params, - vertex_predecessor_t>::type dispatch_type; + typedef typename get_param_type< vertex_predecessor_t, bgl_named_params >::type dispatch_type; return bicomp_dispatch3::apply (g, comp, out, index_map, dtm, @@ -282,8 +287,7 @@ namespace boost ComponentMap comp, OutputIterator out, VertexIndexMap index_map, const bgl_named_params& params, DiscoverTimeMap dtm) { - typedef typename property_value< bgl_named_params, - vertex_lowpoint_t>::type dispatch_type; + typedef typename get_param_type< vertex_lowpoint_t, bgl_named_params >::type dispatch_type; return bicomp_dispatch2::apply (g, comp, out, index_map, dtm, params, @@ -292,21 +296,20 @@ namespace boost }; template <> - struct bicomp_dispatch1 + struct bicomp_dispatch1 { template static std::pair apply(const Graph& g, ComponentMap comp, OutputIterator out, VertexIndexMap index_map, - const bgl_named_params& params, error_property_not_found) + const bgl_named_params& params, param_not_found) { typedef typename graph_traits::vertices_size_type vertices_size_type; std::vector discover_time(num_vertices(g)); vertices_size_type vst(0); - typedef typename property_value< bgl_named_params, - vertex_lowpoint_t>::type dispatch_type; + typedef typename get_param_type< vertex_lowpoint_t, bgl_named_params >::type dispatch_type; return bicomp_dispatch2::apply (g, comp, out, index_map, @@ -323,14 +326,14 @@ namespace boost biconnected_components(const Graph& g, ComponentMap comp, OutputIterator out, DiscoverTimeMap dtm, LowPointMap lowpt) { - typedef detail::error_property_not_found dispatch_type; + typedef param_not_found dispatch_type; return detail::bicomp_dispatch3::apply (g, comp, out, get(vertex_index, g), dtm, lowpt, bgl_named_params(0), - detail::error_property_not_found()); + param_not_found()); } template & params) { - typedef typename property_value< bgl_named_params, - vertex_discover_time_t>::type dispatch_type; + typedef typename get_param_type< vertex_discover_time_t, bgl_named_params >::type dispatch_type; return detail::bicomp_dispatch1::apply(g, comp, out, choose_const_pmap(get_param(params, vertex_index), g, vertex_index), diff --git a/3party/boost/boost/graph/boykov_kolmogorov_max_flow.hpp b/3party/boost/boost/graph/boykov_kolmogorov_max_flow.hpp index 6a4c4482fe..0834c63169 100644 --- a/3party/boost/boost/graph/boykov_kolmogorov_max_flow.hpp +++ b/3party/boost/boost/graph/boykov_kolmogorov_max_flow.hpp @@ -47,6 +47,7 @@ #include #include #include +#include // The algorithm impelemented here is described in: // @@ -125,14 +126,14 @@ class bk_max_flow { // the residual capacity equal to the capacity edge_iterator ei, e_end; for(boost::tie(ei, e_end) = edges(m_g); ei != e_end; ++ei) { - m_res_cap_map[*ei] = m_cap_map[*ei]; - BOOST_ASSERT(m_rev_edge_map[m_rev_edge_map[*ei]] == *ei); //check if the reverse edge map is build up properly + put(m_res_cap_map, *ei, get(m_cap_map, *ei)); + BOOST_ASSERT(get(m_rev_edge_map, get(m_rev_edge_map, *ei)) == *ei); //check if the reverse edge map is build up properly } //init the search trees with the two terminals set_tree(m_source, tColorTraits::black()); set_tree(m_sink, tColorTraits::white()); - m_time_map[m_source] = 1; - m_time_map[m_sink] = 1; + put(m_time_map, m_source, 1); + put(m_time_map, m_sink, 1); } tEdgeVal max_flow(){ @@ -168,8 +169,8 @@ class bk_max_flow { edge_descriptor from_source = *ei; vertex_descriptor current_node = target(from_source, m_g); if(current_node == m_sink){ - tEdgeVal cap = m_res_cap_map[from_source]; - m_res_cap_map[from_source] = 0; + tEdgeVal cap = get(m_res_cap_map, from_source); + put(m_res_cap_map, from_source, 0); m_flow += cap; continue; } @@ -177,52 +178,52 @@ class bk_max_flow { bool is_there; boost::tie(to_sink, is_there) = lookup_edge(current_node, m_sink, m_g); if(is_there){ - tEdgeVal cap_from_source = m_res_cap_map[from_source]; - tEdgeVal cap_to_sink = m_res_cap_map[to_sink]; + tEdgeVal cap_from_source = get(m_res_cap_map, from_source); + tEdgeVal cap_to_sink = get(m_res_cap_map, to_sink); if(cap_from_source > cap_to_sink){ set_tree(current_node, tColorTraits::black()); add_active_node(current_node); set_edge_to_parent(current_node, from_source); - m_dist_map[current_node] = 1; - m_time_map[current_node] = 1; + put(m_dist_map, current_node, 1); + put(m_time_map, current_node, 1); // add stuff to flow and update residuals. we dont need to // update reverse_edges, as incoming/outgoing edges to/from // source/sink don't count for max-flow - m_res_cap_map[from_source] -= cap_to_sink; - m_res_cap_map[to_sink] = 0; + put(m_res_cap_map, from_source, get(m_res_cap_map, from_source) - cap_to_sink); + put(m_res_cap_map, to_sink, 0); m_flow += cap_to_sink; } else if(cap_to_sink > 0){ set_tree(current_node, tColorTraits::white()); add_active_node(current_node); set_edge_to_parent(current_node, to_sink); - m_dist_map[current_node] = 1; - m_time_map[current_node] = 1; + put(m_dist_map, current_node, 1); + put(m_time_map, current_node, 1); // add stuff to flow and update residuals. we dont need to update // reverse_edges, as incoming/outgoing edges to/from source/sink // don't count for max-flow - m_res_cap_map[to_sink] -= cap_from_source; - m_res_cap_map[from_source] = 0; + put(m_res_cap_map, to_sink, get(m_res_cap_map, to_sink) - cap_from_source); + put(m_res_cap_map, from_source, 0); m_flow += cap_from_source; } - } else if(m_res_cap_map[from_source]){ + } else if(get(m_res_cap_map, from_source)){ // there is no sink connect, so we can't augment this path, but to // avoid adding m_source to the active nodes, we just activate this // node and set the approciate things set_tree(current_node, tColorTraits::black()); set_edge_to_parent(current_node, from_source); - m_dist_map[current_node] = 1; - m_time_map[current_node] = 1; + put(m_dist_map, current_node, 1); + put(m_time_map, current_node, 1); add_active_node(current_node); } } for(boost::tie(ei, e_end) = out_edges(m_sink, m_g); ei != e_end; ++ei){ - edge_descriptor to_sink = m_rev_edge_map[*ei]; + edge_descriptor to_sink = get(m_rev_edge_map, *ei); vertex_descriptor current_node = source(to_sink, m_g); - if(m_res_cap_map[to_sink]){ + if(get(m_res_cap_map, to_sink)){ set_tree(current_node, tColorTraits::white()); set_edge_to_parent(current_node, to_sink); - m_dist_map[current_node] = 1; - m_time_map[current_node] = 1; + put(m_dist_map, current_node, 1); + put(m_time_map, current_node, 1); add_active_node(current_node); } } @@ -252,21 +253,21 @@ class bk_max_flow { } for(; m_last_grow_edge_it != m_last_grow_edge_end; ++m_last_grow_edge_it) { edge_descriptor out_edge = *m_last_grow_edge_it; - if(m_res_cap_map[out_edge] > 0){ //check if we have capacity left on this edge + if(get(m_res_cap_map, out_edge) > 0){ //check if we have capacity left on this edge vertex_descriptor other_node = target(out_edge, m_g); if(get_tree(other_node) == tColorTraits::gray()){ //it's a free node set_tree(other_node, tColorTraits::black()); //aquire other node to our search tree set_edge_to_parent(other_node, out_edge); //set us as parent - m_dist_map[other_node] = m_dist_map[current_node] + 1; //and update the distance-heuristic - m_time_map[other_node] = m_time_map[current_node]; + put(m_dist_map, other_node, get(m_dist_map, current_node) + 1); //and update the distance-heuristic + put(m_time_map, other_node, get(m_time_map, current_node)); add_active_node(other_node); } else if(get_tree(other_node) == tColorTraits::black()) { // we do this to get shorter paths. check if we are nearer to // the source as its parent is if(is_closer_to_terminal(current_node, other_node)){ set_edge_to_parent(other_node, out_edge); - m_dist_map[other_node] = m_dist_map[current_node] + 1; - m_time_map[other_node] = m_time_map[current_node]; + put(m_dist_map, other_node, get(m_dist_map, current_node) + 1); + put(m_time_map, other_node, get(m_time_map, current_node)); } } else{ BOOST_ASSERT(get_tree(other_node)==tColorTraits::white()); @@ -285,21 +286,21 @@ class bk_max_flow { boost::tie(m_last_grow_edge_it, m_last_grow_edge_end) = out_edges(current_node, m_g); } for(; m_last_grow_edge_it != m_last_grow_edge_end; ++m_last_grow_edge_it){ - edge_descriptor in_edge = m_rev_edge_map[*m_last_grow_edge_it]; - if(m_res_cap_map[in_edge] > 0){ //check if there is capacity left + edge_descriptor in_edge = get(m_rev_edge_map, *m_last_grow_edge_it); + if(get(m_res_cap_map, in_edge) > 0){ //check if there is capacity left vertex_descriptor other_node = source(in_edge, m_g); if(get_tree(other_node) == tColorTraits::gray()){ //it's a free node set_tree(other_node, tColorTraits::white()); //aquire that node to our search tree set_edge_to_parent(other_node, in_edge); //set us as parent add_active_node(other_node); //activate that node - m_dist_map[other_node] = m_dist_map[current_node] + 1; //set its distance - m_time_map[other_node] = m_time_map[current_node]; //and time + put(m_dist_map, other_node, get(m_dist_map, current_node) + 1); //set its distance + put(m_time_map, other_node, get(m_time_map, current_node));//and time } else if(get_tree(other_node) == tColorTraits::white()){ if(is_closer_to_terminal(current_node, other_node)){ //we are closer to the sink than its parent is, so we "adopt" him set_edge_to_parent(other_node, in_edge); - m_dist_map[other_node] = m_dist_map[current_node] + 1; - m_time_map[other_node] = m_time_map[current_node]; + put(m_dist_map, other_node, get(m_dist_map, current_node) + 1); + put(m_time_map, other_node, get(m_time_map, current_node)); } } else{ BOOST_ASSERT(get_tree(other_node)==tColorTraits::black()); @@ -340,18 +341,18 @@ class bk_max_flow { //now we push the found flow through the path //for each edge we saturate we have to look for the verts that belong to that edge, one of them becomes an orphans //now process the connecting edge - m_res_cap_map[e] -= bottleneck; - BOOST_ASSERT(m_res_cap_map[e] >= 0); - m_res_cap_map[m_rev_edge_map[e]] += bottleneck; + put(m_res_cap_map, e, get(m_res_cap_map, e) - bottleneck); + BOOST_ASSERT(get(m_res_cap_map, e) >= 0); + put(m_res_cap_map, get(m_rev_edge_map, e), get(m_res_cap_map, get(m_rev_edge_map, e)) + bottleneck); //now we follow the path back to the source vertex_descriptor current_node = source(e, m_g); while(current_node != m_source){ edge_descriptor pred = get_edge_to_parent(current_node); - m_res_cap_map[pred] -= bottleneck; - BOOST_ASSERT(m_res_cap_map[pred] >= 0); - m_res_cap_map[m_rev_edge_map[pred]] += bottleneck; - if(m_res_cap_map[pred] == 0){ + put(m_res_cap_map, pred, get(m_res_cap_map, pred) - bottleneck); + BOOST_ASSERT(get(m_res_cap_map, pred) >= 0); + put(m_res_cap_map, get(m_rev_edge_map, pred), get(m_res_cap_map, get(m_rev_edge_map, pred)) + bottleneck); + if(get(m_res_cap_map, pred) == 0){ set_no_parent(current_node); m_orphans.push_front(current_node); } @@ -361,10 +362,10 @@ class bk_max_flow { current_node = target(e, m_g); while(current_node != m_sink){ edge_descriptor pred = get_edge_to_parent(current_node); - m_res_cap_map[pred] -= bottleneck; - BOOST_ASSERT(m_res_cap_map[pred] >= 0); - m_res_cap_map[m_rev_edge_map[pred]] += bottleneck; - if(m_res_cap_map[pred] == 0){ + put(m_res_cap_map, pred, get(m_res_cap_map, pred) - bottleneck); + BOOST_ASSERT(get(m_res_cap_map, pred) >= 0); + put(m_res_cap_map, get(m_rev_edge_map, pred), get(m_res_cap_map, get(m_rev_edge_map, pred)) + bottleneck); + if(get(m_res_cap_map, pred) == 0){ set_no_parent(current_node); m_orphans.push_front(current_node); } @@ -380,19 +381,19 @@ class bk_max_flow { */ inline tEdgeVal find_bottleneck(edge_descriptor e){ BOOST_USING_STD_MIN(); - tEdgeVal minimum_cap = m_res_cap_map[e]; + tEdgeVal minimum_cap = get(m_res_cap_map, e); vertex_descriptor current_node = source(e, m_g); //first go back in the source tree while(current_node != m_source){ edge_descriptor pred = get_edge_to_parent(current_node); - minimum_cap = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_cap, m_res_cap_map[pred]); + minimum_cap = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_cap, get(m_res_cap_map, pred)); current_node = source(pred, m_g); } //then go forward in the sink-tree current_node = target(e, m_g); while(current_node != m_sink){ edge_descriptor pred = get_edge_to_parent(current_node); - minimum_cap = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_cap, m_res_cap_map[pred]); + minimum_cap = min BOOST_PREVENT_MACRO_SUBSTITUTION(minimum_cap, get(m_res_cap_map, pred)); current_node = target(pred, m_g); } return minimum_cap; @@ -420,13 +421,13 @@ class bk_max_flow { edge_descriptor new_parent_edge; out_edge_iterator ei, e_end; for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){ - const edge_descriptor in_edge = m_rev_edge_map[*ei]; + const edge_descriptor in_edge = get(m_rev_edge_map, *ei); BOOST_ASSERT(target(in_edge, m_g) == current_node); //we should be the target of this edge - if(m_res_cap_map[in_edge] > 0){ + if(get(m_res_cap_map, in_edge) > 0){ vertex_descriptor other_node = source(in_edge, m_g); if(get_tree(other_node) == tColorTraits::black() && has_source_connect(other_node)){ - if(m_dist_map[other_node] < min_distance){ - min_distance = m_dist_map[other_node]; + if(get(m_dist_map, other_node) < min_distance){ + min_distance = get(m_dist_map, other_node); new_parent_edge = in_edge; } } @@ -434,15 +435,15 @@ class bk_max_flow { } if(min_distance != (std::numeric_limits::max)()){ set_edge_to_parent(current_node, new_parent_edge); - m_dist_map[current_node] = min_distance + 1; - m_time_map[current_node] = m_time; + put(m_dist_map, current_node, min_distance + 1); + put(m_time_map, current_node, m_time); } else{ - m_time_map[current_node] = 0; + put(m_time_map, current_node, 0); for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){ - edge_descriptor in_edge = m_rev_edge_map[*ei]; + edge_descriptor in_edge = get(m_rev_edge_map, *ei); vertex_descriptor other_node = source(in_edge, m_g); if(get_tree(other_node) == tColorTraits::black() && has_parent(other_node)){ - if(m_res_cap_map[in_edge] > 0){ + if(get(m_res_cap_map, in_edge) > 0){ add_active_node(other_node); } if(source(get_edge_to_parent(other_node), m_g) == current_node){ @@ -464,26 +465,26 @@ class bk_max_flow { tDistanceVal min_distance = (std::numeric_limits::max)(); for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){ const edge_descriptor out_edge = *ei; - if(m_res_cap_map[out_edge] > 0){ + if(get(m_res_cap_map, out_edge) > 0){ const vertex_descriptor other_node = target(out_edge, m_g); if(get_tree(other_node) == tColorTraits::white() && has_sink_connect(other_node)) - if(m_dist_map[other_node] < min_distance){ - min_distance = m_dist_map[other_node]; + if(get(m_dist_map, other_node) < min_distance){ + min_distance = get(m_dist_map, other_node); new_parent_edge = out_edge; } } } if(min_distance != (std::numeric_limits::max)()){ set_edge_to_parent(current_node, new_parent_edge); - m_dist_map[current_node] = min_distance + 1; - m_time_map[current_node] = m_time; + put(m_dist_map, current_node, min_distance + 1); + put(m_time_map, current_node, m_time); } else{ - m_time_map[current_node] = 0; + put(m_time_map, current_node, 0); for(boost::tie(ei, e_end) = out_edges(current_node, m_g); ei != e_end; ++ei){ const edge_descriptor out_edge = *ei; const vertex_descriptor other_node = target(out_edge, m_g); if(get_tree(other_node) == tColorTraits::white() && has_parent(other_node)){ - if(m_res_cap_map[out_edge] > 0){ + if(get(m_res_cap_map, out_edge) > 0){ add_active_node(other_node); } if(target(get_edge_to_parent(other_node), m_g) == current_node){ @@ -511,7 +512,7 @@ class bk_max_flow { //if it has no parent, this node can't be active (if its not source or sink) if(!has_parent(v) && v != m_source && v != m_sink){ m_active_nodes.pop(); - m_in_active_list_map[v] = false; + put(m_in_active_list_map, v, false); } else{ BOOST_ASSERT(get_tree(v) == tColorTraits::black() || get_tree(v) == tColorTraits::white()); return v; @@ -524,10 +525,10 @@ class bk_max_flow { */ inline void add_active_node(vertex_descriptor v){ BOOST_ASSERT(get_tree(v) != tColorTraits::gray()); - if(m_in_active_list_map[v]){ + if(get(m_in_active_list_map, v)){ return; } else{ - m_in_active_list_map[v] = true; + put(m_in_active_list_map, v, true); m_active_nodes.push(v); } } @@ -538,7 +539,7 @@ class bk_max_flow { inline void finish_node(vertex_descriptor v){ BOOST_ASSERT(m_active_nodes.front() == v); m_active_nodes.pop(); - m_in_active_list_map[v] = false; + put(m_in_active_list_map, v, false); m_last_grow_vertex = graph_traits::null_vertex(); } @@ -556,7 +557,7 @@ class bk_max_flow { * white() for sink tree, gray() for no tree */ inline tColorValue get_tree(vertex_descriptor v) const { - return m_tree_map[v]; + return get(m_tree_map, v); } /** @@ -564,30 +565,30 @@ class bk_max_flow { * for sink tree, gray() for no tree */ inline void set_tree(vertex_descriptor v, tColorValue t){ - m_tree_map[v] = t; + put(m_tree_map, v, t); } /** * returns edge to parent vertex of v; */ inline edge_descriptor get_edge_to_parent(vertex_descriptor v) const{ - return m_pre_map[v]; + return get(m_pre_map, v); } /** * returns true if the edge stored in m_pre_map[v] is a valid entry */ inline bool has_parent(vertex_descriptor v) const{ - return m_has_parent_map[v]; + return get(m_has_parent_map, v); } /** * sets edge to parent vertex of v; */ inline void set_edge_to_parent(vertex_descriptor v, edge_descriptor f_edge_to_parent){ - BOOST_ASSERT(m_res_cap_map[f_edge_to_parent] > 0); - m_pre_map[v] = f_edge_to_parent; - m_has_parent_map[v] = true; + BOOST_ASSERT(get(m_res_cap_map, f_edge_to_parent) > 0); + put(m_pre_map, v, f_edge_to_parent); + put(m_has_parent_map, v, true); } /** @@ -595,7 +596,7 @@ class bk_max_flow { * entry an additional map) */ inline void set_no_parent(vertex_descriptor v){ - m_has_parent_map[v] = false; + put(m_has_parent_map, v, false); } /** @@ -607,13 +608,13 @@ class bk_max_flow { tDistanceVal current_distance = 0; vertex_descriptor current_vertex = v; while(true){ - if(m_time_map[current_vertex] == m_time){ + if(get(m_time_map, current_vertex) == m_time){ //we found a node which was already checked this round. use it for distance calculations - current_distance += m_dist_map[current_vertex]; + current_distance += get(m_dist_map, current_vertex); break; } if(current_vertex == m_sink){ - m_time_map[m_sink] = m_time; + put(m_time_map, m_sink, m_time); break; } if(has_parent(current_vertex)){ @@ -626,9 +627,10 @@ class bk_max_flow { } } current_vertex=v; - while(m_time_map[current_vertex] != m_time){ - m_dist_map[current_vertex] = current_distance--; - m_time_map[current_vertex] = m_time; + while(get(m_time_map, current_vertex) != m_time){ + put(m_dist_map, current_vertex, current_distance); + --current_distance; + put(m_time_map, current_vertex, m_time); current_vertex = target(get_edge_to_parent(current_vertex), m_g); } return true; @@ -643,13 +645,13 @@ class bk_max_flow { tDistanceVal current_distance = 0; vertex_descriptor current_vertex = v; while(true){ - if(m_time_map[current_vertex] == m_time){ + if(get(m_time_map, current_vertex) == m_time){ //we found a node which was already checked this round. use it for distance calculations - current_distance += m_dist_map[current_vertex]; + current_distance += get(m_dist_map, current_vertex); break; } if(current_vertex == m_source){ - m_time_map[m_source] = m_time; + put(m_time_map, m_source, m_time); break; } if(has_parent(current_vertex)){ @@ -662,9 +664,10 @@ class bk_max_flow { } } current_vertex=v; - while(m_time_map[current_vertex] != m_time){ - m_dist_map[current_vertex] = current_distance-- ; - m_time_map[current_vertex] = m_time; + while(get(m_time_map, current_vertex) != m_time){ + put(m_dist_map, current_vertex, current_distance); + --current_distance; + put(m_time_map, current_vertex, m_time); current_vertex = source(get_edge_to_parent(current_vertex), m_g); } return true; @@ -675,7 +678,8 @@ class bk_max_flow { */ inline bool is_closer_to_terminal(vertex_descriptor p, vertex_descriptor q){ //checks the timestamps first, to build no cycles, and after that the real distance - return (m_time_map[q] <= m_time_map[p] && m_dist_map[q] > m_dist_map[p]+1); + return (get(m_time_map, q) <= get(m_time_map, p) && + get(m_dist_map, q) > get(m_dist_map, p)+1); } //////// @@ -740,16 +744,16 @@ boykov_kolmogorov_max_flow(Graph& g, typedef typename graph_traits::edge_descriptor edge_descriptor; //as this method is the last one before we instantiate the solver, we do the concept checks here - function_requires >(); //to have vertices(), num_vertices(), - function_requires >(); //to have edges() - function_requires >(); //to have source(), target() and out_edges() - function_requires >(); //read flow-values from edges - function_requires >(); //write flow-values to residuals - function_requires >(); //read out reverse edges - function_requires >(); //store predecessor there - function_requires >(); //write corresponding tree - function_requires >(); //write distance to source/sink - function_requires >(); //get index 0...|V|-1 + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); //to have vertices(), num_vertices(), + BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept )); //to have edges() + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); //to have source(), target() and out_edges() + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); //read flow-values from edges + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); //write flow-values to residuals + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); //read out reverse edges + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); //store predecessor there + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); //write corresponding tree + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); //write distance to source/sink + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); //get index 0...|V|-1 BOOST_ASSERT(num_vertices(g) >= 2 && src != sink); detail::bk_max_flow< diff --git a/3party/boost/boost/graph/breadth_first_search.hpp b/3party/boost/boost/graph/breadth_first_search.hpp index 79fde8cd6e..18bc24f5cf 100644 --- a/3party/boost/boost/graph/breadth_first_search.hpp +++ b/3party/boost/boost/graph/breadth_first_search.hpp @@ -24,6 +24,7 @@ #include #include #include +#include #ifdef BOOST_GRAPH_USE_MPI #include @@ -34,7 +35,7 @@ namespace boost { template struct BFSVisitorConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.discover_vertex(u, g); vis.examine_vertex(u, g); @@ -52,25 +53,29 @@ namespace boost { }; + // Multiple-source version template + class ColorMap, class SourceIterator> void breadth_first_visit (const IncidenceGraph& g, - typename graph_traits::vertex_descriptor s, + SourceIterator sources_begin, SourceIterator sources_end, Buffer& Q, BFSVisitor vis, ColorMap color) { - function_requires< IncidenceGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); typedef graph_traits GTraits; typedef typename GTraits::vertex_descriptor Vertex; typedef typename GTraits::edge_descriptor Edge; - function_requires< BFSVisitorConcept >(); - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( BFSVisitorConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; typedef color_traits Color; typename GTraits::out_edge_iterator ei, ei_end; - put(color, s, Color::gray()); vis.discover_vertex(s, g); - Q.push(s); + for (; sources_begin != sources_end; ++sources_begin) { + Vertex s = *sources_begin; + put(color, s, Color::gray()); vis.discover_vertex(s, g); + Q.push(s); + } while (! Q.empty()) { Vertex u = Q.top(); Q.pop(); vis.examine_vertex(u, g); for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) { @@ -88,12 +93,25 @@ namespace boost { } // end while } // breadth_first_visit + // Single-source version + template + void breadth_first_visit + (const IncidenceGraph& g, + typename graph_traits::vertex_descriptor s, + Buffer& Q, BFSVisitor vis, ColorMap color) + { + typename graph_traits::vertex_descriptor sources[1] = {s}; + breadth_first_visit(g, sources, sources + 1, Q, vis, color); + } - template void breadth_first_search (const VertexListGraph& g, - typename graph_traits::vertex_descriptor s, + SourceIterator sources_begin, SourceIterator sources_end, Buffer& Q, BFSVisitor vis, ColorMap color) { // Initialization @@ -104,7 +122,18 @@ namespace boost { vis.initialize_vertex(*i, g); put(color, *i, Color::white()); } - breadth_first_visit(g, s, Q, vis, color); + breadth_first_visit(g, sources_begin, sources_end, Q, vis, color); + } + + template + void breadth_first_search + (const VertexListGraph& g, + typename graph_traits::vertex_descriptor s, + Buffer& Q, BFSVisitor vis, ColorMap color) + { + typename graph_traits::vertex_descriptor sources[1] = {s}; + breadth_first_search(g, sources, sources + 1, Q, vis, color); } namespace graph { struct bfs_visitor_event_not_overridden {}; } @@ -269,13 +298,13 @@ namespace boost { }; template <> - struct bfs_dispatch { + struct bfs_dispatch { template static void apply (VertexListGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params, - detail::error_property_not_found) + param_not_found) { null_visitor null_vis; @@ -293,7 +322,7 @@ namespace boost { } // namespace detail - +#if 1 // Named Parameter Variant template void breadth_first_search @@ -306,11 +335,11 @@ namespace boost { // graph is not really const since we may write to property maps // of the graph. VertexListGraph& ng = const_cast(g); - typedef typename property_value< bgl_named_params, - vertex_color_t>::type C; + typedef typename get_param_type< vertex_color_t, bgl_named_params >::type C; detail::bfs_dispatch::apply(ng, s, params, get_param(params, vertex_color)); } +#endif // This version does not initialize colors, user has to. @@ -342,6 +371,33 @@ namespace boost { ); } + namespace graph { + namespace detail { + template + struct breadth_first_search_impl { + typedef void result_type; + template + void operator()(const Graph& g, const Source& source, const ArgPack& arg_pack) { + using namespace boost::graph::keywords; + typename boost::graph_traits::vertex_descriptor sources[1] = {source}; + boost::queue::vertex_descriptor> Q; + boost::breadth_first_search(g, + &sources[0], + &sources[1], + boost::unwrap_ref(arg_pack[_buffer | boost::ref(Q)]), + arg_pack[_visitor | make_bfs_visitor(null_visitor())], + boost::detail::make_color_map_from_arg_pack(g, arg_pack)); + } + }; + } + BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(breadth_first_search, 2, 4) + } + +#if 0 + // Named Parameter Variant + BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(breadth_first_search, 2) +#endif + } // namespace boost #ifdef BOOST_GRAPH_USE_MPI diff --git a/3party/boost/boost/graph/bron_kerbosch_all_cliques.hpp b/3party/boost/boost/graph/bron_kerbosch_all_cliques.hpp index 35479316a3..b663cf95f0 100644 --- a/3party/boost/boost/graph/bron_kerbosch_all_cliques.hpp +++ b/3party/boost/boost/graph/bron_kerbosch_all_cliques.hpp @@ -11,6 +11,8 @@ #include #include +#include + #include #include @@ -151,7 +153,7 @@ namespace detail const Container& in, Container& out) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typename graph_traits::directed_category cat; typename Container::const_iterator i, end = in.end(); @@ -174,8 +176,8 @@ namespace detail Visitor vis, std::size_t min) { - function_requires< GraphConcept >(); - function_requires< CliqueVisitorConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); + BOOST_CONCEPT_ASSERT(( CliqueVisitorConcept )); typedef typename graph_traits::vertex_descriptor Vertex; // Is there vertex in nots that is connected to all vertices @@ -222,7 +224,7 @@ namespace detail // otherwise, iterate over candidates and and test // for maxmimal cliquiness. - typename Container::iterator i, j, end = cands.end(); + typename Container::iterator i, j; for(i = cands.begin(); i != cands.end(); ) { Vertex candidate = *i; @@ -266,15 +268,14 @@ template inline void bron_kerbosch_all_cliques(const Graph& g, Visitor vis, std::size_t min) { - function_requires< IncidenceGraphConcept >(); - function_requires< VertexListGraphConcept >(); - function_requires< VertexIndexGraphConcept >(); - function_requires< AdjacencyMatrixConcept >(); // Structural requirement only + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept )); // Structural requirement only typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; typedef std::vector VertexSet; typedef std::deque Clique; - function_requires< CliqueVisitorConcept >(); + BOOST_CONCEPT_ASSERT(( CliqueVisitorConcept )); // NOTE: We're using a deque to implement the clique, because it provides // constant inserts and removals at the end and also a constant size. diff --git a/3party/boost/boost/graph/chrobak_payne_drawing.hpp b/3party/boost/boost/graph/chrobak_payne_drawing.hpp index 498c6f6749..4d026986c2 100644 --- a/3party/boost/boost/graph/chrobak_payne_drawing.hpp +++ b/3party/boost/boost/graph/chrobak_payne_drawing.hpp @@ -11,8 +11,8 @@ #include #include +#include #include -#include //for next and prior #include #include @@ -240,7 +240,7 @@ namespace boost (*ordering_begin,0,g,x,delta_x,left,right); vertex_iterator_t vi, vi_end; - for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) { vertex_t v(*vi); drawing[v].x = x[v]; diff --git a/3party/boost/boost/graph/closeness_centrality.hpp b/3party/boost/boost/graph/closeness_centrality.hpp index 77cea7b0e7..44d478ab2b 100644 --- a/3party/boost/boost/graph/closeness_centrality.hpp +++ b/3party/boost/boost/graph/closeness_centrality.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace boost { @@ -25,9 +26,9 @@ struct closeness_measure result_type operator ()(distance_type d, const Graph&) { - function_requires< NumericValueConcept >(); - function_requires< NumericValueConcept >(); - function_requires< AdaptableUnaryFunctionConcept >(); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); + BOOST_CONCEPT_ASSERT(( AdaptableUnaryFunctionConcept )); return (d == base_type::infinite_distance()) ? base_type::zero_result() : rec(result_type(d)); @@ -75,12 +76,12 @@ closeness_centrality(const Graph& g, Measure measure, Combinator combine) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Distance; - function_requires< NumericValueConcept >(); - function_requires< DistanceMeasureConcept >(); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); + BOOST_CONCEPT_ASSERT(( DistanceMeasureConcept )); Distance n = detail::combine_distances(g, dist, combine, Distance(0)); return measure(n, g); @@ -90,9 +91,9 @@ template inline typename Measure::result_type closeness_centrality(const Graph& g, DistanceMap dist, Measure measure) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Distance; return closeness_centrality(g, dist, measure, std::plus()); @@ -116,17 +117,17 @@ all_closeness_centralities(const Graph& g, CentralityMap cent, Measure measure) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type DistanceMap; - function_requires< ReadablePropertyMapConcept >(); - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename property_traits::value_type Distance; typedef typename property_traits::value_type Centrality; typename graph_traits::vertex_iterator i, end; - for(tie(i, end) = vertices(g); i != end; ++i) { + for(boost::tie(i, end) = vertices(g); i != end; ++i) { DistanceMap dm = get(dist, *i); Centrality c = closeness_centrality(g, dm, measure); put(cent, *i, c); @@ -141,11 +142,11 @@ all_closeness_centralities(const Graph& g, DistanceMatrixMap dist, CentralityMap cent) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type DistanceMap; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Distance; typedef typename property_traits::value_type Result; diff --git a/3party/boost/boost/graph/clustering_coefficient.hpp b/3party/boost/boost/graph/clustering_coefficient.hpp index d897d94b54..5345ed999a 100644 --- a/3party/boost/boost/graph/clustering_coefficient.hpp +++ b/3party/boost/boost/graph/clustering_coefficient.hpp @@ -7,10 +7,11 @@ #ifndef BOOST_GRAPH_CLUSTERING_COEFFICIENT_HPP #define BOOST_GRAPH_CLUSTERING_COEFFICIENT_HPP -#include +#include #include #include #include +#include namespace boost { @@ -20,7 +21,7 @@ namespace detail inline typename graph_traits::degree_size_type possible_edges(const Graph& g, std::size_t k, directed_tag) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::degree_size_type T; return T(k) * (T(k) - 1); } @@ -42,7 +43,7 @@ namespace detail directed_tag) { - function_requires< AdjacencyMatrixConcept >(); + BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept )); return (lookup_edge(u, v, g).second ? 1 : 0) + (lookup_edge(v, u, g).second ? 1 : 0); } @@ -55,7 +56,7 @@ namespace detail typename graph_traits::vertex_descriptor v, undirected_tag) { - function_requires< AdjacencyMatrixConcept >(); + BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept )); return lookup_edge(u, v, g).second ? 1 : 0; } } @@ -64,7 +65,7 @@ template inline typename graph_traits::degree_size_type num_paths_through_vertex(const Graph& g, Vertex v) { - function_requires< AdjacencyGraphConcept >(); + BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept )); typedef typename graph_traits::directed_category Directed; typedef typename graph_traits::adjacency_iterator AdjacencyIterator; @@ -81,8 +82,8 @@ template inline typename graph_traits::degree_size_type num_triangles_on_vertex(const Graph& g, Vertex v) { - function_requires< IncidenceGraphConcept >(); - function_requires< AdjacencyGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept )); typedef typename graph_traits::degree_size_type Degree; typedef typename graph_traits::directed_category Directed; typedef typename graph_traits::adjacency_iterator AdjacencyIterator; @@ -119,10 +120,10 @@ template inline typename property_traits::value_type all_clustering_coefficients(const Graph& g, ClusteringMap cm) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename property_traits::value_type Coefficient; Coefficient sum(0); @@ -139,10 +140,10 @@ template inline typename property_traits::value_type mean_clustering_coefficient(const Graph& g, ClusteringMap cm) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Coefficient; Coefficient cc(0); diff --git a/3party/boost/boost/graph/compressed_sparse_row_graph.hpp b/3party/boost/boost/graph/compressed_sparse_row_graph.hpp index caa27a9060..59e8bb4aba 100644 --- a/3party/boost/boost/graph/compressed_sparse_row_graph.hpp +++ b/3party/boost/boost/graph/compressed_sparse_row_graph.hpp @@ -41,12 +41,9 @@ #include #include #include -#include - -#ifdef BOOST_GRAPH_NO_BUNDLED_PROPERTIES -# error The Compressed Sparse Row graph only supports bundled properties. -# error You will need a compiler that conforms better to the C++ standard. -#endif +#include +#include +#include namespace boost { @@ -195,8 +192,8 @@ class compressed_sparse_row_graph::property graph_property_type; - typedef typename graph_detail::graph_prop::bundle graph_bundled; + typedef GraphProperty graph_property_type; + typedef typename lookup_one_property::type graph_bundled; typedef detail::compressed_sparse_row_structure forward_type; @@ -746,8 +743,8 @@ class compressed_sparse_row_graph::property graph_property_type; - typedef typename graph_detail::graph_prop::bundle graph_bundled; + typedef GraphProperty graph_property_type; + typedef typename lookup_one_property::type graph_bundled; // typedef GraphProperty graph_property_type; typedef detail::compressed_sparse_row_structure forward_type; @@ -933,6 +930,7 @@ class compressed_sparse_row_graph - void - add_edges_sorted_internal( - BidirectionalIteratorOrig first_sorted, - BidirectionalIteratorOrig last_sorted, - EPIterOrig ep_iter_sorted, - const GlobalToLocal& global_to_local) { - m_forward.add_edges_sorted_internal(first_sorted, last_sorted, ep_iter_sorted, global_to_local); - } - - template - void - add_edges_sorted_internal( - BidirectionalIteratorOrig first_sorted, - BidirectionalIteratorOrig last_sorted, - EPIterOrig ep_iter_sorted) { - m_forward.add_edges_sorted_internal(first_sorted, last_sorted, ep_iter_sorted, typed_identity_property_map()); - } - - // Add edges from a sorted (smallest sources first) range of pairs - template - void - add_edges_sorted_internal( - BidirectionalIteratorOrig first_sorted, - BidirectionalIteratorOrig last_sorted) { - m_forward.add_edges_sorted_internal(first_sorted, last_sorted, detail::default_construct_iterator()); - } - - template - void - add_edges_sorted_internal_global( - BidirectionalIteratorOrig first_sorted, - BidirectionalIteratorOrig last_sorted, - const GlobalToLocal& global_to_local) { - m_forward.add_edges_sorted_internal(first_sorted, last_sorted, detail::default_construct_iterator(), global_to_local); - } - - template - void - add_edges_sorted_internal_global( - BidirectionalIteratorOrig first_sorted, - BidirectionalIteratorOrig last_sorted, - EPIterOrig ep_iter_sorted, - const GlobalToLocal& global_to_local) { - m_forward.add_edges_sorted_internal(first_sorted, last_sorted, ep_iter_sorted, global_to_local); - } - - // Add edges from a range of (source, target) pairs that are unsorted - template - inline void - add_edges_internal(InputIterator first, InputIterator last, - const GlobalToLocal& global_to_local) { - typedef compressed_sparse_row_graph Graph; - typedef typename boost::graph_traits::vertex_descriptor vertex_t; - typedef typename boost::graph_traits::vertices_size_type vertex_num; - typedef typename boost::graph_traits::edges_size_type edge_num; - typedef std::vector > edge_vector_t; - edge_vector_t new_edges(first, last); - if (new_edges.empty()) return; - std::sort(new_edges.begin(), new_edges.end()); - this->add_edges_sorted_internal_global(new_edges.begin(), new_edges.end(), global_to_local); - } - - template - inline void - add_edges_internal(InputIterator first, InputIterator last) { - this->add_edges_internal(first, last, typed_identity_property_map()); - } - - // Add edges from a range of (source, target) pairs and edge properties that - // are unsorted - template - inline void - add_edges_internal(InputIterator first, InputIterator last, - EPIterator ep_iter, EPIterator ep_iter_end, - const GlobalToLocal& global_to_local) { - typedef compressed_sparse_row_graph Graph; - typedef typename boost::graph_traits::vertex_descriptor vertex_t; - typedef typename boost::graph_traits::vertices_size_type vertex_num; - typedef typename boost::graph_traits::edges_size_type edge_num; - typedef std::pair vertex_pair; - typedef std::vector< - boost::tuple > - edge_vector_t; - edge_vector_t new_edges - (boost::make_zip_iterator(boost::make_tuple(first, ep_iter)), - boost::make_zip_iterator(boost::make_tuple(last, ep_iter_end))); - if (new_edges.empty()) return; - std::sort(new_edges.begin(), new_edges.end(), - boost::detail::compare_first< - std::less >()); - m_forward.add_edges_sorted_internal - (boost::make_transform_iterator( - new_edges.begin(), - boost::detail::my_tuple_get_class<0, vertex_pair>()), - boost::make_transform_iterator( - new_edges.end(), - boost::detail::my_tuple_get_class<0, vertex_pair>()), - boost::make_transform_iterator( - new_edges.begin(), - boost::detail::my_tuple_get_class - <1, edge_bundled>()), - global_to_local); - } - - // Add edges from a range of (source, target) pairs and edge properties that - // are unsorted - template - inline void - add_edges_internal(InputIterator first, InputIterator last, - EPIterator ep_iter, EPIterator ep_iter_end) { - this->add_edges_internal(first, last, ep_iter, ep_iter_end, typed_identity_property_map()); + set_up_backward_property_links(); } using inherited_vertex_properties::operator[]; @@ -1134,7 +1015,6 @@ add_vertices(typename BOOST_DIR_CSR_GRAPH_TYPE::vertices_size_type count, BOOST_ Vertex old_num_verts_plus_one = g.m_forward.m_rowstart.size(); EdgeIndex numedges = g.m_forward.m_rowstart.back(); g.m_forward.m_rowstart.resize(old_num_verts_plus_one + count, numedges); - g.m_backward.m_rowstart.resize(old_num_verts_plus_one + count, numedges); g.vertex_properties().resize(num_vertices(g)); return old_num_verts_plus_one - 1; } @@ -1383,26 +1263,110 @@ edges(const BOOST_CSR_GRAPH_TYPE& g) // Graph properties template inline void -set_property(BOOST_CSR_GRAPH_TYPE& g, Tag, const Value& value) +set_property(BOOST_CSR_GRAPH_TYPE& g, Tag tag, const Value& value) { - get_property_value(g.m_property, Tag()) = value; + get_property_value(g.m_property, tag) = value; } template inline typename graph_property::type& -get_property(BOOST_CSR_GRAPH_TYPE& g, Tag) +get_property(BOOST_CSR_GRAPH_TYPE& g, Tag tag) { - return get_property_value(g.m_property, Tag()); + return get_property_value(g.m_property, tag); } template inline const typename graph_property::type& -get_property(const BOOST_CSR_GRAPH_TYPE& g, Tag) +get_property(const BOOST_CSR_GRAPH_TYPE& g, Tag tag) { - return get_property_value(g.m_property, Tag()); + return get_property_value(g.m_property, tag); +} + +template +struct csr_property_map_helper {}; +// Kind == void for invalid property tags, so we can use that to SFINAE out + +template +struct csr_property_map_helper { + typedef vertex_all_t all_tag; + typedef typename property_traits::type>::key_type key_type; + typedef VertexProperty plist_type; + typedef typename property_map::type all_type; + typedef typename property_map::const_type all_const_type; + typedef transform_value_property_map, all_type> type; + typedef transform_value_property_map, all_const_type> const_type; +}; + +template +struct csr_property_map_helper { + typedef edge_all_t all_tag; + typedef typename property_traits::type>::key_type key_type; + typedef EdgeProperty plist_type; + typedef typename property_map::type all_type; + typedef typename property_map::const_type all_const_type; + typedef transform_value_property_map, all_type> type; + typedef transform_value_property_map, all_const_type> const_type; +}; + +template +struct csr_property_map_helper { + typedef graph_all_t all_tag; + typedef BOOST_CSR_GRAPH_TYPE* key_type; + typedef GraphProperty plist_type; + typedef typename property_map::type all_type; + typedef typename property_map::const_type all_const_type; + typedef transform_value_property_map, all_type> type; + typedef transform_value_property_map, all_const_type> const_type; +}; + +template +struct property_map: + csr_property_map_helper< + BOOST_CSR_GRAPH_TYPE, + Tag, + typename detail::property_kind_from_graph + ::type> {}; + +template +typename property_map::type +get(Tag tag, BOOST_CSR_GRAPH_TYPE& g) { + return typename property_map::type(tag, get(typename property_map::all_tag(), g)); +} + +template +typename property_map::const_type +get(Tag tag, const BOOST_CSR_GRAPH_TYPE& g) { + return typename property_map::const_type(tag, get(typename property_map::all_tag(), g)); +} + +template +typename property_traits::type>::reference +get(Tag tag, BOOST_CSR_GRAPH_TYPE& g, typename property_map::key_type k) { + typedef typename property_map::all_tag all_tag; + typedef typename property_map::type outer_pm; + return lookup_one_property::value_type, Tag>::lookup(get(all_tag(), g, k), tag); +} + +template +typename property_traits::const_type>::reference +get(Tag tag, const BOOST_CSR_GRAPH_TYPE& g, typename property_map::key_type k) { + typedef typename property_map::all_tag all_tag; + typedef typename property_map::const_type outer_pm; + return lookup_one_property::value_type, Tag>::lookup(get(all_tag(), g, k), tag); +} + +template +void +put(Tag tag, + BOOST_CSR_GRAPH_TYPE& g, + typename property_map::key_type k, + typename lookup_one_property::plist_type, Tag>::type val) { + typedef typename property_map::all_tag all_tag; + typedef typename property_map::type outer_pm; + lookup_one_property::plist_type, Tag>::lookup(get(all_tag(), g, k), tag) = val; } template @@ -1420,19 +1384,26 @@ struct property_map }; template -struct property_map +struct property_map { typedef typename BOOST_CSR_GRAPH_TYPE::inherited_vertex_properties::vertex_map_type type; typedef typename BOOST_CSR_GRAPH_TYPE::inherited_vertex_properties::const_vertex_map_type const_type; }; template -struct property_map +struct property_map { typedef typename BOOST_CSR_GRAPH_TYPE::forward_type::inherited_edge_properties::edge_map_type type; typedef typename BOOST_CSR_GRAPH_TYPE::forward_type::inherited_edge_properties::const_edge_map_type const_type; }; +template +struct property_map +{ + typedef boost::ref_property_map type; + typedef boost::ref_property_map const_type; +}; + template inline typed_identity_property_map get(vertex_index_t, const BOOST_CSR_GRAPH_TYPE&) @@ -1448,6 +1419,21 @@ get(vertex_index_t, return v; } +template +inline typed_identity_property_map +get(vertex_index_t, BOOST_CSR_GRAPH_TYPE&) +{ + return typed_identity_property_map(); +} + +template +inline Vertex +get(vertex_index_t, + BOOST_CSR_GRAPH_TYPE&, Vertex v) +{ + return v; +} + template inline typename property_map::const_type get(edge_index_t, const BOOST_CSR_GRAPH_TYPE&) @@ -1466,125 +1452,144 @@ get(edge_index_t, const BOOST_CSR_GRAPH_TYPE&, } template -inline typename property_map::type -get(vertex_bundle_t, BOOST_CSR_GRAPH_TYPE& g) +inline typename property_map::const_type +get(edge_index_t, BOOST_CSR_GRAPH_TYPE&) +{ + typedef typename property_map::const_type + result_type; + return result_type(); +} + +template +inline EdgeIndex +get(edge_index_t, BOOST_CSR_GRAPH_TYPE&, + typename BOOST_CSR_GRAPH_TYPE::edge_descriptor e) +{ + return e.idx; +} + +template +inline typename property_map::type +get(vertex_all_t, BOOST_CSR_GRAPH_TYPE& g) { return g.get_vertex_bundle(get(vertex_index, g)); } template -inline typename property_map::const_type -get(vertex_bundle_t, const BOOST_CSR_GRAPH_TYPE& g) +inline typename property_map::const_type +get(vertex_all_t, const BOOST_CSR_GRAPH_TYPE& g) { return g.get_vertex_bundle(get(vertex_index, g)); } template inline VertexProperty& -get(vertex_bundle_t, +get(vertex_all_t, BOOST_CSR_GRAPH_TYPE& g, Vertex v) { - return get(vertex_bundle, g)[v]; + return get(vertex_all, g)[v]; } template inline const VertexProperty& -get(vertex_bundle_t, +get(vertex_all_t, const BOOST_CSR_GRAPH_TYPE& g, Vertex v) { - return get(vertex_bundle, g)[v]; + return get(vertex_all, g)[v]; } template inline void -put(vertex_bundle_t, +put(vertex_all_t, BOOST_CSR_GRAPH_TYPE& g, Vertex v, const VertexProperty& val) { - put(get(vertex_bundle, g), v, val); + put(get(vertex_all, g), v, val); } template -inline typename property_map::type -get(edge_bundle_t, BOOST_CSR_GRAPH_TYPE& g) +inline typename property_map::type +get(edge_all_t, BOOST_CSR_GRAPH_TYPE& g) { return g.m_forward.get_edge_bundle(get(edge_index, g)); } template -inline typename property_map::const_type -get(edge_bundle_t, const BOOST_CSR_GRAPH_TYPE& g) +inline typename property_map::const_type +get(edge_all_t, const BOOST_CSR_GRAPH_TYPE& g) { return g.m_forward.get_edge_bundle(get(edge_index, g)); } template inline EdgeProperty& -get(edge_bundle_t, +get(edge_all_t, BOOST_CSR_GRAPH_TYPE& g, const typename BOOST_CSR_GRAPH_TYPE::edge_descriptor& e) { - return get(edge_bundle, g)[e]; + return get(edge_all, g)[e]; } template inline const EdgeProperty& -get(edge_bundle_t, +get(edge_all_t, const BOOST_CSR_GRAPH_TYPE& g, const typename BOOST_CSR_GRAPH_TYPE::edge_descriptor& e) { - return get(edge_bundle, g)[e]; + return get(edge_all, g)[e]; } template inline void -put(edge_bundle_t, +put(edge_all_t, BOOST_CSR_GRAPH_TYPE& g, const typename BOOST_CSR_GRAPH_TYPE::edge_descriptor& e, const EdgeProperty& val) { - put(get(edge_bundle, g), e, val); + put(get(edge_all, g), e, val); } -template -inline -typename property_map::type -get(T Bundle::* p, BOOST_CSR_GRAPH_TYPE& g) +template +inline typename property_map::type +get(graph_all_t, BOOST_CSR_GRAPH_TYPE& g) { - typedef typename property_map::type - result_type; - return result_type(&g, p); + return typename property_map::type(g.m_property); } -template -inline -typename property_map::const_type -get(T Bundle::* p, BOOST_CSR_GRAPH_TYPE const & g) +template +inline typename property_map::const_type +get(graph_all_t, const BOOST_CSR_GRAPH_TYPE& g) { - typedef typename property_map::const_type - result_type; - return result_type(&g, p); + return typename property_map::const_type(g.m_property); } -template -inline T -get(T Bundle::* p, BOOST_CSR_GRAPH_TYPE const & g, - const Key& key) +template +inline GraphProperty& +get(graph_all_t, + BOOST_CSR_GRAPH_TYPE& g, + BOOST_CSR_GRAPH_TYPE*) { - return get(get(p, g), key); + return g.m_property; } -template +template +inline const GraphProperty& +get(graph_all_t, + const BOOST_CSR_GRAPH_TYPE& g, + BOOST_CSR_GRAPH_TYPE*) +{ + return g.m_property; +} + +template inline void -put(T Bundle::* p, BOOST_CSR_GRAPH_TYPE& g, - const Key& key, const T& value) +put(graph_all_t, + BOOST_CSR_GRAPH_TYPE& g, + BOOST_CSR_GRAPH_TYPE*, + const GraphProperty& val) { - put(get(p, g), key, value); + g.m_property = val; } #undef BOOST_CSR_GRAPH_TYPE diff --git a/3party/boost/boost/graph/connected_components.hpp b/3party/boost/boost/graph/connected_components.hpp index 90015e6703..076b2a68e1 100644 --- a/3party/boost/boost/graph/connected_components.hpp +++ b/3party/boost/boost/graph/connected_components.hpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace boost { @@ -64,7 +65,7 @@ namespace boost { if (num_vertices(g) == 0) return 0; typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename boost::graph_traits::directed_category directed; BOOST_STATIC_ASSERT((boost::is_same::value)); @@ -84,7 +85,7 @@ namespace boost { if (num_vertices(g) == 0) return 0; typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename boost::graph_traits::directed_category directed; // BOOST_STATIC_ASSERT((boost::is_same::value)); diff --git a/3party/boost/boost/graph/copy.hpp b/3party/boost/boost/graph/copy.hpp index 8ef01238c5..21bb0fb01e 100644 --- a/3party/boost/boost/graph/copy.hpp +++ b/3party/boost/boost/graph/copy.hpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -53,6 +54,48 @@ namespace boost { namespace detail { + // Hack to make transpose_graph work with the same interface as before + template + struct remove_reverse_edge_descriptor { + typedef Desc type; + static Desc convert(const Desc& d, const Graph&) {return d;} + }; + + template + struct remove_reverse_edge_descriptor > { + typedef Desc type; + static Desc convert(const reverse_graph_edge_descriptor& d, const Graph& g) { + return get(edge_underlying, g, d); + } + }; + + // Add a reverse_graph_edge_descriptor wrapper if the Graph is a + // reverse_graph but the edge descriptor is from the original graph (this + // case comes from the fact that transpose_graph uses reverse_graph + // internally but doesn't expose the different edge descriptor type to the + // user). + template + struct add_reverse_edge_descriptor { + typedef Desc type; + static Desc convert(const Desc& d) {return d;} + }; + + template + struct add_reverse_edge_descriptor > { + typedef reverse_graph_edge_descriptor type; + static reverse_graph_edge_descriptor convert(const Desc& d) { + return reverse_graph_edge_descriptor(d); + } + }; + + template + struct add_reverse_edge_descriptor, boost::reverse_graph > { + typedef reverse_graph_edge_descriptor type; + static reverse_graph_edge_descriptor convert(const reverse_graph_edge_descriptor& d) { + return d; + } + }; + // Default edge and vertex property copiers template @@ -63,7 +106,7 @@ namespace boost { template void operator()(const Edge1& e1, Edge2& e2) const { - put(edge_all_map2, e2, get(edge_all_map1, e1)); + put(edge_all_map2, e2, get(edge_all_map1, add_reverse_edge_descriptor::convert(e1))); } typename property_map::const_type edge_all_map1; mutable typename property_map::type edge_all_map2; @@ -112,6 +155,7 @@ namespace boost { CopyVertex copy_vertex, CopyEdge copy_edge, Orig2CopyVertexIndexMap orig2copy, IndexMap) { + typedef remove_reverse_edge_descriptor::edge_descriptor> cvt; typename graph_traits::vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) { typename graph_traits::vertex_descriptor @@ -126,7 +170,7 @@ namespace boost { boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei, g_in)), get(orig2copy, target(*ei, g_in)), g_out); - copy_edge(*ei, new_e); + copy_edge(cvt::convert(*ei, g_in), new_e); } } }; @@ -141,6 +185,7 @@ namespace boost { CopyVertex copy_vertex, CopyEdge copy_edge, Orig2CopyVertexIndexMap orig2copy, IndexMap) { + typedef remove_reverse_edge_descriptor::edge_descriptor> cvt; typename graph_traits::vertex_iterator vi, vi_end; for (boost::tie(vi, vi_end) = vertices(g_in); vi != vi_end; ++vi) { typename graph_traits::vertex_descriptor @@ -156,7 +201,7 @@ namespace boost { boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei, g_in)), get(orig2copy, target(*ei, g_in)), g_out); - copy_edge(*ei, new_e); + copy_edge(cvt::convert(*ei, g_in), new_e); } } } @@ -173,6 +218,7 @@ namespace boost { Orig2CopyVertexIndexMap orig2copy, IndexMap index_map) { + typedef remove_reverse_edge_descriptor::edge_descriptor> cvt; typedef color_traits Color; std::vector color(num_vertices(g_in), Color::white()); @@ -192,7 +238,7 @@ namespace boost { boost::tie(new_e, inserted) = add_edge(get(orig2copy, source(*ei,g_in)), get(orig2copy, target(*ei,g_in)), g_out); - copy_edge(*ei, new_e); + copy_edge(cvt::convert(*ei, g_in), new_e); } } color[get(index_map, *vi)] = Color::black(); @@ -234,7 +280,7 @@ namespace boost { typedef choose_copier_parameter type; }; template <> - struct choose_edge_copy { + struct choose_edge_copy { typedef choose_default_edge_copier type; }; template @@ -268,7 +314,7 @@ namespace boost { typedef choose_copier_parameter type; }; template <> - struct choose_vertex_copy { + struct choose_vertex_copy { typedef choose_default_vertex_copier type; }; template diff --git a/3party/boost/boost/graph/core_numbers.hpp b/3party/boost/boost/graph/core_numbers.hpp index 7ef08261c8..3db59c72b0 100644 --- a/3party/boost/boost/graph/core_numbers.hpp +++ b/3party/boost/boost/graph/core_numbers.hpp @@ -15,6 +15,7 @@ #include #include #include +#include /* * core_numbers @@ -46,7 +47,7 @@ namespace boost { struct CoreNumbersVisitorConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.examine_vertex(u,g); vis.finish_vertex(u,g); vis.examine_edge(e,g); diff --git a/3party/boost/boost/graph/dag_shortest_paths.hpp b/3party/boost/boost/graph/dag_shortest_paths.hpp index a46de9145b..325d1516c3 100644 --- a/3party/boost/boost/graph/dag_shortest_paths.hpp +++ b/3party/boost/boost/graph/dag_shortest_paths.hpp @@ -88,14 +88,16 @@ namespace boost { { typedef typename property_traits::value_type D; dummy_property_map p_map; + D inf = + choose_param(get_param(params, distance_inf_t()), + (std::numeric_limits::max)()); dag_shortest_paths (g, s, distance, weight, color, choose_param(get_param(params, vertex_predecessor), p_map), vis, choose_param(get_param(params, distance_compare_t()), std::less()), - choose_param(get_param(params, distance_combine_t()), closed_plus()), - choose_param(get_param(params, distance_inf_t()), - (std::numeric_limits::max)()), + choose_param(get_param(params, distance_combine_t()), closed_plus(inf)), + inf, choose_param(get_param(params, distance_zero_t()), D())); } diff --git a/3party/boost/boost/graph/degree_centrality.hpp b/3party/boost/boost/graph/degree_centrality.hpp index 24ecb6c511..f6cc7a22f4 100644 --- a/3party/boost/boost/graph/degree_centrality.hpp +++ b/3party/boost/boost/graph/degree_centrality.hpp @@ -8,6 +8,7 @@ #define BOOST_GRAPH_DEGREE_CENTRALITY_HPP #include +#include namespace boost { @@ -28,7 +29,7 @@ struct influence_measure inline degree_type operator ()(vertex_type v, const Graph& g) { - function_requires< IncidenceGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); return out_degree(v, g); } }; @@ -49,7 +50,7 @@ struct prestige_measure inline degree_type operator ()(vertex_type v, const Graph& g) { - function_requires< BidirectionalGraphConcept >(); + BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept )); return in_degree(v, g); } }; @@ -64,7 +65,7 @@ template inline typename Measure::degree_type degree_centrality(const Graph& g, Vertex v, Measure measure) { - function_requires< DegreeMeasureConcept >(); + BOOST_CONCEPT_ASSERT(( DegreeMeasureConcept )); return measure(v, g); } @@ -94,14 +95,14 @@ template inline void all_degree_centralities(const Graph& g, CentralityMap cent, Measure measure) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename property_traits::value_type Centrality; VertexIterator i, end; - for(tie(i, end) = vertices(g); i != end; ++i) { + for(boost::tie(i, end) = vertices(g); i != end; ++i) { Centrality c = degree_centrality(g, *i, measure); put(cent, *i, c); } diff --git a/3party/boost/boost/graph/depth_first_search.hpp b/3party/boost/boost/graph/depth_first_search.hpp index 74fe2c029c..34d73a2fdd 100644 --- a/3party/boost/boost/graph/depth_first_search.hpp +++ b/3party/boost/boost/graph/depth_first_search.hpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include @@ -31,7 +33,7 @@ namespace boost { class DFSVisitorConcept { public: void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.start_vertex(u, g); vis.discover_vertex(u, g); @@ -80,12 +82,12 @@ namespace boost { DFSVisitor& vis, ColorMap color, TerminatorFunc func = TerminatorFunc()) { - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( DFSVisitorConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; - function_requires< ColorValueConcept >(); + BOOST_CONCEPT_ASSERT(( ColorValueConcept )); typedef color_traits Color; typedef typename graph_traits::out_edge_iterator Iter; typedef std::pair > VertexInfo; @@ -151,12 +153,12 @@ namespace boost { DFSVisitor& vis, // pass-by-reference here, important! ColorMap color, TerminatorFunc func) { - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( DFSVisitorConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; - function_requires< ColorValueConcept >(); + BOOST_CONCEPT_ASSERT(( ColorValueConcept )); typedef color_traits Color; typename graph_traits::out_edge_iterator ei, ei_end; @@ -187,7 +189,7 @@ namespace boost { typename graph_traits::vertex_descriptor start_vertex) { typedef typename graph_traits::vertex_descriptor Vertex; - function_requires >(); + BOOST_CONCEPT_ASSERT(( DFSVisitorConcept )); typedef typename property_traits::value_type ColorValue; typedef color_traits Color; @@ -197,7 +199,7 @@ namespace boost { put(color, u, Color::white()); vis.initialize_vertex(u, g); } - if (start_vertex != implicit_cast(*vertices(g).first)){ vis.start_vertex(start_vertex, g); + if (start_vertex != detail::get_default_starting_vertex(g)){ vis.start_vertex(start_vertex, g); detail::depth_first_visit_impl(g, start_vertex, vis, color, detail::nontruth2()); } @@ -220,7 +222,7 @@ namespace boost { if (verts.first == verts.second) return; - depth_first_search(g, vis, color, *verts.first); + depth_first_search(g, vis, color, detail::get_default_starting_vertex(g)); } template @@ -281,27 +283,27 @@ namespace boost { } typedef dfs_visitor<> default_dfs_visitor; - // Named Parameter Variant - template - void - depth_first_search(const VertexListGraph& g, - const bgl_named_params& params) - { - typedef typename boost::graph_traits::vertex_iterator vi; - std::pair verts = vertices(g); - if (verts.first == verts.second) - return; - using namespace boost::graph::keywords; - typedef bgl_named_params params_type; - BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params) - depth_first_search - (g, - arg_pack[_visitor | make_dfs_visitor(null_visitor())], - boost::detail::make_color_map_from_arg_pack(g, arg_pack), - arg_pack[_root_vertex | *vertices(g).first] - ); + // Boost.Parameter named parameter variant + namespace graph { + namespace detail { + template + struct depth_first_search_impl { + typedef void result_type; + template + void operator()(const Graph& g, const ArgPack& arg_pack) const { + using namespace boost::graph::keywords; + boost::depth_first_search(g, + arg_pack[_visitor | make_dfs_visitor(null_visitor())], + boost::detail::make_color_map_from_arg_pack(g, arg_pack), + arg_pack[_root_vertex || boost::detail::get_default_starting_vertex_t(g)]); + } + }; + } + BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(depth_first_search, 1, 4) } + BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(depth_first_search, 1) + template void depth_first_visit (const IncidenceGraph& g, diff --git a/3party/boost/boost/graph/detail/adjacency_list.hpp b/3party/boost/boost/graph/detail/adjacency_list.hpp index 2ff293e11a..fa39898907 100644 --- a/3party/boost/boost/graph/detail/adjacency_list.hpp +++ b/3party/boost/boost/graph/detail/adjacency_list.hpp @@ -37,11 +37,6 @@ #include #include -// Symbol truncation problems with MSVC, trying to shorten names. -#define stored_edge se_ -#define stored_edge_property sep_ -#define stored_edge_iter sei_ - /* Outline for this file: @@ -67,11 +62,6 @@ */ -#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) -// Stay out of the way of the concept checking class -# define Graph Graph_ -#endif - namespace boost { namespace detail { @@ -727,8 +717,10 @@ namespace boost { typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g)); typename Config::OutEdgeList::iterator out_i = out_el.begin(); + typename Config::EdgeIter edge_iter_to_erase; for (; out_i != out_el.end(); ++out_i) if (&(*out_i).get_property() == &p) { + edge_iter_to_erase = (*out_i).get_iter(); out_el.erase(out_i); break; } @@ -736,10 +728,10 @@ namespace boost { typename Config::OutEdgeList::iterator in_i = in_el.begin(); for (; in_i != in_el.end(); ++in_i) if (&(*in_i).get_property() == &p) { - g.m_edges.erase((*in_i).get_iter()); in_el.erase(in_i); - return; + break; } + g.m_edges.erase(edge_iter_to_erase); } }; @@ -760,8 +752,10 @@ namespace boost { no_property* p = (no_property*)e.get_property(); typename Config::OutEdgeList& out_el = g.out_edge_list(source(e, g)); typename Config::OutEdgeList::iterator out_i = out_el.begin(); + typename Config::EdgeIter edge_iter_to_erase; for (; out_i != out_el.end(); ++out_i) if (&(*out_i).get_property() == p) { + edge_iter_to_erase = (*out_i).get_iter(); out_el.erase(out_i); break; } @@ -769,10 +763,10 @@ namespace boost { typename Config::OutEdgeList::iterator in_i = in_el.begin(); for (; in_i != in_el.end(); ++in_i) if (&(*in_i).get_property() == p) { - g.m_edges.erase((*in_i).get_iter()); in_el.erase(in_i); - return; + break; } + g.m_edges.erase(edge_iter_to_erase); } }; @@ -811,6 +805,7 @@ namespace boost { typedef typename EdgeList::value_type StoredEdge; typename EdgeList::iterator i = el.find(StoredEdge(v)), end = el.end(); + BOOST_ASSERT ((i != end)); if (i != end) { g.m_edges.erase((*i).get_iter()); el.erase(i); @@ -991,24 +986,12 @@ namespace boost { typedef typename Config::graph_type graph_type; typedef typename Config::edge_parallel_category Cat; graph_type& g = static_cast(g_); - typename Config::OutEdgeList& el = g.out_edge_list(u); - typename Config::OutEdgeList::iterator - ei = el.begin(), ei_end = el.end(); - for (; ei != ei_end; /* Increment below */ ) { - bool is_self_loop = (*ei).get_target() == u; - // Don't erase from our own incidence list in the case of a self-loop - // since we're clearing it anyway. - if (!is_self_loop) { - detail::erase_from_incidence_list - (g.out_edge_list((*ei).get_target()), u, Cat()); - typename Config::OutEdgeList::iterator ei_copy = ei; - ++ei; - if (!is_self_loop) g.m_edges.erase((*ei_copy).get_iter()); - } else { - ++ei; - } + while (true) { + typename Config::out_edge_iterator ei, ei_end; + boost::tie(ei, ei_end) = out_edges(u, g); + if (ei == ei_end) break; + remove_edge(*ei, g); } - g.out_edge_list(u).clear(); } // O(1) for allow_parallel_edge_tag // O(log(E/V)) for disallow_parallel_edge_tag @@ -1511,10 +1494,16 @@ namespace boost { typedef typename Config::edges_size_type edges_size_type; typedef typename Config::degree_size_type degree_size_type; typedef typename Config::StoredEdge StoredEdge; + typedef typename Config::vertex_property_type vertex_property_type; typedef typename Config::edge_property_type edge_property_type; + typedef typename Config::graph_property_type graph_property_type; typedef typename Config::global_edgelist_selector global_edgelist_selector; + + typedef typename lookup_one_property::type vertex_bundled; + typedef typename lookup_one_property::type edge_bundled; + typedef typename lookup_one_property::type graph_bundled; }; template @@ -1645,43 +1634,43 @@ namespace boost { inline typename boost::property_map::type - get_dispatch(adj_list_helper&, Property, + get_dispatch(adj_list_helper&, Property p, boost::edge_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::type PA; - return PA(); + return PA(p); } template inline typename boost::property_map::const_type - get_dispatch(const adj_list_helper&, Property, + get_dispatch(const adj_list_helper&, Property p, boost::edge_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::const_type PA; - return PA(); + return PA(p); } template inline typename boost::property_map::type - get_dispatch(adj_list_helper& g, Property, + get_dispatch(adj_list_helper& g, Property p, boost::vertex_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::type PA; - return PA(&static_cast(g)); + return PA(&static_cast(g), p); } template inline typename boost::property_map::const_type - get_dispatch(const adj_list_helper& g, Property, + get_dispatch(const adj_list_helper& g, Property p, boost::vertex_property_tag) { typedef typename Config::graph_type Graph; typedef typename boost::property_map::const_type PA; const Graph& cg = static_cast(g); - return PA(&cg); + return PA(&cg, p); } } // namespace detail @@ -1691,7 +1680,7 @@ namespace boost { inline typename boost::property_map::type get(Property p, adj_list_helper& g) { - typedef typename property_kind::type Kind; + typedef typename detail::property_kind_from_graph, Property>::type Kind; return detail::get_dispatch(g, p, Kind()); } template @@ -1699,7 +1688,7 @@ namespace boost { typename boost::property_map::const_type get(Property p, const adj_list_helper& g) { - typedef typename property_kind::type Kind; + typedef typename detail::property_kind_from_graph, Property>::type Kind; return detail::get_dispatch(g, p, Kind()); } @@ -2427,15 +2416,15 @@ namespace boost { typedef Reference reference; typedef typename Graph::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; - inline adj_list_vertex_property_map() { } - inline adj_list_vertex_property_map(const Graph*) { } + inline adj_list_vertex_property_map(const Graph* = 0, Tag tag = Tag()): m_tag(tag) { } inline Reference operator[](key_type v) const { StoredVertex* sv = (StoredVertex*)v; - return get_property_value(sv->m_property, Tag()); + return get_property_value(sv->m_property, m_tag); } inline Reference operator()(key_type v) const { return this->operator[](v); } + Tag m_tag; }; template @@ -2449,8 +2438,7 @@ namespace boost { typedef PropRef reference; typedef typename Graph::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; - inline adj_list_vertex_all_properties_map() { } - inline adj_list_vertex_all_properties_map(const Graph*) { } + inline adj_list_vertex_all_properties_map(const Graph* = 0, vertex_all_t = vertex_all_t()) { } inline PropRef operator[](key_type v) const { StoredVertex* sv = (StoredVertex*)v; return sv->m_property; @@ -2473,15 +2461,15 @@ namespace boost { typedef Reference reference; typedef typename boost::graph_traits::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; - vec_adj_list_vertex_property_map() { } - vec_adj_list_vertex_property_map(GraphPtr g) : m_g(g) { } + vec_adj_list_vertex_property_map(GraphPtr g = 0, Tag tag = Tag()) : m_g(g), m_tag(tag) { } inline Reference operator[](key_type v) const { - return get_property_value(m_g->m_vertices[v].m_property, Tag()); + return get_property_value(m_g->m_vertices[v].m_property, m_tag); } inline Reference operator()(key_type v) const { return this->operator[](v); } GraphPtr m_g; + Tag m_tag; }; template @@ -2495,8 +2483,7 @@ namespace boost { typedef PropertyRef reference; typedef typename boost::graph_traits::vertex_descriptor key_type; typedef boost::lvalue_property_map_tag category; - vec_adj_list_vertex_all_properties_map() { } - vec_adj_list_vertex_all_properties_map(GraphPtr g) : m_g(g) { } + vec_adj_list_vertex_all_properties_map(GraphPtr g = 0, vertex_all_t = vertex_all_t()) : m_g(g) { } inline PropertyRef operator[](key_type v) const { return m_g->m_vertices[v].m_property; } @@ -2542,7 +2529,7 @@ namespace boost { typedef boost::readable_property_map_tag category; inline vec_adj_list_vertex_id_map() { } template - inline vec_adj_list_vertex_id_map(const Graph&) { } + inline vec_adj_list_vertex_id_map(const Graph&, vertex_index_t) { } inline value_type operator[](key_type v) const { return v; } inline value_type operator()(key_type v) const { return v; } }; @@ -2579,21 +2566,14 @@ namespace boost { }; }; namespace detail { - template - struct adj_list_choose_vertex_pa_helper { - typedef adj_list_any_vertex_pa type; - }; - template <> - struct adj_list_choose_vertex_pa_helper { - typedef adj_list_all_vertex_pa type; - }; template - struct adj_list_choose_vertex_pa { - typedef typename adj_list_choose_vertex_pa_helper::type Helper; - typedef typename Helper::template bind_ Bind; - typedef typename Bind::type type; - typedef typename Bind::const_type const_type; - }; + struct adj_list_choose_vertex_pa + : boost::mpl::if_< + boost::is_same, + adj_list_all_vertex_pa, + adj_list_any_vertex_pa>::type + ::template bind_ + {}; template @@ -2609,12 +2589,9 @@ namespace boost { typedef vec_adj_list_all_vertex_pa type; }; template - struct vec_adj_list_choose_vertex_pa { - typedef typename vec_adj_list_choose_vertex_pa_helper::type Helper; - typedef typename Helper::template bind_ Bind; - typedef typename Bind::type type; - typedef typename Bind::const_type const_type; - }; + struct vec_adj_list_choose_vertex_pa + : vec_adj_list_choose_vertex_pa_helper::type::template bind_ + {}; } // namespace detail //========================================================================= @@ -2629,13 +2606,16 @@ namespace boost { Tag> > { + Tag tag; + explicit adj_list_edge_property_map(Tag tag = Tag()): tag(tag) {} + typedef Value value_type; typedef Ref reference; typedef detail::edge_desc_impl key_type; typedef boost::lvalue_property_map_tag category; inline Ref operator[](key_type e) const { Property& p = *(Property*)e.get_property(); - return get_property_value(p, Tag()); + return get_property_value(p, tag); } inline Ref operator()(key_type e) const { return this->operator[](e); @@ -2650,6 +2630,7 @@ namespace boost { PropPtr, Vertex> > { + explicit adj_list_edge_all_properties_map(edge_all_t = edge_all_t()) {} typedef Property value_type; typedef PropRef reference; typedef detail::edge_desc_impl key_type; @@ -2701,19 +2682,12 @@ namespace boost { typedef adj_list_all_edge_pmap type; }; template - struct adj_list_choose_edge_pmap { - typedef typename adj_list_choose_edge_pmap_helper::type Helper; - typedef typename Helper::template bind_ Bind; - typedef typename Bind::type type; - typedef typename Bind::const_type const_type; - }; + struct adj_list_choose_edge_pmap + : adj_list_choose_edge_pmap_helper::type::template bind_ + {}; struct adj_list_edge_property_selector { template - struct bind_ { - typedef adj_list_choose_edge_pmap Choice; - typedef typename Choice::type type; - typedef typename Choice::const_type const_type; - }; + struct bind_: adj_list_choose_edge_pmap {}; }; } // namespace detail @@ -2730,11 +2704,9 @@ namespace boost { struct adj_list_vertex_property_selector { template - struct bind_ { - typedef detail::adj_list_choose_vertex_pa Choice; - typedef typename Choice::type type; - typedef typename Choice::const_type const_type; - }; + struct bind_ + : detail::adj_list_choose_vertex_pa + {}; }; template <> struct vertex_property_selector { @@ -2743,11 +2715,7 @@ namespace boost { struct vec_adj_list_vertex_property_selector { template - struct bind_ { - typedef detail::vec_adj_list_choose_vertex_pa Choice; - typedef typename Choice::type type; - typedef typename Choice::const_type const_type; - }; + struct bind_: detail::vec_adj_list_choose_vertex_pa {}; }; template <> struct vertex_property_selector { @@ -2759,17 +2727,6 @@ namespace boost { #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) namespace boost { - #if BOOST_WORKAROUND( _STLPORT_VERSION, >= 0x500 ) - // STLport 5 already defines a hash specialization. - #else - template <> - struct hash< void* > // Need this when vertex_descriptor=void* - { - std::size_t - operator()(void* v) const { return (std::size_t)v; } - }; - #endif - template struct hash< boost::detail::stored_edge > { @@ -2804,15 +2761,6 @@ namespace boost { #endif -#undef stored_edge -#undef stored_edge_property -#undef stored_edge_iter - -#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) -// Stay out of the way of the concept checking class -#undef Graph -#endif - #endif // BOOST_GRAPH_DETAIL_DETAIL_ADJACENCY_LIST_CCT /* diff --git a/3party/boost/boost/graph/detail/compressed_sparse_row_struct.hpp b/3party/boost/boost/graph/detail/compressed_sparse_row_struct.hpp index 75ac96204d..56495f3436 100644 --- a/3party/boost/boost/graph/detail/compressed_sparse_row_struct.hpp +++ b/3party/boost/boost/graph/detail/compressed_sparse_row_struct.hpp @@ -44,7 +44,6 @@ #include #include #include -#include namespace boost { diff --git a/3party/boost/boost/graph/detail/geodesic.hpp b/3party/boost/boost/graph/detail/geodesic.hpp index 99edaf9e39..adcb17f0ae 100644 --- a/3party/boost/boost/graph/detail/geodesic.hpp +++ b/3party/boost/boost/graph/detail/geodesic.hpp @@ -11,6 +11,7 @@ #include #include #include +#include // TODO: Should this really be in detail? @@ -51,13 +52,13 @@ namespace detail { Combinator combine, Distance init) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< ReadablePropertyMapConcept >(); - function_requires< NumericValueConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); typedef numeric_values DistanceNumbers; - function_requires< AdaptableBinaryFunction >(); + BOOST_CONCEPT_ASSERT(( AdaptableBinaryFunction )); // If there's ever an infinite distance, then we simply return // infinity. Note that this /will/ include the a non-zero @@ -65,7 +66,7 @@ namespace detail { // zero, so it shouldn't be too problematic. Distance ret = init; VertexIterator i, end; - for(tie(i, end) = vertices(g); i != end; ++i) { + for(boost::tie(i, end) = vertices(g); i != end; ++i) { Vertex v = *i; if(get(dist, v) != DistanceNumbers::infinity()) { ret = combine(ret, get(dist, v)); diff --git a/3party/boost/boost/graph/detail/histogram_sort.hpp b/3party/boost/boost/graph/detail/histogram_sort.hpp index b359a73ded..ca6266a528 100644 --- a/3party/boost/boost/graph/detail/histogram_sort.hpp +++ b/3party/boost/boost/graph/detail/histogram_sort.hpp @@ -60,6 +60,7 @@ count_starts // Put the degree of each vertex v into m_rowstart[v + 1] for (KeyIterator i = begin; i != end; ++i) { if (key_filter(*i)) { + BOOST_ASSERT (key_transform(*i) < numkeys); ++starts[key_transform(*i) + 1]; } } @@ -99,6 +100,7 @@ histogram_sort(KeyIterator key_begin, KeyIterator key_end, for (KeyIterator i = key_begin; i != key_end; ++i, ++v1i) { if (key_filter(*i)) { vertices_size_type source = key_transform(*i); + BOOST_ASSERT (source < numkeys); EdgeIndex insert_pos = current_insert_positions[source]; ++current_insert_positions[source]; values1_out[insert_pos] = *v1i; @@ -137,6 +139,7 @@ histogram_sort(KeyIterator key_begin, KeyIterator key_end, for (KeyIterator i = key_begin; i != key_end; ++i, ++v1i, ++v2i) { if (key_filter(*i)) { vertices_size_type source = key_transform(*i); + BOOST_ASSERT (source < numkeys); EdgeIndex insert_pos = current_insert_positions[source]; ++current_insert_positions[source]; values1_out[insert_pos] = *v1i; @@ -163,6 +166,7 @@ histogram_sort_inplace(KeyIterator key_begin, std::vector insert_positions(rowstart, rowstart + numkeys); // 2. Swap the sources and targets into place for (size_t i = 0; i < rowstart[numkeys]; ++i) { + BOOST_ASSERT (key_transform(key_begin[i]) < numkeys); // While edge i is not in the right bucket: while (!(i >= rowstart[key_transform(key_begin[i])] && i < insert_positions[key_transform(key_begin[i])])) { // Add a slot in the right bucket @@ -197,6 +201,7 @@ histogram_sort_inplace(KeyIterator key_begin, std::vector insert_positions(rowstart, rowstart + numkeys); // 2. Swap the sources and targets into place for (size_t i = 0; i < rowstart[numkeys]; ++i) { + BOOST_ASSERT (key_transform(key_begin[i]) < numkeys); // While edge i is not in the right bucket: while (!(i >= rowstart[key_transform(key_begin[i])] && i < insert_positions[key_transform(key_begin[i])])) { // Add a slot in the right bucket diff --git a/3party/boost/boost/graph/detail/read_graphviz_spirit.hpp b/3party/boost/boost/graph/detail/read_graphviz_spirit.hpp index 4e8b22e5eb..9946469883 100644 --- a/3party/boost/boost/graph/detail/read_graphviz_spirit.hpp +++ b/3party/boost/boost/graph/detail/read_graphviz_spirit.hpp @@ -604,7 +604,9 @@ bool read_graphviz_spirit(MultiPassIterator begin, MultiPassIterator end, scanner_t scan(begin, end, policies); - return p.parse(scan); + bool ok = p.parse(scan); + m_graph.finish_building_graph(); + return ok; } } // namespace boost diff --git a/3party/boost/boost/graph/dijkstra_shortest_paths.hpp b/3party/boost/boost/graph/dijkstra_shortest_paths.hpp index 5b39cb3853..be0f97ea7b 100644 --- a/3party/boost/boost/graph/dijkstra_shortest_paths.hpp +++ b/3party/boost/boost/graph/dijkstra_shortest_paths.hpp @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef BOOST_GRAPH_DIJKSTRA_TESTING # include @@ -68,7 +69,7 @@ namespace boost { template struct DijkstraVisitorConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.discover_vertex(u, g); vis.examine_vertex(u, g); @@ -420,6 +421,9 @@ namespace boost { dummy_property_map p_map; typedef typename property_traits::value_type D; + D inf = choose_param(get_param(params, distance_inf_t()), + (std::numeric_limits::max)()); + dijkstra_shortest_paths (g, s, choose_param(get_param(params, vertex_predecessor), p_map), @@ -427,9 +431,8 @@ namespace boost { choose_param(get_param(params, distance_compare_t()), std::less()), choose_param(get_param(params, distance_combine_t()), - closed_plus()), - choose_param(get_param(params, distance_inf_t()), - (std::numeric_limits::max)()), + closed_plus(inf)), + inf, choose_param(get_param(params, distance_zero_t()), D()), choose_param(get_param(params, graph_visitor), diff --git a/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp b/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp index 443984ff0c..ca2a1ebd88 100644 --- a/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp +++ b/3party/boost/boost/graph/dijkstra_shortest_paths_no_color_map.hpp @@ -186,6 +186,9 @@ namespace boost { dummy_property_map predecessor_map; typedef typename property_traits::value_type DistanceType; + DistanceType inf = + choose_param(get_param(params, distance_inf_t()), + (std::numeric_limits::max)()); dijkstra_shortest_paths_no_color_map (graph, start_vertex, choose_param(get_param(params, vertex_predecessor), predecessor_map), @@ -193,9 +196,8 @@ namespace boost { choose_param(get_param(params, distance_compare_t()), std::less()), choose_param(get_param(params, distance_combine_t()), - closed_plus()), - choose_param(get_param(params, distance_inf_t()), - (std::numeric_limits::max)()), + closed_plus(inf)), + inf, choose_param(get_param(params, distance_zero_t()), DistanceType()), choose_param(get_param(params, graph_visitor), diff --git a/3party/boost/boost/graph/directed_graph.hpp b/3party/boost/boost/graph/directed_graph.hpp index 992546d46c..250d0b63d7 100644 --- a/3party/boost/boost/graph/directed_graph.hpp +++ b/3party/boost/boost/graph/directed_graph.hpp @@ -7,7 +7,6 @@ #ifndef BOOST_GRAPH_DIRECTED_GRAPH_HPP #define BOOST_GRAPH_DIRECTED_GRAPH_HPP -#include #include #include @@ -33,14 +32,12 @@ template < class directed_graph { public: - typedef typename graph_detail::graph_prop::property graph_property_type; - typedef typename graph_detail::graph_prop::bundle graph_bundled; - - typedef typename graph_detail::vertex_prop::property vertex_property_type; - typedef typename graph_detail::vertex_prop::bundle vertex_bundled; - - typedef typename graph_detail::edge_prop::property edge_property_type; - typedef typename graph_detail::edge_prop::bundle edge_bundled; + typedef GraphProp graph_property_type; + typedef VertexProp vertex_property_type; + typedef EdgeProp edge_property_type; + typedef typename lookup_one_property::type graph_bundled; + typedef typename lookup_one_property::type vertex_bundled; + typedef typename lookup_one_property::type edge_bundled; private: // Wrap the user-specified properties with an index. @@ -410,7 +407,7 @@ template typename DIRECTED_GRAPH::vertex_descriptor vertex(typename DIRECTED_GRAPH::vertices_size_type n, DIRECTED_GRAPH const& g) -{ return vertex(g.impl()); } +{ return vertex(n, g.impl()); } template std::pair @@ -590,35 +587,6 @@ void set_property(DIRECTED_GRAPH& g, Property p, Value v) { return set_property(g.impl(), p, v); } -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES - -template -inline typename property_map::type -get(Type Bundle::* p, DIRECTED_GRAPH& g) { - typedef typename property_map< - DIRECTED_GRAPH, Type Bundle::* - >::type return_type; - return return_type(&g, p); -} - -template -inline typename property_map::const_type -get(Type Bundle::* p, DIRECTED_GRAPH const& g) { - typedef typename property_map< - DIRECTED_GRAPH, Type Bundle::* - >::const_type return_type; - return return_type(&g, p); -} - -template -inline Type get(Type Bundle::* p, DIRECTED_GRAPH const& g, Key const& k) -{ return get(p, g.impl(), k); } - -template -inline void put(Type Bundle::* p, DIRECTED_GRAPH& g, Key const& k, Value const& v) -{ put(p, g.impl(), k, v); } -#endif - // Vertex index management template diff --git a/3party/boost/boost/graph/distributed/adjacency_list.hpp b/3party/boost/boost/graph/distributed/adjacency_list.hpp index 327d952db9..264ede512e 100644 --- a/3party/boost/boost/graph/distributed/adjacency_list.hpp +++ b/3party/boost/boost/graph/distributed/adjacency_list.hpp @@ -1882,6 +1882,30 @@ namespace boost { } //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + // Opposite of above. + edge_property_type split_edge_property(const base_edge_property_type& p) + { return split_edge_property(p, directed_selector()); } + + edge_property_type + split_edge_property(const base_edge_property_type& p, directedS) + { + return p.m_base; + } + + edge_property_type + split_edge_property(const base_edge_property_type& p, bidirectionalS) + { + return p.m_base; + } + + edge_property_type + split_edge_property(const base_edge_property_type& p, undirectedS) + { + return p.m_base.m_base; + } + //--------------------------------------------------------------------- + /** The set of messages that can be transmitted and received by * a distributed adjacency list. This list will eventually be * exhaustive, but is currently quite limited. @@ -2931,7 +2955,7 @@ namespace boost { return std::make_pair(edge_descriptor(), false); } else { BOOST_ASSERT(false); - exit(1); + abort(); } } diff --git a/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp b/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp index 064aaba191..5401f1240a 100644 --- a/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp +++ b/3party/boost/boost/graph/distributed/adjlist/redistribute.hpp @@ -237,8 +237,8 @@ PBGL_DISTRIB_ADJLIST_TYPE || get(vertex_to_processor, src) != src.owner || get(vertex_to_processor, tgt) != tgt.owner) redistributed_edges[get(vertex_to_processor, source(*ei, *this))] - .push_back(redistributed_edge(*ei, get(edge_all_t(), base(), - ei->local))); + .push_back(redistributed_edge(*ei, split_edge_property(get(edge_all_t(), base(), + ei->local)))); } inplace_all_to_all(pg, redistributed_edges); diff --git a/3party/boost/boost/graph/distributed/betweenness_centrality.hpp b/3party/boost/boost/graph/distributed/betweenness_centrality.hpp index b6ca7d06ef..04d249a5b8 100644 --- a/3party/boost/boost/graph/distributed/betweenness_centrality.hpp +++ b/3party/boost/boost/graph/distributed/betweenness_centrality.hpp @@ -1389,7 +1389,7 @@ namespace graph { namespace parallel { namespace detail { }; template<> - struct brandes_betweenness_centrality_dispatch1 + struct brandes_betweenness_centrality_dispatch1 { template @@ -1397,7 +1397,7 @@ namespace graph { namespace parallel { namespace detail { run(const Graph& g, CentralityMap centrality, EdgeCentralityMap edge_centrality_map, VertexIndexMap vertex_index, Buffer sources, typename graph_traits::edges_size_type delta, - boost::detail::error_property_not_found) + boost::param_not_found) { boost::graph::parallel::detail::brandes_betweenness_centrality_dispatch2( g, centrality, edge_centrality_map, vertex_index, sources, delta); @@ -1417,7 +1417,8 @@ brandes_betweenness_centrality(const Graph& g, typedef queue::vertex_descriptor> queue_t; queue_t q; - typedef typename property_value::type ew; + typedef typename get_param_type::type ew_param; + typedef typename detail::choose_impl_result::type ew; graph::parallel::detail::brandes_betweenness_centrality_dispatch1::run( g, choose_param(get_param(params, vertex_centrality), @@ -1427,7 +1428,7 @@ brandes_betweenness_centrality(const Graph& g, choose_const_pmap(get_param(params, vertex_index), g, vertex_index), choose_param(get_param(params, buffer_param_t()), boost::ref(q)), choose_param(get_param(params, lookahead_t()), 0), - get_param(params, edge_weight)); + choose_const_pmap(get_param(params, edge_weight), g, edge_weight)); } template @@ -1605,14 +1606,14 @@ namespace detail { namespace graph { }; template<> - struct non_distributed_brandes_betweenness_centrality_dispatch1 + struct non_distributed_brandes_betweenness_centrality_dispatch1 { template static void run(const ProcessGroup& pg, const Graph& g, CentralityMap centrality, EdgeCentralityMap edge_centrality_map, VertexIndexMap vertex_index, - Buffer sources, detail::error_property_not_found) + Buffer sources, param_not_found) { non_distributed_brandes_betweenness_centrality_dispatch2(pg, g, centrality, edge_centrality_map, vertex_index, sources); @@ -1631,7 +1632,8 @@ non_distributed_brandes_betweenness_centrality(const ProcessGroup& pg, const Gra typedef queue queue_t; queue_t q; - typedef typename property_value::type ew; + typedef typename get_param_type::type ew_param; + typedef typename detail::choose_impl_result::type ew; detail::graph::non_distributed_brandes_betweenness_centrality_dispatch1::run( pg, g, choose_param(get_param(params, vertex_centrality), @@ -1640,7 +1642,7 @@ non_distributed_brandes_betweenness_centrality(const ProcessGroup& pg, const Gra dummy_property_map()), choose_const_pmap(get_param(params, vertex_index), g, vertex_index), choose_param(get_param(params, buffer_param_t()), boost::ref(q)), - get_param(params, edge_weight)); + choose_const_pmap(get_param(params, edge_weight), g, edge_weight)); } template diff --git a/3party/boost/boost/graph/distributed/breadth_first_search.hpp b/3party/boost/boost/graph/distributed/breadth_first_search.hpp index c987585f5f..36e2df8bb7 100644 --- a/3party/boost/boost/graph/distributed/breadth_first_search.hpp +++ b/3party/boost/boost/graph/distributed/breadth_first_search.hpp @@ -118,7 +118,7 @@ namespace boost { typename graph_traits::vertex_descriptor s, ColorMap color, BFSVisitor vis, - error_property_not_found, + boost::param_not_found, VertexIndexMap vertex_index) { using boost::graph::parallel::process_group; diff --git a/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp b/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp index 01d32cfb88..33861c47b4 100644 --- a/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp +++ b/3party/boost/boost/graph/distributed/compressed_sparse_row_graph.hpp @@ -365,30 +365,22 @@ class compressed_sparse_row_graph< // Directly access a vertex or edge bundle vertex_bundled& operator[](vertex_descriptor v) { - std::pair locator - = get(vertex_global, *this, v); - BOOST_ASSERT(locator.first == process_id(m_process_group)); - return base().m_vertex_properties[locator.second]; + return get(vertex_bundle, *this, v); } const vertex_bundled& operator[](vertex_descriptor v) const { - std::pair locator - = get(vertex_global, *this, v); - BOOST_ASSERT(locator.first == process_id(m_process_group)); - return base().m_process_group[locator.second]; + return get(vertex_bundle, *this, v); } edge_bundled& operator[](edge_descriptor e) { - BOOST_ASSERT(get(vertex_owner, *this, e.src) == process_id(m_process_group)); - return base().m_edge_properties[e.idx]; + return get(edge_bundle, *this, e); } const edge_bundled& operator[](edge_descriptor e) const { - BOOST_ASSERT(get(vertex_owner, *this, e.src) == process_id(m_process_group)); - return base().m_edge_properties[e.idx]; + return get(edge_bundle, *this, e); } // Create a vertex descriptor from a process ID and a local index. @@ -1757,19 +1749,22 @@ class csr_edge_global_map public: // ----------------------------------------------------------------- // Readable Property Map concept requirements - typedef std::pair value_type; - typedef value_type reference; typedef detail::csr_edge_descriptor key_type; + typedef std::pair > value_type; + typedef value_type reference; typedef readable_property_map_tag category; }; template -inline std::pair +inline std::pair > get(csr_edge_global_map pm, typename csr_edge_global_map::key_type k) { const int local_index_bits = sizeof(Vertex) * CHAR_BIT - processor_bits; - return std::pair(k.src >> local_index_bits, k.idx); + const Vertex local_index_mask = Vertex(-1) >> processor_bits; + return std::pair > + ((k.src >> local_index_bits), + detail::csr_edge_descriptor(k.src & local_index_mask, k.idx)); } template @@ -1796,7 +1791,7 @@ get(edge_global_t, BOOST_DISTRIB_CSR_GRAPH_TYPE& g) template inline std::pair + typename BOOST_DISTRIB_CSR_GRAPH_TYPE::base_type::edge_descriptor> get(edge_global_t, BOOST_DISTRIB_CSR_GRAPH_TYPE& g, typename BOOST_DISTRIB_CSR_GRAPH_TYPE::edge_descriptor k) { @@ -1818,7 +1813,7 @@ get(edge_global_t, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g) template inline std::pair + typename BOOST_DISTRIB_CSR_GRAPH_TYPE::base_type::edge_descriptor> get(edge_global_t, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g, typename BOOST_DISTRIB_CSR_GRAPH_TYPE::edge_descriptor k) { @@ -1827,12 +1822,16 @@ get(edge_global_t, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g, const int local_index_bits = sizeof(vertex_descriptor) * CHAR_BIT - processor_bits; + const typename BOOST_DISTRIB_CSR_GRAPH_TYPE::edges_size_type local_index_mask = + typename BOOST_DISTRIB_CSR_GRAPH_TYPE::edges_size_type(-1) >> processor_bits; typedef std::pair + typename BOOST_DISTRIB_CSR_GRAPH_TYPE::base_type::edge_descriptor> result_type; - return result_type(k.src >> local_index_bits, k.idx); + return result_type(k.src >> local_index_bits, + typename BOOST_DISTRIB_CSR_GRAPH_TYPE::base_type::edge_descriptor + (k.src & local_index_mask, k.idx)); } // ----------------------------------------------------------------- @@ -1847,7 +1846,8 @@ class property_map typedef local_property_map< typename BOOST_DISTRIB_CSR_GRAPH_TYPE::process_group_type, global_map, - identity_property_map> type; + typename property_map::type + > type; typedef type const_type; }; @@ -1859,7 +1859,7 @@ get(edge_index_t, BOOST_DISTRIB_CSR_GRAPH_TYPE& g) typedef typename property_map ::type result_type; return result_type(g.process_group(), get(edge_global, g), - identity_property_map()); + get(edge_index, g.base())); } template @@ -1878,7 +1878,7 @@ get(edge_index_t, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g) typedef typename property_map ::const_type result_type; return result_type(g.process_group(), get(edge_global, g), - identity_property_map()); + get(edge_index, g.base())); } template @@ -1889,204 +1889,67 @@ get(edge_index_t, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g, return k.idx; } -/* Common traits for getting vertex_bundle and edge_bundle maps */ +template +class property_map { + typedef BOOST_DISTRIB_CSR_GRAPH_TYPE graph_type; + typedef typename graph_type::process_group_type process_group_type; + typedef typename graph_type::base_type base_graph_type; + typedef typename property_map::type + local_pmap; + typedef typename property_map::const_type + local_const_pmap; -namespace detail { - template struct get_bundles; + typedef graph_traits traits; + typedef typename graph_traits::vertex_descriptor local_vertex; + typedef typename property_traits::key_type local_key_type; - template - class get_bundles { - typedef BOOST_DISTRIB_CSR_GRAPH_TYPE Graph; - typedef typename Graph::process_group_type process_group_type; + typedef typename property_traits::value_type value_type; - // Extract the global property map for our key type. - typedef typename property_map::const_type vertex_global_map; - typedef typename property_traits::value_type vertex_locator; - typedef typename property_map::const_type edge_global_map; - typedef typename property_traits::value_type edge_locator; + typedef typename property_map::const_type + vertex_global_map; + typedef typename property_map::const_type + edge_global_map; - // Build the local property map - typedef bundle_property_map, - typename vertex_locator::second_type, - VertexProperty, - T> vertex_local_pmap; - - // Build the local const property map - typedef bundle_property_map, - typename vertex_locator::second_type, - VertexProperty, - const T> vertex_local_const_pmap; - - // Build the local property map - typedef bundle_property_map, - typename edge_locator::second_type, - EdgeProperty, - T> edge_local_pmap; - - // Build the local const property map - typedef bundle_property_map, - typename edge_locator::second_type, - EdgeProperty, - const T> edge_local_const_pmap; - - public: - typedef ::boost::parallel::distributed_property_map< - process_group_type, vertex_global_map, vertex_local_pmap> vertex_map_type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, vertex_global_map, vertex_local_const_pmap> vertex_map_const_type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, edge_global_map, edge_local_pmap> edge_map_type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, edge_global_map, edge_local_const_pmap> edge_map_const_type; - - }; - - template struct get_full_bundles; - - template - class get_full_bundles { // For vertex_bundle_t and edge_bundle_t - typedef BOOST_DISTRIB_CSR_GRAPH_TYPE Graph; - typedef typename Graph::process_group_type process_group_type; - - // Extract the global property map for our key type. - typedef typename property_map::const_type vertex_global_map; - typedef typename property_traits::value_type vertex_locator; - typedef typename property_map::const_type edge_global_map; - typedef typename property_traits::value_type edge_locator; - - // Build the local property maps - typedef typename property_map::type vertex_local_pmap; - typedef typename property_map::const_type vertex_local_const_pmap; - typedef typename property_map::type edge_local_pmap; - typedef typename property_map::const_type edge_local_const_pmap; - - public: - typedef ::boost::parallel::distributed_property_map< - process_group_type, vertex_global_map, vertex_local_pmap> vertex_map_type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, vertex_global_map, vertex_local_const_pmap> vertex_map_const_type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, edge_global_map, edge_local_pmap> edge_map_type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, edge_global_map, edge_local_const_pmap> edge_map_const_type; - - }; -} - -template -struct property_map -{ - typedef typename detail::get_full_bundles::vertex_map_type type; - typedef typename detail::get_full_bundles::vertex_map_const_type const_type; -}; - -template -struct property_map -{ - typedef typename detail::get_full_bundles::edge_map_type type; - typedef typename detail::get_full_bundles::edge_map_const_type const_type; -}; - -// ----------------------------------------------------------------- -// Bundled Properties -template -class property_map -{ - typedef BOOST_DISTRIB_CSR_GRAPH_TYPE Graph; - typedef typename Graph::process_group_type process_group_type; + typedef typename mpl::if_::type, + vertex_property_tag>, + vertex_global_map, edge_global_map>::type + global_map; public: - typedef typename mpl::if_, - typename detail::get_bundles::vertex_map_type, - typename detail::get_bundles::edge_map_type> - ::type type; + typedef ::boost::parallel::distributed_property_map< + process_group_type, global_map, local_pmap> type; - typedef typename mpl::if_, - typename detail::get_bundles::vertex_map_const_type, - typename detail::get_bundles::edge_map_const_type> - ::type const_type; + typedef ::boost::parallel::distributed_property_map< + process_group_type, global_map, local_const_pmap> const_type; }; -namespace detail { - // Retrieve the local bundle_property_map corresponding to a - // non-const vertex property. - template - inline bundle_property_map, - typename Graph::vertex_descriptor, - typename Graph::vertex_bundled, T> - get_distrib_csr_bundle(T Bundle::* p, Graph& g, mpl::true_) - { - typedef bundle_property_map, - typename Graph::vertex_descriptor, - typename Graph::vertex_bundled, T> result_type; - return result_type(&g.base().vertex_properties().m_vertex_properties, p); - } - - // Retrieve the local bundle_property_map corresponding to a - // const vertex property. - template - inline bundle_property_map, - typename Graph::vertex_descriptor, - typename Graph::vertex_bundled, const T> - get_distrib_csr_bundle(T Bundle::* p, const Graph& g, mpl::true_) - { - typedef bundle_property_map< - const std::vector, - typename Graph::vertex_descriptor, - typename Graph::vertex_bundled, const T> result_type; - return result_type(&g.base().vertex_properties().m_vertex_properties, p); - } - - // Retrieve the local bundle_property_map corresponding to a - // non-const edge property. - template - inline bundle_property_map, - typename Graph::edges_size_type, - typename Graph::edge_bundled, T> - get_distrib_csr_bundle(T Bundle::* p, Graph& g, mpl::false_) - { - typedef bundle_property_map, - typename Graph::edges_size_type, - typename Graph::edge_bundled, T> result_type; - return result_type(&g.base().edge_properties().m_edge_properties, p); - } - - // Retrieve the local bundle_property_map corresponding to a - // const edge property. - template - inline bundle_property_map, - typename Graph::edges_size_type, - typename Graph::edge_bundled, const T> - get_distrib_csr_bundle(T Bundle::* p, const Graph& g, mpl::false_) - { - typedef bundle_property_map< - const std::vector, - typename Graph::edges_size_type, - typename Graph::edge_bundled, const T> result_type; - return result_type(&g.base().edge_properties().m_edge_properties, p); - } -} - -template -typename property_map::type -get(T Bundle::* p, BOOST_DISTRIB_CSR_GRAPH_TYPE& g) +template +typename property_map::type +get(Tag tag, BOOST_DISTRIB_CSR_GRAPH_TYPE& g) { typedef BOOST_DISTRIB_CSR_GRAPH_TYPE Graph; - typedef typename property_map::type result_type; - - // Resolver + typedef typename property_map::type result_type; typedef typename property_traits::value_type value_type; - typedef typename property_reduce::template apply + typedef typename property_reduce::template apply + reduce; + + typedef typename mpl::if_::type, + vertex_property_tag>, + vertex_global_t, edge_global_t>::type + global_map_t; + + return result_type(g.process_group(), get(global_map_t(), g), + get(tag, g.base()), reduce()); +} + +template +typename property_map::const_type +get(Tag tag, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g) +{ + typedef BOOST_DISTRIB_CSR_GRAPH_TYPE Graph; + typedef typename property_map::const_type result_type; + typedef typename property_traits::value_type value_type; + typedef typename property_reduce::template apply reduce; typedef typename property_traits::key_type descriptor; @@ -2096,35 +1959,7 @@ get(T Bundle::* p, BOOST_DISTRIB_CSR_GRAPH_TYPE& g) global_map_t; return result_type(g.process_group(), get(global_map_t(), g), - detail::get_distrib_csr_bundle - (p, g, mpl::bool_::value>()), - reduce()); -} - -template -typename property_map::const_type -get(T Bundle::* p, const BOOST_DISTRIB_CSR_GRAPH_TYPE& g) -{ - typedef BOOST_DISTRIB_CSR_GRAPH_TYPE Graph; - typedef typename property_map::const_type result_type; - - // Resolver - typedef typename property_traits::value_type value_type; - typedef typename property_reduce::template apply - reduce; - - typedef typename property_traits::key_type descriptor; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - typedef typename mpl::if_, - vertex_global_t, edge_global_t>::type - global_map_t; - - return result_type(g.process_group(), get(global_map_t(), g), - detail::get_distrib_csr_bundle - (p, g, mpl::bool_::value>()), - reduce()); + get(tag, g.base()), reduce()); } namespace mpi { diff --git a/3party/boost/boost/graph/distributed/concepts.hpp b/3party/boost/boost/graph/distributed/concepts.hpp index ae1a6951c8..1c85b4476f 100644 --- a/3party/boost/boost/graph/distributed/concepts.hpp +++ b/3party/boost/boost/graph/distributed/concepts.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #if BOOST_VERSION >= 103500 # include @@ -46,10 +47,10 @@ struct DistributedVertexListGraphConcept typedef typename graph_traits::traversal_category traversal_category; void constraints() { - function_requires< GraphConcept >(); - function_requires< MultiPassInputIteratorConcept >(); - function_requires< ConvertibleConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); + BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept )); + BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); #ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if @@ -92,13 +93,13 @@ struct DistributedEdgeListGraphConcept typedef typename graph_traits::traversal_category traversal_category; void constraints() { - function_requires< GraphConcept >(); - function_requires< MultiPassInputIteratorConcept >(); - function_requires< DefaultConstructibleConcept >(); - function_requires< EqualityComparableConcept >(); - function_requires< AssignableConcept >(); - function_requires< ConvertibleConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); + BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept )); + BOOST_CONCEPT_ASSERT(( DefaultConstructibleConcept )); + BOOST_CONCEPT_ASSERT(( EqualityComparableConcept )); + BOOST_CONCEPT_ASSERT(( AssignableConcept )); + BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); p = edges(g); e = *p.first; diff --git a/3party/boost/boost/graph/distributed/detail/mpi_process_group.ipp b/3party/boost/boost/graph/distributed/detail/mpi_process_group.ipp index 551435ef0d..a4d3546239 100644 --- a/3party/boost/boost/graph/distributed/detail/mpi_process_group.ipp +++ b/3party/boost/boost/graph/distributed/detail/mpi_process_group.ipp @@ -725,7 +725,7 @@ receive(const mpi_process_group& pg, process_id(pg), source, tag, pg.my_block_number()); BOOST_ASSERT(false); - exit(1); + abort(); } } @@ -746,7 +746,7 @@ receive(const mpi_process_group& pg, int source, int tag, T values[], process_id(pg), source, tag, pg.my_block_number()); BOOST_ASSERT(false); - exit(1); + abort(); } } diff --git a/3party/boost/boost/graph/distributed/dijkstra_shortest_paths.hpp b/3party/boost/boost/graph/distributed/dijkstra_shortest_paths.hpp index f72fa11a50..acfd194400 100644 --- a/3party/boost/boost/graph/distributed/dijkstra_shortest_paths.hpp +++ b/3party/boost/boost/graph/distributed/dijkstra_shortest_paths.hpp @@ -49,7 +49,7 @@ namespace boost { }; template<> - struct parallel_dijkstra_impl2< ::boost::detail::error_property_not_found > + struct parallel_dijkstra_impl2< ::boost::param_not_found > { template::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, - ::boost::detail::error_property_not_found, + ::boost::param_not_found, WeightMap weight, IndexMap index_map, ColorMap color_map, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) @@ -95,7 +95,7 @@ namespace boost { }; template<> - struct parallel_dijkstra_impl< ::boost::detail::error_property_not_found > + struct parallel_dijkstra_impl< ::boost::param_not_found > { private: template::vertex_descriptor s, PredecessorMap predecessor, DistanceMap distance, Lookahead lookahead, WeightMap weight, IndexMap index_map, - ::boost::detail::error_property_not_found, + ::boost::param_not_found, Compare compare, Combine combine, DistInf inf, DistZero zero, DijkstraVisitor vis) { @@ -190,8 +190,7 @@ namespace boost { IndexMap> DefColorMap; DefColorMap color_map(color.begin(), index_map); - typedef typename property_value< bgl_named_params, - vertex_color_t>::type color_map_type; + typedef typename get_param_type< vertex_color_t, bgl_named_params >::type color_map_type; graph::detail::parallel_dijkstra_impl ::run(g, s, predecessor, distance, diff --git a/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp b/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp index 1cce5c8739..9282dfe7c8 100644 --- a/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp +++ b/3party/boost/boost/graph/distributed/hohberg_biconnected_components.hpp @@ -44,6 +44,7 @@ #include #include #include +#include namespace boost { namespace graph { namespace distributed { @@ -908,7 +909,7 @@ hohberg_biconnected_components undirected_tag>::value)); // The graph must model Incidence Graph - function_requires< IncidenceGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); typedef typename graph_traits::edges_size_type edges_size_type; typedef typename graph_traits::degree_size_type degree_size_type; diff --git a/3party/boost/boost/graph/distributed/page_rank.hpp b/3party/boost/boost/graph/distributed/page_rank.hpp index c2c230d387..1fc43ed683 100644 --- a/3party/boost/boost/graph/distributed/page_rank.hpp +++ b/3party/boost/boost/graph/distributed/page_rank.hpp @@ -93,6 +93,7 @@ page_rank_impl(const Graph& g, RankMap rank_map, Done done, ::const_type vertex_owner_map; typename property_map::const_type owner = get(vertex_owner, g); + (void)owner; typedef typename boost::graph::parallel::process_group_type ::type process_group_type; diff --git a/3party/boost/boost/graph/distributed/strong_components.hpp b/3party/boost/boost/graph/distributed/strong_components.hpp index f2c021f8cd..16d61afdb0 100644 --- a/3party/boost/boost/graph/distributed/strong_components.hpp +++ b/3party/boost/boost/graph/distributed/strong_components.hpp @@ -693,7 +693,7 @@ namespace boost { namespace graph { namespace distributed { if (estart != eend) { boost::tie(restart, reend) = out_edges(get(fr, v), gr); while (restart != reend && find(vertex_sets[i].begin(), vertex_sets[i].end(), - get(rf, target(*restart,g))) == vertex_sets[i].end()) restart++; + get(rf, target(*restart,gr))) == vertex_sets[i].end()) restart++; if (restart != reend) new_set.push_back(v); } diff --git a/3party/boost/boost/graph/dll_import_export.hpp b/3party/boost/boost/graph/dll_import_export.hpp index cc369d1d12..d03fcd3f2e 100644 --- a/3party/boost/boost/graph/dll_import_export.hpp +++ b/3party/boost/boost/graph/dll_import_export.hpp @@ -13,15 +13,13 @@ #include -#ifdef BOOST_HAS_DECLSPEC -# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_GRAPH_DYN_LINK) -# ifdef BOOST_GRAPH_SOURCE -# define BOOST_GRAPH_DECL __declspec(dllexport) -# else -# define BOOST_GRAPH_DECL __declspec(dllimport) -# endif // BOOST_GRAPH_SOURCE -# endif // DYN_LINK -#endif // BOOST_HAS_DECLSPEC +#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_GRAPH_DYN_LINK) +# ifdef BOOST_GRAPH_SOURCE +# define BOOST_GRAPH_DECL BOOST_SYMBOL_EXPORT +# else +# define BOOST_GRAPH_DECL BOOST_SYMBOL_IMPORT +# endif // BOOST_GRAPH_SOURCE +#endif // DYN_LINK #ifndef BOOST_GRAPH_DECL # define BOOST_GRAPH_DECL diff --git a/3party/boost/boost/graph/dominator_tree.hpp b/3party/boost/boost/graph/dominator_tree.hpp index db40cb73fa..9371eee0d1 100644 --- a/3party/boost/boost/graph/dominator_tree.hpp +++ b/3party/boost/boost/graph/dominator_tree.hpp @@ -13,6 +13,7 @@ #include #include #include +#include // Dominator tree computation @@ -244,7 +245,7 @@ namespace boost { typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertices_size_type VerticesSizeType; - function_requires< BidirectionalGraphConcept >(); + BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept )); const VerticesSizeType numOfVertices = num_vertices(g); if (numOfVertices == 0) return; @@ -299,7 +300,7 @@ namespace boost { // Typedefs and concept check typedef typename graph_traits::vertices_size_type VerticesSizeType; - function_requires< BidirectionalGraphConcept >(); + BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept )); // 1. Depth first visit const VerticesSizeType numOfVertices = num_vertices(g); @@ -388,7 +389,7 @@ namespace boost { iterator_property_map >::iterator, IndexMap> vertexSetMap; - function_requires >(); + BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept )); // 1. Finding dominator // 1.1. Initialize diff --git a/3party/boost/boost/graph/eccentricity.hpp b/3party/boost/boost/graph/eccentricity.hpp index 99f80a452f..63797a8309 100644 --- a/3party/boost/boost/graph/eccentricity.hpp +++ b/3party/boost/boost/graph/eccentricity.hpp @@ -7,9 +7,10 @@ #ifndef BOOST_GRAPH_ECCENTRICITY_HPP #define BOOST_GRAPH_ECCENTRICITY_HPP -#include +#include #include #include +#include namespace boost { @@ -19,9 +20,9 @@ template ::value_type eccentricity(const Graph& g, DistanceMap dist, Combinator combine) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Distance; return detail::combine_distances(g, dist, combine, Distance(0)); @@ -31,9 +32,9 @@ template inline typename property_traits::value_type eccentricity(const Graph& g, DistanceMap dist) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Distance; return eccentricity(g, dist, detail::maximize()); @@ -44,12 +45,12 @@ inline std::pair::value_type, typename property_traits::value_type> all_eccentricities(const Graph& g, const DistanceMatrix& dist, EccentricityMap ecc) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type DistanceMap; - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename property_traits::value_type Eccentricity; BOOST_USING_STD_MIN(); BOOST_USING_STD_MAX(); @@ -76,10 +77,10 @@ inline std::pair::value_type, typename property_traits::value_type> radius_and_diameter(const Graph& g, EccentricityMap ecc) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type Eccentricity; BOOST_USING_STD_MIN(); BOOST_USING_STD_MAX(); diff --git a/3party/boost/boost/graph/edmonds_karp_max_flow.hpp b/3party/boost/boost/graph/edmonds_karp_max_flow.hpp index 43cc592d2e..8f86fb2026 100644 --- a/3party/boost/boost/graph/edmonds_karp_max_flow.hpp +++ b/3party/boost/boost/graph/edmonds_karp_max_flow.hpp @@ -52,21 +52,21 @@ namespace boost { // find minimum residual capacity along the augmenting path FlowValue delta = (std::numeric_limits::max)(); - e = p[sink]; + e = get(p, sink); do { BOOST_USING_STD_MIN(); - delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, residual_capacity[e]); + delta = min BOOST_PREVENT_MACRO_SUBSTITUTION(delta, get(residual_capacity, e)); u = source(e, g); - e = p[u]; + e = get(p, u); } while (u != src); // push delta units of flow along the augmenting path - e = p[sink]; + e = get(p, sink); do { - residual_capacity[e] -= delta; - residual_capacity[reverse_edge[e]] += delta; + put(residual_capacity, e, get(residual_capacity, e) - delta); + put(residual_capacity, get(reverse_edge, e), get(residual_capacity, get(reverse_edge, e)) + delta); u = source(e, g); - e = p[u]; + e = get(p, u); } while (u != src); } @@ -94,22 +94,22 @@ namespace boost { typename graph_traits::out_edge_iterator ei, e_end; for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) for (boost::tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei) - res[*ei] = cap[*ei]; + put(res, *ei, get(cap, *ei)); - color[sink] = Color::gray(); - while (color[sink] != Color::white()) { + put(color, sink, Color::gray()); + while (get(color, sink) != Color::white()) { boost::queue Q; breadth_first_search (detail::residual_graph(g, res), src, Q, make_bfs_visitor(record_edge_predecessors(pred, on_tree_edge())), color); - if (color[sink] != Color::white()) + if (get(color, sink) != Color::white()) detail::augment(g, src, sink, pred, res, rev); } // while typename property_traits::value_type flow = 0; for (boost::tie(ei, e_end) = out_edges(src, g); ei != e_end; ++ei) - flow += (cap[*ei] - res[*ei]); + flow += (get(cap, *ei) - get(res, *ei)); return flow; } // edmonds_karp_max_flow() @@ -140,7 +140,7 @@ namespace boost { } }; template<> - struct edmonds_karp_dispatch2 { + struct edmonds_karp_dispatch2 { template static typename edge_capacity_value::type apply @@ -149,7 +149,7 @@ namespace boost { typename graph_traits::vertex_descriptor sink, PredMap pred, const bgl_named_params& params, - detail::error_property_not_found) + param_not_found) { typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::vertices_size_type size_type; @@ -183,13 +183,13 @@ namespace boost { const bgl_named_params& params, PredMap pred) { - typedef typename property_value< bgl_named_params, vertex_color_t>::type C; + typedef typename get_param_type< vertex_color_t, bgl_named_params >::type C; return edmonds_karp_dispatch2::apply (g, src, sink, pred, params, get_param(params, vertex_color)); } }; template<> - struct edmonds_karp_dispatch1 { + struct edmonds_karp_dispatch1 { template static typename edge_capacity_value::type @@ -198,7 +198,7 @@ namespace boost { typename graph_traits::vertex_descriptor src, typename graph_traits::vertex_descriptor sink, const bgl_named_params& params, - detail::error_property_not_found) + param_not_found) { typedef typename graph_traits::edge_descriptor edge_descriptor; typedef typename graph_traits::vertices_size_type size_type; @@ -206,7 +206,7 @@ namespace boost { num_vertices(g) : 1; std::vector pred_vec(n); - typedef typename property_value< bgl_named_params, vertex_color_t>::type C; + typedef typename get_param_type< vertex_color_t, bgl_named_params >::type C; return edmonds_karp_dispatch2::apply (g, src, sink, make_iterator_property_map(pred_vec.begin(), choose_const_pmap @@ -227,7 +227,7 @@ namespace boost { typename graph_traits::vertex_descriptor sink, const bgl_named_params& params) { - typedef typename property_value< bgl_named_params, vertex_predecessor_t>::type Pred; + typedef typename get_param_type< vertex_predecessor_t, bgl_named_params >::type Pred; return detail::edmonds_karp_dispatch1::apply (g, src, sink, params, get_param(params, vertex_predecessor)); } diff --git a/3party/boost/boost/graph/floyd_warshall_shortest.hpp b/3party/boost/boost/graph/floyd_warshall_shortest.hpp index 48dba71267..472995f048 100644 --- a/3party/boost/boost/graph/floyd_warshall_shortest.hpp +++ b/3party/boost/boost/graph/floyd_warshall_shortest.hpp @@ -34,6 +34,7 @@ #include #include #include +#include namespace boost { @@ -84,7 +85,7 @@ namespace boost const BinaryFunction& combine, const Infinity& inf, const Zero& zero) { - function_requires >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); return detail::floyd_warshall_dispatch(g, d, compare, combine, inf, zero); @@ -101,9 +102,9 @@ namespace boost const BinaryPredicate& compare, const BinaryFunction& combine, const Infinity& inf, const Zero& zero) { - function_requires >(); - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept )); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); typename graph_traits::vertex_iterator firstv, lastv, firstv2, lastv2; @@ -163,14 +164,16 @@ namespace boost const bgl_named_params& params) { typedef typename property_traits::value_type WM; + WM inf = + choose_param(get_param(params, distance_inf_t()), + std::numeric_limits::max BOOST_PREVENT_MACRO_SUBSTITUTION()); return floyd_warshall_initialized_all_pairs_shortest_paths(g, d, choose_param(get_param(params, distance_compare_t()), std::less()), choose_param(get_param(params, distance_combine_t()), - closed_plus()), - choose_param(get_param(params, distance_inf_t()), - std::numeric_limits::max BOOST_PREVENT_MACRO_SUBSTITUTION()), + closed_plus(inf)), + inf, choose_param(get_param(params, distance_zero_t()), WM())); } @@ -185,13 +188,15 @@ namespace boost { typedef typename property_traits::value_type WM; + WM inf = + choose_param(get_param(params, distance_inf_t()), + std::numeric_limits::max BOOST_PREVENT_MACRO_SUBSTITUTION()); return floyd_warshall_all_pairs_shortest_paths(g, d, w, choose_param(get_param(params, distance_compare_t()), std::less()), choose_param(get_param(params, distance_combine_t()), - closed_plus()), - choose_param(get_param(params, distance_inf_t()), - std::numeric_limits::max BOOST_PREVENT_MACRO_SUBSTITUTION()), + closed_plus(inf)), + inf, choose_param(get_param(params, distance_zero_t()), WM())); } diff --git a/3party/boost/boost/graph/fruchterman_reingold.hpp b/3party/boost/boost/graph/fruchterman_reingold.hpp index 4ce502e83b..bab353f334 100644 --- a/3party/boost/boost/graph/fruchterman_reingold.hpp +++ b/3party/boost/boost/graph/fruchterman_reingold.hpp @@ -363,7 +363,7 @@ namespace detail { }; template<> - struct fr_force_directed_layout + struct fr_force_directed_layout { template& params) { typedef typename Topology::point_difference_type PointDiff; @@ -404,8 +404,7 @@ fruchterman_reingold_force_directed_layout const Topology& topology, const bgl_named_params& params) { - typedef typename property_value, - vertex_displacement_t>::type D; + typedef typename get_param_type >::type D; detail::fr_force_directed_layout::run (g, position, topology, diff --git a/3party/boost/boost/graph/geodesic_distance.hpp b/3party/boost/boost/graph/geodesic_distance.hpp index a4d702749e..d76d321e16 100644 --- a/3party/boost/boost/graph/geodesic_distance.hpp +++ b/3party/boost/boost/graph/geodesic_distance.hpp @@ -9,6 +9,7 @@ #include #include +#include namespace boost { @@ -25,10 +26,10 @@ struct mean_geodesic_measure result_type operator ()(distance_type d, const Graph& g) { - function_requires< VertexListGraphConcept >(); - function_requires< NumericValueConcept >(); - function_requires< NumericValueConcept >(); - function_requires< AdaptableBinaryFunctionConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); + BOOST_CONCEPT_ASSERT(( AdaptableBinaryFunctionConcept )); return (d == base_type::infinite_distance()) ? base_type::infinite_result() @@ -69,8 +70,8 @@ struct mean_graph_distance_measure inline result_type operator ()(distance_type d, const Graph& g) { - function_requires< VertexListGraphConcept >(); - function_requires< NumericValueConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); if(d == base_type::infinite_distance()) { return base_type::infinite_result(); @@ -99,7 +100,7 @@ mean_geodesic(const Graph& g, Measure measure, Combinator combine) { - function_requires< DistanceMeasureConcept >(); + BOOST_CONCEPT_ASSERT(( DistanceMeasureConcept )); typedef typename Measure::distance_type Distance; Distance n = detail::combine_distances(g, dist, combine, Distance(0)); @@ -112,7 +113,7 @@ template >(); + BOOST_CONCEPT_ASSERT(( DistanceMeasureConcept )); typedef typename Measure::distance_type Distance; return mean_geodesic(g, dist, measure, std::plus()); @@ -139,15 +140,15 @@ all_mean_geodesics(const Graph& g, GeodesicMap geo, Measure measure) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::vertex_iterator VertexIterator; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type DistanceMap; - function_requires< DistanceMeasureConcept >(); + BOOST_CONCEPT_ASSERT(( DistanceMeasureConcept )); typedef typename Measure::result_type Result; - function_requires< WritablePropertyMapConcept >(); - function_requires< NumericValueConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( NumericValueConcept )); // NOTE: We could compute the mean geodesic here by performing additional // computations (i.e., adding and dividing). However, I don't really feel @@ -156,7 +157,7 @@ all_mean_geodesics(const Graph& g, Result inf = numeric_values::infinity(); Result sum = numeric_values::zero(); VertexIterator i, end; - for(tie(i, end) = vertices(g); i != end; ++i) { + for(boost::tie(i, end) = vertices(g); i != end; ++i) { DistanceMap dm = get(dist, *i); Result r = mean_geodesic(g, dm, measure); put(geo, *i, r); @@ -178,11 +179,11 @@ template inline typename property_traits::value_type all_mean_geodesics(const Graph& g, DistanceMatrixMap dist, GeodesicMap geo) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type DistanceMap; - function_requires< WritablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( WritablePropertyMapConcept )); typedef typename property_traits::value_type Result; return all_mean_geodesics(g, dist, geo, measure_mean_geodesic(g, DistanceMap())); @@ -193,7 +194,7 @@ template inline typename Measure::result_type small_world_distance(const Graph& g, GeodesicMap geo, Measure measure) { - function_requires< DistanceMeasureConcept >(); + BOOST_CONCEPT_ASSERT(( DistanceMeasureConcept )); typedef typename Measure::result_type Result; Result sum = detail::combine_distances(g, geo, std::plus(), Result(0)); diff --git a/3party/boost/boost/graph/graph_archetypes.hpp b/3party/boost/boost/graph/graph_archetypes.hpp index 9b364bb814..81f9c2c8a8 100644 --- a/3party/boost/boost/graph/graph_archetypes.hpp +++ b/3party/boost/boost/graph/graph_archetypes.hpp @@ -53,6 +53,8 @@ namespace boost { // should use a different namespace for this typedef void in_edge_iterator; typedef void vertex_iterator; typedef void edge_iterator; + + static vertex_descriptor null_vertex() {return vertex_descriptor();} }; template V source(const typename incidence_graph_archetype::edge_descriptor&, @@ -105,6 +107,8 @@ namespace boost { // should use a different namespace for this typedef void out_edge_iterator; typedef void vertex_iterator; typedef void edge_iterator; + + static vertex_descriptor null_vertex() {return vertex_descriptor();} }; template @@ -154,6 +158,8 @@ namespace boost { // should use a different namespace for this typedef void in_edge_iterator; typedef void edge_iterator; + + static vertex_descriptor null_vertex() {return vertex_descriptor();} }; template diff --git a/3party/boost/boost/graph/graph_concepts.hpp b/3party/boost/boost/graph/graph_concepts.hpp index f382edf7fd..8cb7cbb2fd 100644 --- a/3party/boost/boost/graph/graph_concepts.hpp +++ b/3party/boost/boost/graph/graph_concepts.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include namespace boost @@ -529,8 +530,8 @@ typename T::ThereReallyIsNoMemberByThisNameInT vertices(T const&); { BOOST_CONCEPT_USAGE(NumericValue) { - function_requires< DefaultConstructible >(); - function_requires< CopyConstructible >(); + BOOST_CONCEPT_ASSERT(( DefaultConstructible )); + BOOST_CONCEPT_ASSERT(( CopyConstructible )); numeric_values::zero(); numeric_values::infinity(); } diff --git a/3party/boost/boost/graph/graph_test.hpp b/3party/boost/boost/graph/graph_test.hpp index 7b3a5402bd..69d89f34f2 100644 --- a/3party/boost/boost/graph/graph_test.hpp +++ b/3party/boost/boost/graph/graph_test.hpp @@ -325,10 +325,10 @@ namespace boost { template void test_readable_vertex_property_graph - (const std::vector& vertex_prop, PropertyTag, const Graph& g) + (const std::vector& vertex_prop, PropertyTag tag, const Graph& g) { typedef typename property_map::const_type const_Map; - const_Map pmap = get(PropertyTag(), g); + const_Map pmap = get(tag, g); typename std::vector::const_iterator i = vertex_prop.begin(); for (typename boost::graph_traits::vertex_iterator @@ -339,7 +339,7 @@ namespace boost { ++bgl_first_9) { //BGL_FORALL_VERTICES_T(v, g, Graph) { typename property_traits::value_type - pval1 = get(pmap, v), pval2 = get(PropertyTag(), g, v); + pval1 = get(pmap, v), pval2 = get(tag, g, v); BOOST_CHECK(pval1 == pval2); BOOST_CHECK(pval1 == *i++); } @@ -350,7 +350,7 @@ namespace boost { (const std::vector& vertex_prop, PropertyTag tag, Graph& g) { typedef typename property_map::type PMap; - PMap pmap = get(PropertyTag(), g); + PMap pmap = get(tag, g); typename std::vector::const_iterator i = vertex_prop.begin(); for (typename boost::graph_traits::vertex_iterator bgl_first_9 = vertices(g).first, bgl_last_9 = vertices(g).second; @@ -368,7 +368,7 @@ namespace boost { typename std::vector::const_iterator j = vertex_prop.begin(); BGL_FORALL_VERTICES_T(v, g, Graph) - put(PropertyTag(), g, v, *j++); + put(tag, g, v, *j++); test_readable_vertex_property_graph(vertex_prop, tag, g); } diff --git a/3party/boost/boost/graph/graph_traits.hpp b/3party/boost/boost/graph/graph_traits.hpp index fad82f9d2f..625429e611 100644 --- a/3party/boost/boost/graph/graph_traits.hpp +++ b/3party/boost/boost/graph/graph_traits.hpp @@ -15,8 +15,11 @@ #include /* Primarily for std::pair */ #include #include +#include #include #include +#include +#include #include #include #include @@ -218,28 +221,31 @@ namespace boost { //?? not the right place ?? Lee typedef boost::forward_traversal_tag multi_pass_input_iterator_tag; - // Forward declare graph_bundle_t property name (from - // boost/graph/properties.hpp, which includes this file) for - // bundled_result. - enum graph_bundle_t {graph_bundle}; + namespace detail { + BOOST_MPL_HAS_XXX_TRAIT_DEF(graph_property_type) + BOOST_MPL_HAS_XXX_TRAIT_DEF(edge_property_type) + BOOST_MPL_HAS_XXX_TRAIT_DEF(vertex_property_type) + + template struct get_graph_property_type {typedef typename G::graph_property_type type;}; + template struct get_edge_property_type {typedef typename G::edge_property_type type;}; + template struct get_vertex_property_type {typedef typename G::vertex_property_type type;}; + } template - struct graph_property_type { - typedef typename G::graph_property_type type; - }; + struct graph_property_type + : boost::mpl::eval_if, + detail::get_graph_property_type, + no_property> {}; template - struct edge_property_type { - typedef typename G::edge_property_type type; - }; + struct edge_property_type + : boost::mpl::eval_if, + detail::get_edge_property_type, + no_property> {}; template - struct vertex_property_type { - typedef typename G::vertex_property_type type; - }; - - struct no_bundle { }; - struct no_graph_bundle : no_bundle { }; - struct no_vertex_bundle : no_bundle { }; - struct no_edge_bundle : no_bundle { }; + struct vertex_property_type + : boost::mpl::eval_if, + detail::get_vertex_property_type, + no_property> {}; template struct graph_bundle_type { @@ -281,7 +287,7 @@ namespace boost { // A helper metafunction for determining whether or not a type is // bundled. template - struct is_no_bundle : mpl::bool_::value> + struct is_no_bundle : mpl::bool_::value> { }; } // namespace graph_detail diff --git a/3party/boost/boost/graph/graphml.hpp b/3party/boost/boost/graph/graphml.hpp index 6afa12c962..028cdc26ca 100644 --- a/3party/boost/boost/graph/graphml.hpp +++ b/3party/boost/boost/graph/graphml.hpp @@ -262,8 +262,8 @@ write_graphml(std::ostream& out, const Graph& g, VertexIndexMap vertex_index, for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i) { std::string key_id = "key" + lexical_cast(key_count++); - if (i->second->key() == typeid(Graph)) - vertex_key_ids[i->first] = key_id; + if (i->second->key() == typeid(Graph*)) + graph_key_ids[i->first] = key_id; else if (i->second->key() == typeid(vertex_descriptor)) vertex_key_ids[i->first] = key_id; else if (i->second->key() == typeid(edge_descriptor)) @@ -273,7 +273,7 @@ write_graphml(std::ostream& out, const Graph& g, VertexIndexMap vertex_index, std::string type_name = "string"; mpl::for_each(get_type_name(i->second->value(), type_names, type_name)); out << " second->key() == typeid(Graph) ? "graph" : (i->second->key() == typeid(vertex_descriptor) ? "node" : "edge")) << "\"" + << (i->second->key() == typeid(Graph*) ? "graph" : (i->second->key() == typeid(vertex_descriptor) ? "node" : "edge")) << "\"" << " attr.name=\"" << i->first << "\"" << " attr.type=\"" << type_name << "\"" << " />\n"; @@ -287,10 +287,12 @@ write_graphml(std::ostream& out, const Graph& g, VertexIndexMap vertex_index, // Output graph data for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i) { - if (i->second->key() == typeid(Graph)) + if (i->second->key() == typeid(Graph*)) { + // The const_cast here is just to get typeid correct for property + // map key; the graph should not be mutated using it. out << " first] << "\">" - << encode_char_entities(i->second->get_string(g)) << "\n"; + << encode_char_entities(i->second->get_string(const_cast(&g))) << "\n"; } } diff --git a/3party/boost/boost/graph/graphviz.hpp b/3party/boost/boost/graph/graphviz.hpp index 718220ffec..aedce5553c 100644 --- a/3party/boost/boost/graph/graphviz.hpp +++ b/3party/boost/boost/graph/graphviz.hpp @@ -25,10 +25,14 @@ #include #include #include +#include +#include #include #include +#include #include #include +#include namespace boost { @@ -713,6 +717,9 @@ class mutate_graph virtual void // RG: need new second parameter to support BGL subgraphs set_graph_property(const id_t& key, const id_t& value) = 0; + + virtual void + finish_building_graph() = 0; }; template @@ -781,6 +788,8 @@ class mutate_graph_impl : public mutate_graph put(key, dp_, &graph_, value); } + void finish_building_graph() {} + protected: MutableGraph& graph_; @@ -790,6 +799,109 @@ class mutate_graph_impl : public mutate_graph std::map bgl_edges; }; +template +class mutate_graph_impl > + : public mutate_graph +{ + typedef compressed_sparse_row_graph CSRGraph; + typedef typename graph_traits::vertices_size_type bgl_vertex_t; + typedef typename graph_traits::edges_size_type bgl_edge_t; + typedef typename graph_traits::edge_descriptor edge_descriptor; + + public: + mutate_graph_impl(CSRGraph& graph, dynamic_properties& dp, + std::string node_id_prop) + : graph_(graph), dp_(dp), vertex_count(0), node_id_prop_(node_id_prop) { } + + ~mutate_graph_impl() {} + + void finish_building_graph() { + typedef compressed_sparse_row_graph TempCSRGraph; + TempCSRGraph temp(edges_are_unsorted_multi_pass, + edges_to_add.begin(), edges_to_add.end(), + counting_iterator(0), + vertex_count); + set_property(temp, graph_all, get_property(graph_, graph_all)); + graph_.assign(temp); // Copies structure, not properties + std::vector edge_permutation_from_sorting(num_edges(temp)); + BGL_FORALL_EDGES_T(e, temp, TempCSRGraph) { + edge_permutation_from_sorting[temp[e]] = e; + } + typedef boost::tuple v_prop; + BOOST_FOREACH(const v_prop& t, vertex_props) { + put(boost::get<0>(t), dp_, boost::get<1>(t), boost::get<2>(t)); + } + typedef boost::tuple e_prop; + BOOST_FOREACH(const e_prop& t, edge_props) { + put(boost::get<0>(t), dp_, edge_permutation_from_sorting[boost::get<1>(t)], boost::get<2>(t)); + } + } + + bool is_directed() const + { + return + boost::is_convertible< + typename boost::graph_traits::directed_category, + boost::directed_tag>::value; + } + + virtual void do_add_vertex(const node_t& node) + { + // Add the node to the graph. + bgl_vertex_t v = vertex_count++; + + // Set up a mapping from name to BGL vertex. + bgl_nodes.insert(std::make_pair(node, v)); + + // node_id_prop_ allows the caller to see the real id names for nodes. + vertex_props.push_back(boost::make_tuple(node_id_prop_, v, node)); + } + + void + do_add_edge(const edge_t& edge, const node_t& source, const node_t& target) + { + bgl_edge_t result = edges_to_add.size(); + edges_to_add.push_back(std::make_pair(bgl_nodes[source], bgl_nodes[target])); + bgl_edges.insert(std::make_pair(edge, result)); + } + + void + set_node_property(const id_t& key, const node_t& node, const id_t& value) + { + vertex_props.push_back(boost::make_tuple(key, bgl_nodes[node], value)); + } + + void + set_edge_property(const id_t& key, const edge_t& edge, const id_t& value) + { + edge_props.push_back(boost::make_tuple(key, bgl_edges[edge], value)); + } + + void + set_graph_property(const id_t& key, const id_t& value) + { + /* RG: pointer to graph prevents copying */ + put(key, dp_, &graph_, value); + } + + + protected: + CSRGraph& graph_; + dynamic_properties& dp_; + bgl_vertex_t vertex_count; + std::string node_id_prop_; + std::vector > vertex_props; + std::vector > edge_props; + std::vector > edges_to_add; + std::map bgl_nodes; + std::map bgl_edges; +}; + } } } // end namespace boost::detail::graph #ifdef BOOST_GRAPH_USE_SPIRIT_PARSER diff --git a/3party/boost/boost/graph/grid_graph.hpp b/3party/boost/boost/graph/grid_graph.hpp index 9eff52591c..7bb3732422 100644 --- a/3party/boost/boost/graph/grid_graph.hpp +++ b/3party/boost/boost/graph/grid_graph.hpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -63,14 +62,14 @@ namespace boost { grid_graph_index_map() { } grid_graph_index_map(const Graph& graph) : - m_graph(make_shared(graph)) { } + m_graph(&graph) { } value_type operator[](key_type key) const { return (m_graph->index_of(key)); } protected: - shared_ptr m_graph; + const Graph* m_graph; }; template @@ -89,6 +88,32 @@ namespace boost { typedef type const_type; }; + //========================== + // Reverse Edge Property Map + //========================== + + template + struct grid_graph_reverse_edge_map { + public: + typedef Descriptor value_type; + typedef Descriptor reference_type; + typedef reference_type reference; + typedef Descriptor key_type; + typedef readable_property_map_tag category; + + grid_graph_reverse_edge_map() { } + + value_type operator[](const key_type& key) const { + return (value_type(key.second, key.first)); + } + }; + + template + struct property_map { + typedef grid_graph_reverse_edge_map type; + typedef type const_type; + }; + //================= // Function Objects //================= @@ -268,7 +293,7 @@ namespace boost { typedef transform_iterator adjacency_iterator; // categories - typedef undirected_tag directed_category; + typedef directed_tag directed_category; typedef disallow_parallel_edge_tag edge_parallel_category; struct traversal_category : virtual public incidence_graph_tag, virtual public adjacency_graph_tag, @@ -351,7 +376,7 @@ namespace boost { // Stop at the end of this dimension if necessary. new_position = (std::min)(new_position, - length(dimension_index) - 1); + vertices_size_type(length(dimension_index) - 1)); } vertex[dimension_index] = new_position; @@ -671,7 +696,8 @@ namespace boost { void precalculate() { m_num_vertices = std::accumulate(m_dimension_lengths.begin(), - m_dimension_lengths.end(), 1, + m_dimension_lengths.end(), + vertices_size_type(1), std::multiplies()); // Calculate number of edges in each dimension @@ -971,6 +997,14 @@ namespace boost { BOOST_GRID_GRAPH_TYPE_MEM edges_size_type>(graph)); } + template + friend inline grid_graph_reverse_edge_map< + BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor> + get(edge_reverse_t, const BOOST_GRID_GRAPH_TYPE& graph) { + return (grid_graph_reverse_edge_map< + BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor>()); + } + template @@ -986,6 +1020,17 @@ namespace boost { typename Index> friend struct grid_graph_index_map; + template + friend inline Descriptor + get(const grid_graph_reverse_edge_map& rev_map, + const typename grid_graph_reverse_edge_map::key_type& key) + { + return (rev_map[key]); + } + + template + friend struct grid_graph_reverse_edge_map; + }; // grid_graph } // namespace boost diff --git a/3party/boost/boost/graph/howard_cycle_ratio.hpp b/3party/boost/boost/graph/howard_cycle_ratio.hpp index 09c6522b86..afbf26d87a 100644 --- a/3party/boost/boost/graph/howard_cycle_ratio.hpp +++ b/3party/boost/boost/graph/howard_cycle_ratio.hpp @@ -20,6 +20,7 @@ #include #include #include +#include /** @file howard_cycle_ratio.hpp * @brief The implementation of the maximum/minimum cycle ratio/mean algorithm. @@ -477,13 +478,13 @@ namespace boost { { typedef typename graph_traits::directed_category DirCat; BOOST_STATIC_ASSERT((is_convertible::value == true)); - function_requires< IncidenceGraphConcept >(); - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename graph_traits::edge_descriptor Edge; - function_requires< ReadablePropertyMapConcept >(); - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); if(pcc == 0) { return detail::mcr_howard( diff --git a/3party/boost/boost/graph/is_kuratowski_subgraph.hpp b/3party/boost/boost/graph/is_kuratowski_subgraph.hpp index fab0b0246f..1dd314d317 100644 --- a/3party/boost/boost/graph/is_kuratowski_subgraph.hpp +++ b/3party/boost/boost/graph/is_kuratowski_subgraph.hpp @@ -9,7 +9,6 @@ #define __IS_KURATOWSKI_SUBGRAPH_HPP__ #include -#include //for next/prior #include //for tie #include #include @@ -33,7 +32,7 @@ namespace boost { typename graph_traits::vertex_iterator vi, vi_end, inner_vi; Graph K_5(5); - for(tie(vi,vi_end) = vertices(K_5); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(K_5); vi != vi_end; ++vi) for(inner_vi = next(vi); inner_vi != vi_end; ++inner_vi) add_edge(*vi, *inner_vi, K_5); return K_5; @@ -47,7 +46,7 @@ namespace boost vi, vi_end, bipartition_start, inner_vi; Graph K_3_3(6); bipartition_start = next(next(next(vertices(K_3_3).first))); - for(tie(vi, vi_end) = vertices(K_3_3); vi != bipartition_start; ++vi) + for(boost::tie(vi, vi_end) = vertices(K_3_3); vi != bipartition_start; ++vi) for(inner_vi= bipartition_start; inner_vi != vi_end; ++inner_vi) add_edge(*vi, *inner_vi, K_3_3); return K_3_3; @@ -158,7 +157,7 @@ namespace boost { vertex_iterator_t vi, vi_end; - for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) { vertex_t v(*vi); @@ -242,7 +241,7 @@ namespace boost if (max_size == 3) { // check to see whether we should go on to find a K_5 - for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) if (neighbors[*vi].size() == 4) { target_graph = detail::tg_k_5; @@ -261,7 +260,7 @@ namespace boost v_list_t main_vertices; vertex_iterator_t vi, vi_end; - for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) { if (!neighbors[*vi].empty()) main_vertices.push_back(*vi); @@ -301,11 +300,11 @@ namespace boost if (target_graph == detail::tg_k_5) { - return isomorphism(K_5,contracted_graph); + return boost::isomorphism(K_5,contracted_graph); } else //target_graph == tg_k_3_3 { - return isomorphism(K_3_3,contracted_graph); + return boost::isomorphism(K_3_3,contracted_graph); } diff --git a/3party/boost/boost/graph/is_straight_line_drawing.hpp b/3party/boost/boost/graph/is_straight_line_drawing.hpp index 6b7c390548..c471cde8be 100644 --- a/3party/boost/boost/graph/is_straight_line_drawing.hpp +++ b/3party/boost/boost/graph/is_straight_line_drawing.hpp @@ -9,7 +9,7 @@ #define __IS_STRAIGHT_LINE_DRAWING_HPP__ #include -#include //for next and prior +#include #include #include #include @@ -19,6 +19,7 @@ #include #include #include +#include @@ -34,12 +35,12 @@ namespace boost // defines how far away from the endpoints of s1 and s2 we want to consider // an intersection. - bool intersects(double x1, double y1, - double x2, double y2, - double a1, double b1, - double a2, double b2, - double epsilon = 0.000001 - ) + inline bool intersects(double x1, double y1, + double x2, double y2, + double a1, double b1, + double a2, double b2, + double epsilon = 0.000001 + ) { if (x1 - x2 == 0) @@ -126,7 +127,7 @@ namespace boost active_map_t active_edges; edge_iterator_t ei, ei_end; - for(tie(ei,ei_end) = edges(g); ei != ei_end; ++ei) + for(boost::tie(ei,ei_end) = edges(g); ei != ei_end; ++ei) { edge_t e(*ei); vertex_t s(source(e,g)); diff --git a/3party/boost/boost/graph/isomorphism.hpp b/3party/boost/boost/graph/isomorphism.hpp index f58690266f..99055f35c8 100644 --- a/3party/boost/boost/graph/isomorphism.hpp +++ b/3party/boost/boost/graph/isomorphism.hpp @@ -11,10 +11,12 @@ #include #include #include +#include +#include #include -#include #include #include // for make_indirect_pmap +#include #ifndef BOOST_GRAPH_ITERATION_MACROS_HPP #define BOOST_ISO_INCLUDED_ITER_MACROS // local macro, see bottom of file @@ -133,6 +135,10 @@ namespace boost { bool test_isomorphism() { + // reset isomapping + BGL_FORALL_VERTICES_T(v, G1, Graph1) + f[v] = graph_traits::null_vertex(); + { std::vector invar1_array; BGL_FORALL_VERTICES_T(v, G1, Graph1) @@ -153,7 +159,7 @@ namespace boost { { std::vector multiplicity(max_invariant, 0); BGL_FORALL_VERTICES_T(v, G1, Graph1) - ++multiplicity[invariant1(v)]; + ++multiplicity.at(invariant1(v)); sort(V_mult, compare_multiplicity(invariant1, &multiplicity[0])); } @@ -194,69 +200,130 @@ namespace boost { } private: + struct match_continuation { + enum {pos_G2_vertex_loop, pos_fi_adj_loop, pos_dfs_num} position; + typedef typename graph_traits::vertex_iterator vertex_iterator; + std::pair G2_verts; + typedef typename graph_traits::adjacency_iterator adjacency_iterator; + std::pair fi_adj; + edge_iter iter; + int dfs_num_k; + }; + bool match(edge_iter iter, int dfs_num_k) { + std::vector k; + typedef typename graph_traits::vertex_iterator vertex_iterator; + std::pair G2_verts(vertices(G2)); + typedef typename graph_traits::adjacency_iterator adjacency_iterator; + std::pair fi_adj; + vertex1_t i, j; + + recur: if (iter != ordered_edges.end()) { - vertex1_t i = source(*iter, G1), j = target(*iter, G2); + i = source(*iter, G1); + j = target(*iter, G2); if (dfs_num[i] > dfs_num_k) { - vertex1_t kp1 = dfs_vertices[dfs_num_k + 1]; - BGL_FORALL_VERTICES_T(u, G2, Graph2) { - if (invariant1(kp1) == invariant2(u) && in_S[u] == false) { - f[kp1] = u; - in_S[u] = true; - num_edges_on_k = 0; - - if (match(iter, dfs_num_k + 1)) -#if 0 - // dwa 2003/7/11 -- this *HAS* to be a bug! - ; -#endif - return true; + G2_verts = vertices(G2); + while (G2_verts.first != G2_verts.second) { + { + vertex2_t u = *G2_verts.first; + vertex1_t kp1 = dfs_vertices[dfs_num_k + 1]; + if (invariant1(kp1) == invariant2(u) && in_S[u] == false) { + { + f[kp1] = u; + in_S[u] = true; + num_edges_on_k = 0; - in_S[u] = false; + match_continuation new_k; + new_k.position = match_continuation::pos_G2_vertex_loop; + new_k.G2_verts = G2_verts; + new_k.iter = iter; + new_k.dfs_num_k = dfs_num_k; + k.push_back(new_k); + ++dfs_num_k; + goto recur; + } + } } +G2_loop_k: ++G2_verts.first; } } else if (dfs_num[j] > dfs_num_k) { - vertex1_t k = dfs_vertices[dfs_num_k]; - num_edges_on_k -= - count_if(adjacent_vertices(f[k], G2), make_indirect_pmap(in_S)); - - for (int jj = 0; jj < dfs_num_k; ++jj) { - vertex1_t j = dfs_vertices[jj]; - num_edges_on_k -= count(adjacent_vertices(f[j], G2), f[k]); + { + vertex1_t vk = dfs_vertices[dfs_num_k]; + num_edges_on_k -= + count_if(adjacent_vertices(f[vk], G2), make_indirect_pmap(in_S)); + + for (int jj = 0; jj < dfs_num_k; ++jj) { + vertex1_t j = dfs_vertices[jj]; + num_edges_on_k -= count(adjacent_vertices(f[j], G2), f[vk]); + } } if (num_edges_on_k != 0) - return false; - BGL_FORALL_ADJ_T(f[i], v, G2, Graph2) - if (invariant2(v) == invariant1(j) && in_S[v] == false) { - f[j] = v; - in_S[v] = true; - num_edges_on_k = 1; - BOOST_USING_STD_MAX(); - int next_k = max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num_k, max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num[i], dfs_num[j])); - if (match(boost::next(iter), next_k)) - return true; - in_S[v] = false; + goto return_point_false; + fi_adj = adjacent_vertices(f[i], G2); + while (fi_adj.first != fi_adj.second) { + { + vertex2_t v = *fi_adj.first; + if (invariant2(v) == invariant1(j) && in_S[v] == false) { + f[j] = v; + in_S[v] = true; + num_edges_on_k = 1; + BOOST_USING_STD_MAX(); + int next_k = max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num_k, max BOOST_PREVENT_MACRO_SUBSTITUTION(dfs_num[i], dfs_num[j])); + match_continuation new_k; + new_k.position = match_continuation::pos_fi_adj_loop; + new_k.fi_adj = fi_adj; + new_k.iter = iter; + new_k.dfs_num_k = dfs_num_k; + ++iter; + dfs_num_k = next_k; + k.push_back(new_k); + goto recur; + } } - - +fi_adj_loop_k:++fi_adj.first; + } } else { if (container_contains(adjacent_vertices(f[i], G2), f[j])) { ++num_edges_on_k; - if (match(boost::next(iter), dfs_num_k)) - return true; + match_continuation new_k; + new_k.position = match_continuation::pos_dfs_num; + k.push_back(new_k); + ++iter; + goto recur; } } } else - return true; - return false; - } + goto return_point_true; + goto return_point_false; + { + return_point_true: return true; + + return_point_false: + if (k.empty()) return false; + const match_continuation& this_k = k.back(); + switch (this_k.position) { + case match_continuation::pos_G2_vertex_loop: {G2_verts = this_k.G2_verts; iter = this_k.iter; dfs_num_k = this_k.dfs_num_k; k.pop_back(); in_S[*G2_verts.first] = false; i = source(*iter, G1); j = target(*iter, G2); goto G2_loop_k;} + case match_continuation::pos_fi_adj_loop: {fi_adj = this_k.fi_adj; iter = this_k.iter; dfs_num_k = this_k.dfs_num_k; k.pop_back(); in_S[*fi_adj.first] = false; i = source(*iter, G1); j = target(*iter, G2); goto fi_adj_loop_k;} + case match_continuation::pos_dfs_num: {k.pop_back(); goto return_point_false;} + default: { + BOOST_ASSERT(!"Bad position"); +#ifdef UNDER_CE + exit(-1); +#else + abort(); +#endif + } + } + } + } }; @@ -302,7 +369,7 @@ namespace boost { } // The largest possible vertex invariant number size_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { - return (m_max_vertex_in_degree + 2) * m_max_vertex_out_degree + 1; + return (m_max_vertex_in_degree + 1) * (m_max_vertex_out_degree + 1); } private: InDegreeMap m_in_degree_map; @@ -322,31 +389,31 @@ namespace boost { { // Graph requirements - function_requires< VertexListGraphConcept >(); - function_requires< EdgeListGraphConcept >(); - function_requires< VertexListGraphConcept >(); - function_requires< BidirectionalGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept )); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept )); typedef typename graph_traits::vertex_descriptor vertex1_t; typedef typename graph_traits::vertex_descriptor vertex2_t; typedef typename graph_traits::vertices_size_type size_type; // Vertex invariant requirement - function_requires< AdaptableUnaryFunctionConcept >(); - function_requires< AdaptableUnaryFunctionConcept >(); + BOOST_CONCEPT_ASSERT(( AdaptableUnaryFunctionConcept )); + BOOST_CONCEPT_ASSERT(( AdaptableUnaryFunctionConcept )); // Property map requirements - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type IsoMappingValue; BOOST_STATIC_ASSERT((is_same::value)); - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type IndexMap1Value; BOOST_STATIC_ASSERT((is_convertible::value)); - function_requires< ReadablePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type IndexMap2Value; BOOST_STATIC_ASSERT((is_convertible::value)); @@ -403,39 +470,68 @@ namespace boost { index_map1, index_map2 ); } + + template + struct make_degree_invariant { + const G& g; + const Index& index; + make_degree_invariant(const G& g, const Index& index): g(g), index(index) {} + typedef typename boost::graph_traits::degree_size_type degree_size_type; + typedef shared_array_property_map prop_map_type; + typedef degree_vertex_invariant result_type; + result_type operator()() const { + prop_map_type pm = make_shared_array_property_map(num_vertices(g), degree_size_type(), index); + compute_in_degree(g, pm); + return result_type(pm, g); + } + }; } // namespace detail + namespace graph { + namespace detail { + template + struct isomorphism_impl { + typedef bool result_type; + template + bool operator()(const Graph1& g1, const Graph2& g2, const ArgPack& arg_pack) const { + using namespace boost::graph::keywords; + typedef typename boost::detail::override_const_property_result::type index1_map_type; + typedef typename boost::detail::override_const_property_result::type index2_map_type; + index1_map_type index1_map = boost::detail::override_const_property(arg_pack, _vertex_index1_map, g1, boost::vertex_index); + index2_map_type index2_map = boost::detail::override_const_property(arg_pack, _vertex_index2_map, g2, boost::vertex_index); + typedef typename graph_traits::vertex_descriptor vertex2_t; + typename std::vector::size_type n = (typename std::vector::size_type)num_vertices(g1); + std::vector f(n); + typename boost::parameter::lazy_binding< + ArgPack, + tag::vertex_invariant1, + boost::detail::make_degree_invariant >::type + invariant1 = + arg_pack[_vertex_invariant1 || boost::detail::make_degree_invariant(g1, index1_map)]; + typename boost::parameter::lazy_binding< + ArgPack, + tag::vertex_invariant2, + boost::detail::make_degree_invariant >::type + invariant2 = + arg_pack[_vertex_invariant2 || boost::detail::make_degree_invariant(g2, index2_map)]; + return boost::isomorphism + (g1, g2, + choose_param(arg_pack[_isomorphism_map | boost::param_not_found()], + make_shared_array_property_map(num_vertices(g1), vertex2_t(), index1_map)), + invariant1, + invariant2, + arg_pack[_vertex_max_invariant | (invariant2.max)()], + index1_map, + index2_map); + } + }; + } + BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(isomorphism, 2, 6) + } // Named parameter interface - template - bool isomorphism(const Graph1& g1, - const Graph2& g2, - const bgl_named_params& params) - { - typedef typename graph_traits::vertex_descriptor vertex2_t; - typename std::vector::size_type n = num_vertices(g1); - std::vector f(n); - return detail::isomorphism_impl - (g1, g2, - choose_param(get_param(params, vertex_isomorphism_t()), - make_safe_iterator_property_map(f.begin(), f.size(), - choose_const_pmap(get_param(params, vertex_index1), - g1, vertex_index), vertex2_t())), - choose_const_pmap(get_param(params, vertex_index1), g1, vertex_index), - choose_const_pmap(get_param(params, vertex_index2), g2, vertex_index), - params - ); - } - - // All defaults interface - template - bool isomorphism(const Graph1& g1, const Graph2& g2) - { - return isomorphism(g1, g2, - bgl_named_params(0));// bogus named param - } - + BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(isomorphism, 2) // Verify that the given mapping iso_map from the vertices of g1 to the // vertices of g2 describes an isomorphism. diff --git a/3party/boost/boost/graph/johnson_all_pairs_shortest.hpp b/3party/boost/boost/graph/johnson_all_pairs_shortest.hpp index 8aec500594..b8da0fe19a 100644 --- a/3party/boost/boost/graph/johnson_all_pairs_shortest.hpp +++ b/3party/boost/boost/graph/johnson_all_pairs_shortest.hpp @@ -29,6 +29,7 @@ #include #include #include +#include namespace boost { @@ -44,8 +45,8 @@ namespace boost { { typedef graph_traits Traits1; typedef typename property_traits::value_type DT; - function_requires< BasicMatrixConcept >(); + BOOST_CONCEPT_ASSERT(( BasicMatrixConcept )); typedef typename Traits1::directed_category DirCat; bool is_undirected = is_same::value; @@ -120,8 +121,6 @@ namespace boost { (g2, *u, pred, d, w_hat, id2, compare, combine, inf, zero,dvis); for (boost::tie(v, v_end) = vertices(g2); v != v_end; ++v) { if (*u != s && *v != s) { - typename Traits1::vertex_descriptor u1, v1; - u1 = verts1[get(id2, *u)]; v1 = verts1[get(id2, *v)]; D[get(id2, *u)-1][get(id2, *v)-1] = combine(get(d, *v), (get(h, *v) - get(h, *u))); } } diff --git a/3party/boost/boost/graph/kamada_kawai_spring_layout.hpp b/3party/boost/boost/graph/kamada_kawai_spring_layout.hpp index f39ef90caf..f8a210cab4 100644 --- a/3party/boost/boost/graph/kamada_kawai_spring_layout.hpp +++ b/3party/boost/boost/graph/kamada_kawai_spring_layout.hpp @@ -218,7 +218,7 @@ namespace boost { detail::graph::compute_edge_length(g, distance, index, edge_or_side_length); - std::cerr << "edge_length = " << edge_length << std::endl; + // std::cerr << "edge_length = " << edge_length << std::endl; // Compute l_{ij} and k_{ij} const weight_type K = spring_constant; @@ -275,7 +275,7 @@ namespace boost { E += .5 * k_ij * (dist - l_ij) * (dist - l_ij); } } - std::cerr << "E = " << E << std::endl; + // std::cerr << "E = " << E << std::endl; // Compute the elements of the Jacobian // From diff --git a/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp b/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp index a847e3f156..4d0c7efcdc 100644 --- a/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp +++ b/3party/boost/boost/graph/kruskal_min_spanning_tree.hpp @@ -28,6 +28,7 @@ #include #include #include +#include namespace boost { @@ -51,18 +52,18 @@ namespace boost { if (num_vertices(G) == 0) return; // Nothing to do in this case typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::edge_descriptor Edge; - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); + BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept )); + BOOST_CONCEPT_ASSERT(( OutputIteratorConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept )); typedef typename property_traits::value_type W_value; typedef typename property_traits::value_type R_value; typedef typename property_traits::value_type P_value; - function_requires >(); - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( ComparableConcept )); + BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); + BOOST_CONCEPT_ASSERT(( IntegerConcept )); disjoint_sets dset(rank, parent); diff --git a/3party/boost/boost/graph/leda_graph.hpp b/3party/boost/boost/graph/leda_graph.hpp index 687a10ddec..af95692a89 100644 --- a/3party/boost/boost/graph/leda_graph.hpp +++ b/3party/boost/boost/graph/leda_graph.hpp @@ -17,9 +17,9 @@ #include #include -#include -#include -#include +#include +#include +#include // The functions and classes in this file allows the user to // treat a LEDA GRAPH object as a boost graph "as is". No @@ -884,7 +884,7 @@ namespace boost { inline typename boost::property_traits< typename boost::property_map,PropertyTag>::const_type -::value_type + >::value_type get(PropertyTag p, const leda::GRAPH& g, const Key& key) { return get(get(p, g), key); } diff --git a/3party/boost/boost/graph/make_connected.hpp b/3party/boost/boost/graph/make_connected.hpp index de6c861ddd..a2f8b1ee48 100644 --- a/3party/boost/boost/graph/make_connected.hpp +++ b/3party/boost/boost/graph/make_connected.hpp @@ -9,7 +9,7 @@ #define __MAKE_CONNECTED_HPP__ #include -#include //for next +#include #include //for tie #include #include diff --git a/3party/boost/boost/graph/make_maximal_planar.hpp b/3party/boost/boost/graph/make_maximal_planar.hpp index 70a1e08aba..8248573b4f 100644 --- a/3party/boost/boost/graph/make_maximal_planar.hpp +++ b/3party/boost/boost/graph/make_maximal_planar.hpp @@ -62,7 +62,7 @@ namespace boost degree(degree_vector.begin(), vm) { vertex_iterator_t vi, vi_end; - for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) put(degree, *vi, out_degree(*vi, g)); } @@ -117,7 +117,7 @@ namespace boost // Mark all of the min degree vertex's neighbors adjacency_iterator_t ai, ai_end; - for(tie(ai,ai_end) = adjacent_vertices(vertices_on_face.front(),g); + for(boost::tie(ai,ai_end) = adjacent_vertices(vertices_on_face.front(),g); ai != ai_end; ++ai ) { diff --git a/3party/boost/boost/graph/matrix_as_graph.hpp b/3party/boost/boost/graph/matrix_as_graph.hpp index b39d126a23..fb727940d7 100644 --- a/3party/boost/boost/graph/matrix_as_graph.hpp +++ b/3party/boost/boost/graph/matrix_as_graph.hpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/graph/max_cardinality_matching.hpp b/3party/boost/boost/graph/max_cardinality_matching.hpp index 043f701478..5516bebc47 100644 --- a/3party/boost/boost/graph/max_cardinality_matching.hpp +++ b/3party/boost/boost/graph/max_cardinality_matching.hpp @@ -16,7 +16,6 @@ #include // for std::sort and std::stable_sort #include // for std::pair #include -#include // for boost::tie #include #include #include diff --git a/3party/boost/boost/graph/named_function_params.hpp b/3party/boost/boost/graph/named_function_params.hpp index c5e35fa54e..32dd580232 100644 --- a/3party/boost/boost/graph/named_function_params.hpp +++ b/3party/boost/boost/graph/named_function_params.hpp @@ -13,11 +13,12 @@ #include #include #include +#include +#include #include #include -#include +#include #include -#include #include #include #include @@ -111,15 +112,16 @@ namespace boost { BOOST_BGL_ONE_PARAM_REF(max_priority_queue, max_priority_queue) template - struct bgl_named_params : public Base + struct bgl_named_params { typedef bgl_named_params self; typedef Base next_type; typedef Tag tag_type; typedef T value_type; bgl_named_params(T v = T()) : m_value(v) { } - bgl_named_params(T v, const Base& b) : Base(b), m_value(v) { } + bgl_named_params(T v, const Base& b) : m_value(v), m_base(b) { } T m_value; + Base m_base; #define BOOST_BGL_ONE_PARAM_REF(name, key) \ template \ @@ -182,145 +184,147 @@ BOOST_BGL_DECLARE_NAMED_PARAMS //=========================================================================== // Functions for extracting parameters from bgl_named_params - template + template + struct lookup_named_param {}; + + template + struct lookup_named_param > { + typedef T type; + static const T& get(const bgl_named_params& p) { + return p.m_value; + } + }; + + template + struct lookup_named_param > { + typedef typename lookup_named_param::type type; + static const type& get(const bgl_named_params& p) { + return lookup_named_param::get(p.m_base); + } + }; + + template + struct lookup_named_param_def { + typedef Def type; + static const Def& get(const Args&, const Def& def) {return def;} + }; + + template + struct lookup_named_param_def, Def> { + typedef T type; + static const type& get(const bgl_named_params& p, const Def&) { + return p.m_value; + } + }; + + template + struct lookup_named_param_def, Def> { + typedef typename lookup_named_param_def::type type; + static const type& get(const bgl_named_params& p, const Def& def) { + return lookup_named_param_def::get(p.m_base, def); + } + }; + + struct param_not_found {}; + + template + struct get_param_type: + lookup_named_param_def {}; + + template inline - typename property_value< bgl_named_params, Tag2>::type - get_param(const bgl_named_params& p, Tag2 tag2) - { - enum { match = detail::same_property::value }; - typedef typename - property_value< bgl_named_params, Tag2>::type T2; - T2* t2 = 0; - typedef detail::property_value_dispatch Dispatcher; - return Dispatcher::const_get_value(p, t2, tag2); + const typename lookup_named_param_def::type& + get_param(const Args& p, Tag) { + return lookup_named_param_def::get(p, param_not_found()); } - - namespace detail { - // MSVC++ workaround - template - struct choose_param_helper { - template struct result { typedef Param type; }; - template - static const Param& apply(const Param& p, const Default&) { return p; } - }; - template <> - struct choose_param_helper { - template struct result { typedef Default type; }; - template - static const Default& apply(const error_property_not_found&, const Default& d) - { return d; } - }; - } // namespace detail - template - const typename detail::choose_param_helper

::template result::type& - choose_param(const P& param, const Default& d) { - return detail::choose_param_helper

::apply(param, d); + const P& choose_param(const P& param, const Default&) { + return param; + } + + template + Default choose_param(const param_not_found&, const Default& d) { + return d; } template inline bool is_default_param(const T&) { return false; } - inline bool is_default_param(const detail::error_property_not_found&) + inline bool is_default_param(const param_not_found&) { return true; } namespace detail { + template + struct const_type_as_type {typedef typename T::const_type type;}; + } // namespace detail + - struct choose_parameter { - template - struct bind_ { - typedef const P& const_result_type; - typedef const P& result_type; - typedef P type; - }; + // Use this function instead of choose_param() when you want + // to avoid requiring get(tag, g) when it is not used. + namespace detail { + template + struct choose_impl_result: + boost::mpl::eval_if< + boost::is_same, + boost::mpl::eval_if< + GraphIsConst, + detail::const_type_as_type >, + property_map >, + boost::mpl::identity > {}; - template - static typename bind_::const_result_type - const_apply(const P& p, const Graph&, Tag&) - { return p; } + // Parameters of f are (GraphIsConst, Graph, Param, Tag) + template struct choose_impl_helper; - template - static typename bind_::result_type - apply(const P& p, Graph&, Tag&) - { return p; } - }; - - struct choose_default_param { - template - struct bind_ { - typedef typename property_map::type - result_type; - typedef typename property_map::const_type - const_result_type; - typedef typename property_map::const_type - type; - }; - - template - static typename bind_::const_result_type - const_apply(const P&, const Graph& g, Tag tag) { - return get(tag, g); + template <> struct choose_impl_helper { + template + static typename property_map::const_type + f(boost::mpl::true_, const Graph& g, const Param&, PropertyTag tag) { + return get(tag, g); } - template - static typename bind_::result_type - apply(const P&, Graph& g, Tag tag) { - return get(tag, g); + + template + static typename property_map::type + f(boost::mpl::false_, Graph& g, const Param&, PropertyTag tag) { + return get(tag, g); } }; - template - struct choose_property_map { - typedef choose_parameter type; - }; - template <> - struct choose_property_map { - typedef choose_default_param type; + template <> struct choose_impl_helper { + template + static Param f(GraphIsConst, const Graph&, const Param& p, PropertyTag) { + return p; + } }; + } - template - struct choose_pmap_helper { - typedef typename choose_property_map::type Selector; - typedef typename Selector:: template bind_ Bind; - typedef Bind type; - typedef typename Bind::result_type result_type; - typedef typename Bind::const_result_type const_result_type; - typedef typename Bind::type result; - }; + template + typename detail::choose_impl_result::type + choose_const_pmap(const Param& p, const Graph& g, PropertyTag tag) + { + return detail::choose_impl_helper::value> + ::f(boost::mpl::true_(), g, p, tag); + } + + template + typename detail::choose_impl_result::type + choose_pmap(const Param& p, Graph& g, PropertyTag tag) + { + return detail::choose_impl_helper::value> + ::f(boost::mpl::false_(), g, p, tag); + } + + namespace detail { // used in the max-flow algorithms template struct edge_capacity_value { typedef bgl_named_params Params; - typedef typename property_value< Params, edge_capacity_t>::type Param; - typedef typename detail::choose_pmap_helper::result CapacityEdgeMap; + typedef typename detail::choose_impl_result::type, edge_capacity_t>::type CapacityEdgeMap; typedef typename property_traits::value_type type; }; - } // namespace detail - - - // Use this function instead of choose_param() when you want - // to avoid requiring get(tag, g) when it is not used. - template - typename - detail::choose_pmap_helper::const_result_type - choose_const_pmap(const Param& p, const Graph& g, PropertyTag tag) - { - typedef typename - detail::choose_pmap_helper::Selector Choice; - return Choice::const_apply(p, g, tag); - } - - template - typename detail::choose_pmap_helper::result_type - choose_pmap(const Param& p, Graph& g, PropertyTag tag) - { - typedef typename - detail::choose_pmap_helper::Selector Choice; - return Choice::apply(p, g, tag); } // Declare all new tags @@ -353,7 +357,7 @@ BOOST_BGL_DECLARE_NAMED_PARAMS typedef convert_bgl_params_to_boost_parameter rest_conv; typedef boost::parameter::aux::arg_list type; static type conv(const T& x) { - return type(tagged_arg_type(x.m_value), rest_conv::conv(x)); + return type(tagged_arg_type(x.m_value), rest_conv::conv(x.m_base)); } }; @@ -362,7 +366,7 @@ BOOST_BGL_DECLARE_NAMED_PARAMS typedef convert_bgl_params_to_boost_parameter rest_conv; typedef typename rest_conv::type type; static type conv(const bgl_named_params& x) { - return rest_conv::conv(x); + return rest_conv::conv(x.m_base); } }; @@ -375,7 +379,7 @@ BOOST_BGL_DECLARE_NAMED_PARAMS template <> struct convert_bgl_params_to_boost_parameter { typedef boost::parameter::aux::empty_arg_list type; - static type conv(const boost::no_property&) {return type();} + static type conv(const boost::no_named_parameters&) {return type();} }; struct bgl_parameter_not_found_type {}; @@ -460,6 +464,78 @@ BOOST_BGL_DECLARE_NAMED_PARAMS >()(g, ap[t | 0]); } + template struct make_arg_pack_type; + template <> struct make_arg_pack_type {typedef boost::parameter::aux::empty_arg_list type;}; + template + struct make_arg_pack_type { + typedef boost::parameter::aux::tagged_argument type; + }; + +#define BOOST_GRAPH_OPENING_PART_OF_PAIR(z, i, n) boost::parameter::aux::arg_list, +#define BOOST_GRAPH_MAKE_PAIR_PARAM(z, i, _) const boost::parameter::aux::tagged_argument& BOOST_PP_CAT(kw, i) + +#define BOOST_GRAPH_MAKE_AP_TYPE_SPECIALIZATION(z, i, _) \ + template \ + struct make_arg_pack_type { \ + typedef \ + BOOST_PP_REPEAT(i, BOOST_GRAPH_OPENING_PART_OF_PAIR, BOOST_PP_DEC(i)) boost::parameter::aux::empty_arg_list BOOST_PP_REPEAT(i, > BOOST_PP_TUPLE_EAT(3), ~) \ + type; \ + }; + BOOST_PP_REPEAT_FROM_TO(2, 11, BOOST_GRAPH_MAKE_AP_TYPE_SPECIALIZATION, ~) +#undef BOOST_GRAPH_MAKE_AP_TYPE_SPECIALIZATION + +#define BOOST_GRAPH_MAKE_FORWARDING_FUNCTION(name, nfixed, nnamed_max) \ + /* Entry point for conversion from BGL-style named parameters */ \ + template \ + typename boost::result_of< \ + detail::BOOST_PP_CAT(name, _impl)(BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) const ArgPack&) \ + >::type \ + BOOST_PP_CAT(name, _with_named_params)(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param) BOOST_PP_COMMA_IF(nfixed) const ArgPack& arg_pack) { \ + return detail::BOOST_PP_CAT(name, _impl)()(BOOST_PP_ENUM_PARAMS(nfixed, param) BOOST_PP_COMMA_IF(nfixed) arg_pack); \ + } \ + /* Individual functions taking Boost.Parameter-style keyword arguments */ \ + BOOST_PP_REPEAT(BOOST_PP_INC(nnamed_max), BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONE, (name)(nfixed)) + +#define BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONE(z, nnamed, seq) \ + BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONEX(z, nnamed, BOOST_PP_SEQ_ELEM(0, seq), BOOST_PP_SEQ_ELEM(1, seq)) + +#define BOOST_GRAPH_MAKE_FORWARDING_FUNCTION_ONEX(z, nnamed, name, nfixed) \ + template \ + typename boost::result_of< \ + detail::BOOST_PP_CAT(name, _impl) \ + (BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) \ + const typename boost::detail::make_arg_pack_type::type&) \ + >::type \ + name(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param) \ + BOOST_PP_ENUM_TRAILING(nnamed, BOOST_GRAPH_MAKE_PAIR_PARAM, ~)) { \ + return detail::BOOST_PP_CAT(name, _impl)() \ + (BOOST_PP_ENUM_PARAMS(nfixed, param), \ + (boost::parameter::aux::empty_arg_list() BOOST_PP_ENUM_TRAILING_PARAMS(nnamed, kw))); \ + } + +#define BOOST_GRAPH_MAKE_OLD_STYLE_PARAMETER_FUNCTION(name, nfixed) \ + template \ + typename boost::result_of< \ + ::boost::graph::detail::BOOST_PP_CAT(name, _impl) BOOST_PP_EXPR_IF(nfixed, <) BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_EXPR_IF(nfixed, >) \ + (BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) \ + const typename boost::detail::convert_bgl_params_to_boost_parameter >::type &) \ + >::type \ + name(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param) BOOST_PP_COMMA_IF(nfixed) const boost::bgl_named_params& old_style_params) { \ + typedef boost::bgl_named_params old_style_params_type; \ + BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(old_style_params_type, old_style_params) \ + return ::boost::graph::BOOST_PP_CAT(name, _with_named_params)(BOOST_PP_ENUM_PARAMS(nfixed, param) BOOST_PP_COMMA_IF(nfixed) arg_pack); \ + } \ + \ + BOOST_PP_EXPR_IF(nfixed, template <) BOOST_PP_ENUM_PARAMS(nfixed, typename Param) BOOST_PP_EXPR_IF(nfixed, >) \ + BOOST_PP_EXPR_IF(nfixed, typename) boost::result_of< \ + ::boost::graph::detail::BOOST_PP_CAT(name, _impl) BOOST_PP_EXPR_IF(nfixed, <) BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_EXPR_IF(nfixed, >) \ + (BOOST_PP_ENUM_PARAMS(nfixed, Param) BOOST_PP_COMMA_IF(nfixed) const boost::parameter::aux::empty_arg_list &) \ + >::type \ + name(BOOST_PP_ENUM_BINARY_PARAMS(nfixed, const Param, & param)) { \ + BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(boost::no_named_parameters, boost::no_named_parameters()) \ + return ::boost::graph::BOOST_PP_CAT(name, _with_named_params)(BOOST_PP_ENUM_PARAMS(nfixed, param) BOOST_PP_COMMA_IF(nfixed) arg_pack); \ + } + } namespace detail { @@ -609,6 +685,13 @@ BOOST_BGL_DECLARE_NAMED_PARAMS make_priority_queue_from_arg_pack_gen(KeyT defaultKey_) : defaultKey(defaultKey_) { } + template + struct result { + typedef typename remove_const::arg1_type>::type>::type graph_type; + typedef typename remove_const::arg2_type>::type>::type arg_pack_type; + typedef typename priority_queue_maker::priority_queue_type type; + }; + template typename priority_queue_maker::priority_queue_type operator()(const Graph& g, const ArgPack& ap) const { @@ -616,6 +699,25 @@ BOOST_BGL_DECLARE_NAMED_PARAMS } }; + template + typename boost::graph_traits::vertex_descriptor + get_null_vertex(const G&) {return boost::graph_traits::null_vertex();} + + template + typename boost::graph_traits::vertex_descriptor + get_default_starting_vertex(const G& g) { + std::pair::vertex_iterator, typename boost::graph_traits::vertex_iterator> iters = vertices(g); + return (iters.first == iters.second) ? boost::graph_traits::null_vertex() : *iters.first; + } + + template + struct get_default_starting_vertex_t { + typedef typename boost::graph_traits::vertex_descriptor result_type; + const G& g; + get_default_starting_vertex_t(const G& g): g(g) {} + result_type operator()() const {return get_default_starting_vertex(g);} + }; + } // namespace detail } // namespace boost diff --git a/3party/boost/boost/graph/named_graph.hpp b/3party/boost/boost/graph/named_graph.hpp index dda608d78f..f49c09707d 100644 --- a/3party/boost/boost/graph/named_graph.hpp +++ b/3party/boost/boost/graph/named_graph.hpp @@ -155,51 +155,6 @@ struct internal_vertex_constructor > : internal_vertex_constructor { }; #endif -/******************************************************************* - * Named graph-specific metafunctions * - *******************************************************************/ -namespace detail { - /** @internal - * Extracts the type of a bundled vertex property from a vertex - * property. The primary template matches when we have hit the end - * of the @c property<> list. - */ - template - struct extract_bundled_vertex - { - typedef VertexProperty type; - }; - - /** @internal - * Recursively extract the bundled vertex property from a vertex - * property. - */ - template - struct extract_bundled_vertex > - : extract_bundled_vertex - { }; - - /** - * We have found the bundled vertex property type, marked with - * vertex_bundle_t. - */ - template - struct extract_bundled_vertex > - { - typedef T type; - }; - - /** - * Translate @c no_property into @c error_property_not_found when we - * have failed to extract a bundled vertex property type. - */ - template<> - struct extract_bundled_vertex - { - typedef boost::detail::error_property_not_found type; - }; -} - /******************************************************************* * Named graph mixin * *******************************************************************/ @@ -228,7 +183,7 @@ public: typedef typename internal_vertex_name::type extract_name_type; /// The type of the "bundled" property, from which the name can be /// extracted. - typedef typename detail::extract_bundled_vertex::type + typedef typename lookup_one_property::type bundled_vertex_property_type; /// The type of the function object that generates vertex properties @@ -346,7 +301,9 @@ inline void BGL_NAMED_GRAPH::added_vertex(Vertex vertex) template inline void BGL_NAMED_GRAPH::removing_vertex(Vertex vertex) { - named_vertices.erase(vertex); + typedef typename BGL_NAMED_GRAPH::vertex_name_type vertex_name_type; + const vertex_name_type& vertex_name = extract_name(derived()[vertex]); + named_vertices.erase(vertex_name); } template @@ -475,7 +432,7 @@ struct maybe_named_graph { /// The type of the "bundled" property, from which the name can be /// extracted. - typedef typename detail::extract_bundled_vertex::type + typedef typename lookup_one_property::type bundled_vertex_property_type; /// Notify the named_graph that we have added the given vertex. This diff --git a/3party/boost/boost/graph/neighbor_bfs.hpp b/3party/boost/boost/graph/neighbor_bfs.hpp index 3ed94fc540..4830dcc4ed 100644 --- a/3party/boost/boost/graph/neighbor_bfs.hpp +++ b/3party/boost/boost/graph/neighbor_bfs.hpp @@ -24,13 +24,14 @@ #include #include #include +#include namespace boost { template struct NeighborBFSVisitorConcept { void constraints() { - function_requires< CopyConstructibleConcept >(); + BOOST_CONCEPT_ASSERT(( CopyConstructibleConcept )); vis.initialize_vertex(u, g); vis.discover_vertex(u, g); vis.examine_vertex(u, g); @@ -133,13 +134,13 @@ namespace boost { Buffer& Q, BFSVisitor vis, ColorMap color) { - function_requires< BidirectionalGraphConcept >(); + BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept )); typedef graph_traits GTraits; typedef typename GTraits::vertex_descriptor Vertex; typedef typename GTraits::edge_descriptor Edge; - function_requires< - NeighborBFSVisitorConcept >(); - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( + NeighborBFSVisitorConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; typedef color_traits Color; @@ -249,13 +250,13 @@ namespace boost { }; template <> - struct neighbor_bfs_dispatch { + struct neighbor_bfs_dispatch { template static void apply (VertexListGraph& g, typename graph_traits::vertex_descriptor s, const bgl_named_params& params, - detail::error_property_not_found) + param_not_found) { std::vector color_vec(num_vertices(g)); null_visitor null_vis; @@ -287,8 +288,7 @@ namespace boost { // graph is not really const since we may write to property maps // of the graph. VertexListGraph& ng = const_cast(g); - typedef typename property_value< bgl_named_params, - vertex_color_t>::type C; + typedef typename get_param_type< vertex_color_t, bgl_named_params >::type C; detail::neighbor_bfs_dispatch::apply(ng, s, params, get_param(params, vertex_color)); } diff --git a/3party/boost/boost/graph/planar_canonical_ordering.hpp b/3party/boost/boost/graph/planar_canonical_ordering.hpp index d43ea4785e..86203aaf38 100644 --- a/3party/boost/boost/graph/planar_canonical_ordering.hpp +++ b/3party/boost/boost/graph/planar_canonical_ordering.hpp @@ -12,7 +12,7 @@ #include #include #include -#include //for next and prior +#include #include #include @@ -67,7 +67,7 @@ namespace boost vertex_t first_vertex = *vertices(g).first; vertex_t second_vertex; adjacency_iterator_t ai, ai_end; - for(tie(ai,ai_end) = adjacent_vertices(first_vertex,g); ai != ai_end; ++ai) + for(boost::tie(ai,ai_end) = adjacent_vertices(first_vertex,g); ai != ai_end; ++ai) { if (*ai == first_vertex) continue; diff --git a/3party/boost/boost/graph/planar_detail/boyer_myrvold_impl.hpp b/3party/boost/boost/graph/planar_detail/boyer_myrvold_impl.hpp index 71607fcbc2..41ba2bc575 100644 --- a/3party/boost/boost/graph/planar_detail/boyer_myrvold_impl.hpp +++ b/3party/boost/boost/graph/planar_detail/boyer_myrvold_impl.hpp @@ -10,7 +10,7 @@ #include #include -#include //for boost::next +#include #include //for std::min macros #include #include diff --git a/3party/boost/boost/graph/planar_face_traversal.hpp b/3party/boost/boost/graph/planar_face_traversal.hpp index 2f8a2ee33a..6befa43bac 100644 --- a/3party/boost/boost/graph/planar_face_traversal.hpp +++ b/3party/boost/boost/graph/planar_face_traversal.hpp @@ -10,8 +10,11 @@ #define __PLANAR_FACE_TRAVERSAL_HPP__ #include -#include //for next and prior +#include +#include +#include #include +#include namespace boost @@ -98,7 +101,7 @@ namespace boost // PlanarEmbedding so that get(next_edge, e)[v] is the edge that comes // after e in the clockwise embedding around vertex v. - for(tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) + for(boost::tie(vi,vi_end) = vertices(g); vi != vi_end; ++vi) { vertex_t v(*vi); pi_begin = embedding[v].begin(); @@ -122,7 +125,7 @@ namespace boost std::vector edges_cache; std::vector vertices_in_edge; - for(tie(fi,fi_end) = edges(g); fi != fi_end; ++fi) + for(boost::tie(fi,fi_end) = edges(g); fi != fi_end; ++fi) { edge_t e(*fi); edges_cache.push_back(e); diff --git a/3party/boost/boost/graph/properties.hpp b/3party/boost/boost/graph/properties.hpp index dd7a735765..6b5ade974a 100644 --- a/3party/boost/boost/graph/properties.hpp +++ b/3party/boost/boost/graph/properties.hpp @@ -68,26 +68,20 @@ namespace boost { struct vertex_property_tag { }; struct edge_property_tag { }; -#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // See examples/edge_property.cpp for how to use this. #define BOOST_INSTALL_PROPERTY(KIND, NAME) \ template <> struct property_kind { \ typedef KIND##_property_tag type; \ } -#else -#define BOOST_INSTALL_PROPERTY(KIND, NAME) \ - template <> struct property_kind { \ - typedef KIND##_property_tag type; \ - } -#endif #define BOOST_DEF_PROPERTY(KIND, NAME) \ enum KIND##_##NAME##_t { KIND##_##NAME }; \ BOOST_INSTALL_PROPERTY(KIND, NAME) - BOOST_DEF_PROPERTY(vertex, all); - BOOST_DEF_PROPERTY(edge, all); - BOOST_DEF_PROPERTY(graph, all); + // These three are defined in boost/pending/property.hpp + BOOST_INSTALL_PROPERTY(vertex, all); + BOOST_INSTALL_PROPERTY(edge, all); + BOOST_INSTALL_PROPERTY(graph, all); BOOST_DEF_PROPERTY(vertex, index); BOOST_DEF_PROPERTY(vertex, index1); BOOST_DEF_PROPERTY(vertex, index2); @@ -115,6 +109,7 @@ namespace boost { BOOST_DEF_PROPERTY(vertex, lowpoint); BOOST_DEF_PROPERTY(vertex, potential); BOOST_DEF_PROPERTY(vertex, update); + BOOST_DEF_PROPERTY(vertex, underlying); BOOST_DEF_PROPERTY(edge, reverse); BOOST_DEF_PROPERTY(edge, capacity); BOOST_DEF_PROPERTY(edge, flow); @@ -123,13 +118,14 @@ namespace boost { BOOST_DEF_PROPERTY(edge, discover_time); BOOST_DEF_PROPERTY(edge, update); BOOST_DEF_PROPERTY(edge, finished); + BOOST_DEF_PROPERTY(edge, underlying); BOOST_DEF_PROPERTY(graph, visitor); // These tags are used for property bundles - // BOOST_DEF_PROPERTY(graph, bundle); -- needed in graph_traits.hpp, so enum is defined there + // These three are defined in boost/pending/property.hpp BOOST_INSTALL_PROPERTY(graph, bundle); - BOOST_DEF_PROPERTY(vertex, bundle); - BOOST_DEF_PROPERTY(edge, bundle); + BOOST_INSTALL_PROPERTY(vertex, bundle); + BOOST_INSTALL_PROPERTY(edge, bundle); // These tags are used to denote the owners and local descriptors // for the vertices and edges of a distributed graph. @@ -146,6 +142,25 @@ namespace boost { namespace detail { + template + struct property_kind_from_graph: property_kind {}; + +#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES + template + struct property_kind_from_graph { + typedef typename boost::mpl::if_< + boost::is_same::type>, + vertex_property_tag, + typename boost::mpl::if_< + boost::is_same::type>, + edge_property_tag, + typename boost::mpl::if_< + boost::is_same::type>, + graph_property_tag, + void>::type>::type>::type type; + }; +#endif + struct dummy_edge_property_selector { template struct bind_ { @@ -190,70 +205,32 @@ namespace boost { }; template - struct edge_property_map { - typedef typename edge_property_type::type Property; - typedef typename graph_tag_or_void::type graph_tag; - typedef typename edge_property_selector::type Selector; - typedef typename Selector::template bind_ - Bind; - typedef typename Bind::type type; - typedef typename Bind::const_type const_type; - }; + struct edge_property_map + : edge_property_selector< + typename graph_tag_or_void::type + >::type::template bind_< + Graph, + typename edge_property_type::type, + PropertyTag> + {}; template - class vertex_property_map { - public: - typedef typename vertex_property_type::type Property; - typedef typename graph_tag_or_void::type graph_tag; - typedef typename vertex_property_selector::type Selector; - typedef typename Selector::template bind_ - Bind; - public: - typedef typename Bind::type type; - typedef typename Bind::const_type const_type; - }; - - // This selects the kind of property map, whether is maps from - // edges or from vertices. - // - // It is overly complicated because it's a workaround for - // partial specialization. - struct choose_vertex_property_map { - template - struct bind_ { - typedef vertex_property_map type; - }; - }; - struct choose_edge_property_map { - template - struct bind_ { - typedef edge_property_map type; - }; - }; - template - struct property_map_kind_selector { - // VC++ gets confused if this isn't defined, even though - // this never gets used. - typedef choose_vertex_property_map type; - }; - template <> struct property_map_kind_selector { - typedef choose_vertex_property_map type; - }; - template <> struct property_map_kind_selector { - typedef choose_edge_property_map type; - }; + struct vertex_property_map + : vertex_property_selector< + typename graph_tag_or_void::type + >::type::template bind_< + Graph, + typename vertex_property_type::type, + PropertyTag> + {}; } // namespace detail template - struct property_map { - // private: - typedef typename property_kind::type Kind; - typedef typename detail::property_map_kind_selector::type Selector; - typedef typename Selector::template bind_ Bind; - typedef typename Bind::type Map; - public: - typedef typename Map::type type; - typedef typename Map::const_type const_type; - }; + struct property_map: + mpl::if_< + is_same::type, edge_property_tag>, + detail::edge_property_map, + detail::vertex_property_map >::type + {}; // shortcut for accessing the value type of the property map template @@ -271,16 +248,8 @@ namespace boost { >::type type; }; - template - class vertex_property { - public: - typedef typename Graph::vertex_property_type type; - }; - template - class edge_property { - public: - typedef typename Graph::edge_property_type type; - }; + template class vertex_property: vertex_property_type {}; + template class edge_property: edge_property_type {}; template class degree_property_map @@ -381,99 +350,6 @@ namespace boost { # define BOOST_GRAPH_NO_BUNDLED_PROPERTIES #endif -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES - template - struct bundle_property_map - : put_get_helper > - { - typedef Descriptor key_type; - typedef typename remove_const::type value_type; - typedef T& reference; - typedef lvalue_property_map_tag category; - - bundle_property_map() { } - bundle_property_map(Graph* g_, T Bundle::* pm_) : g(g_), pm(pm_) {} - - reference operator[](key_type k) const { return (*g)[k].*pm; } - private: - Graph* g; - T Bundle::* pm; - }; - - namespace detail { - template - struct is_vertex_bundle - : mpl::and_, - mpl::and_ >, - mpl::not_ > > > - { }; - } - - // Specialize the property map template to generate bundled property maps. - template - struct property_map - { - private: - typedef graph_traits traits; - typedef typename Graph::vertex_bundled vertex_bundled; - typedef typename Graph::edge_bundled edge_bundled; - typedef typename mpl::if_c<(detail::is_vertex_bundle::value), - typename traits::vertex_descriptor, - typename traits::edge_descriptor>::type - descriptor; - typedef typename mpl::if_c<(detail::is_vertex_bundle::value), - vertex_bundled, - edge_bundled>::type - actual_bundle; - - public: - typedef bundle_property_map type; - typedef bundle_property_map - const_type; - }; -#endif - -// These metafunctions help implement the process of determining the vertex -// and edge properties of a graph. -namespace graph_detail { - template - struct retagged_property { - typedef typename Retag::type type; - }; - - // Search the normalized PropList (as returned by retagged<>::type) for - // the given bundle. Return the type error if no such bundle can be found. - template - struct retagged_bundle { - typedef typename property_value::type Value; - typedef typename mpl::if_< - is_same, no_bundle, Value - >::type type; - }; - - template - class normal_property { - // Normalize the property into a property list. - typedef detail::retag_property_list List; - public: - // Extract the normalized property and bundle types. - typedef typename retagged_property::type property; - typedef typename retagged_bundle::type bundle; - }; - - template - struct graph_prop : normal_property - { }; - - template - struct vertex_prop : normal_property - { }; - - template - struct edge_prop : normal_property - { }; -} // namespace graph_detail - // NOTE: These functions are declared, but never defined since they need to // be overloaded by graph implementations. However, we need them to be // declared for the functions below. @@ -496,17 +372,11 @@ get_property(Graph& g) { template inline typename graph_property::type const& -get_property(Graph const& g) { +get_property(const Graph& g) { return get_property(g, graph_bundle); } #endif } // namespace boost -#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) -// Stay out of the way of the concept checking class -# undef Graph -# undef RandomAccessIterator -#endif - -#endif /* BOOST_GRAPH_PROPERTIES_HPPA */ +#endif /* BOOST_GRAPH_PROPERTIES_HPP */ diff --git a/3party/boost/boost/graph/property_maps/null_property_map.hpp b/3party/boost/boost/graph/property_maps/null_property_map.hpp index f6273481b0..09ff55e348 100644 --- a/3party/boost/boost/graph/property_maps/null_property_map.hpp +++ b/3party/boost/boost/graph/property_maps/null_property_map.hpp @@ -29,7 +29,7 @@ namespace boost // The null_property_map only has a put() function. template - void put(null_property_map& pm, const K& key, const V& value) + void put(null_property_map& /*pm*/, const K& /*key*/, const V& /*value*/) { } // A helper function for intantiating null property maps. diff --git a/3party/boost/boost/graph/push_relabel_max_flow.hpp b/3party/boost/boost/graph/push_relabel_max_flow.hpp index 4044815d94..10215ff16b 100644 --- a/3party/boost/boost/graph/push_relabel_max_flow.hpp +++ b/3party/boost/boost/graph/push_relabel_max_flow.hpp @@ -450,7 +450,7 @@ namespace boost { for (boost::tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) { u = *u_iter; put(color, u, ColorTraits::white()); - parent[u] = u; + parent[get(index, u)] = u; current[u] = out_edges(u, g); } // eliminate flow cycles and topologically order the vertices @@ -468,7 +468,7 @@ namespace boost { vertex_descriptor v = target(a, g); if (get(color, v) == ColorTraits::white()) { put(color, v, ColorTraits::gray()); - parent[v] = u; + parent[get(index, v)] = u; u = v; break; } else if (get(color, v) == ColorTraits::gray()) { @@ -523,12 +523,12 @@ namespace boost { bos_null = false; tos = u; } else { - topo_next[u] = tos; + topo_next[get(index, u)] = tos; tos = u; } } if (u != r) { - u = parent[u]; + u = parent[get(index, u)]; ++current[u].first; } else break; @@ -540,7 +540,7 @@ namespace boost { // return excess flows // note that the sink is not on the stack if (! bos_null) { - for (u = tos; u != bos; u = topo_next[u]) { + for (u = tos; u != bos; u = topo_next[get(index, u)]) { boost::tie(ai, a_end) = out_edges(u, g); while (get(excess_flow, u) > 0 && ai != a_end) { if (get(capacity, *ai) == 0 && is_residual_edge(*ai)) @@ -550,8 +550,8 @@ namespace boost { } // do the bottom u = bos; - ai = out_edges(u, g).first; - while (get(excess_flow, u) > 0) { + boost::tie(ai, a_end) = out_edges(u, g); + while (get(excess_flow, u) > 0 && ai != a_end) { if (get(capacity, *ai) == 0 && is_residual_edge(*ai)) push_flow(*ai); ++ai; diff --git a/3party/boost/boost/graph/read_dimacs.hpp b/3party/boost/boost/graph/read_dimacs.hpp index 4e82f84edd..06f1a335f5 100644 --- a/3party/boost/boost/graph/read_dimacs.hpp +++ b/3party/boost/boost/graph/read_dimacs.hpp @@ -281,8 +281,7 @@ int read_dimacs_max_flow_internal(Graph& g, std::printf ( "\nline %ld of input - %s\n", no_lines, err_message[err_no] ); - std::exit (1); - return (0); /* to avoid warning */ + return -1; } /* -------------------- end of parser -------------------*/ diff --git a/3party/boost/boost/graph/relax.hpp b/3party/boost/boost/graph/relax.hpp index 1d2250a80d..4685796096 100644 --- a/3party/boost/boost/graph/relax.hpp +++ b/3party/boost/boost/graph/relax.hpp @@ -22,9 +22,13 @@ namespace boost { template struct closed_plus { + const T inf; + + closed_plus() : inf((std::numeric_limits::max)()) { } + closed_plus(T inf) : inf(inf) { } + T operator()(const T& a, const T& b) const { using namespace std; - const T inf = (std::numeric_limits::max)(); if (a == inf) return inf; if (b == inf) return inf; return a + b; diff --git a/3party/boost/boost/graph/reverse_graph.hpp b/3party/boost/boost/graph/reverse_graph.hpp index 4067f2c2e5..96fc32d3ae 100644 --- a/3party/boost/boost/graph/reverse_graph.hpp +++ b/3party/boost/boost/graph/reverse_graph.hpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -23,10 +24,71 @@ struct reverse_graph_tag { }; namespace detail { + template + class reverse_graph_edge_descriptor { + public: + EdgeDesc underlying_descx; // Odd name is because this needs to be public but shouldn't be exposed to users anymore + + private: + typedef EdgeDesc base_descriptor_type; + + public: + explicit reverse_graph_edge_descriptor(const EdgeDesc& underlying_descx = EdgeDesc()) + : underlying_descx(underlying_descx) {} + + friend bool operator==(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { + return a.underlying_descx == b.underlying_descx; + } + friend bool operator!=(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { + return a.underlying_descx != b.underlying_descx; + } + friend bool operator<(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { + return a.underlying_descx < b.underlying_descx; + } + friend bool operator>(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { + return a.underlying_descx > b.underlying_descx; + } + friend bool operator<=(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { + return a.underlying_descx <= b.underlying_descx; + } + friend bool operator>=(const reverse_graph_edge_descriptor& a, const reverse_graph_edge_descriptor& b) { + return a.underlying_descx >= b.underlying_descx; + } + }; + + template + struct reverse_graph_edge_descriptor_maker { + typedef reverse_graph_edge_descriptor result_type; + + reverse_graph_edge_descriptor operator()(const EdgeDesc& ed) const { + return reverse_graph_edge_descriptor(ed); + } + }; + + template + std::pair, Iter>, + transform_iterator, Iter> > + reverse_edge_iter_pair(const std::pair& ip) { + return std::make_pair(make_transform_iterator(ip.first, reverse_graph_edge_descriptor_maker()), + make_transform_iterator(ip.second, reverse_graph_edge_descriptor_maker())); + } + + // Get the underlying descriptor from a vertex or edge descriptor + template + struct get_underlying_descriptor_from_reverse_descriptor { + typedef Desc type; + static Desc convert(const Desc& d) {return d;} + }; + template + struct get_underlying_descriptor_from_reverse_descriptor > { + typedef Desc type; + static Desc convert(const reverse_graph_edge_descriptor& d) {return d.underlying_descx;} + }; + template struct choose_rev_edge_iter { }; template <> struct choose_rev_edge_iter { template struct bind_ { - typedef typename graph_traits::edge_iterator type; + typedef transform_iterator::edge_descriptor>, typename graph_traits::edge_iterator> type; }; }; template <> struct choose_rev_edge_iter { @@ -43,27 +105,27 @@ class reverse_graph { typedef graph_traits Traits; public: typedef BidirectionalGraph base_type; + typedef GraphRef base_ref_type; // Constructor reverse_graph(GraphRef g) : m_g(g) {} // Graph requirements typedef typename Traits::vertex_descriptor vertex_descriptor; - typedef typename Traits::edge_descriptor edge_descriptor; + typedef detail::reverse_graph_edge_descriptor edge_descriptor; typedef typename Traits::directed_category directed_category; typedef typename Traits::edge_parallel_category edge_parallel_category; typedef typename Traits::traversal_category traversal_category; // IncidenceGraph requirements - typedef typename Traits::in_edge_iterator out_edge_iterator; + typedef transform_iterator, typename Traits::in_edge_iterator> out_edge_iterator; typedef typename Traits::degree_size_type degree_size_type; // BidirectionalGraph requirements - typedef typename Traits::out_edge_iterator in_edge_iterator; + typedef transform_iterator, typename Traits::out_edge_iterator> in_edge_iterator; // AdjacencyGraph requirements - typedef typename adjacency_iterator_generator::type adjacency_iterator; + typedef typename adjacency_iterator_generator::type adjacency_iterator; // VertexListGraph requirements typedef typename Traits::vertex_iterator vertex_iterator; @@ -82,14 +144,20 @@ class reverse_graph { #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES // Bundled properties support template - typename graph::detail::bundled_result::type& + typename graph::detail::bundled_result< + BidirectionalGraph, + typename detail::get_underlying_descriptor_from_reverse_descriptor::type + >::type& operator[](Descriptor x) - { return m_g[x]; } + { return m_g[detail::get_underlying_descriptor_from_reverse_descriptor::convert(x)]; } template - typename graph::detail::bundled_result::type const& + typename graph::detail::bundled_result< + BidirectionalGraph, + typename detail::get_underlying_descriptor_from_reverse_descriptor::type + >::type const& operator[](Descriptor x) const - { return m_g[x]; } + { return m_g[detail::get_underlying_descriptor_from_reverse_descriptor::convert(x)]; } #endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES static vertex_descriptor null_vertex() @@ -158,16 +226,16 @@ std::pair::edge_iterator, typename reverse_graph::edge_iterator> edges(const reverse_graph& g) { - return edges(g.m_g); + return detail::reverse_edge_iter_pair::edge_descriptor>(edges(g.m_g)); } template -inline std::pair::in_edge_iterator, - typename graph_traits::in_edge_iterator> +inline std::pair::out_edge_iterator, + typename reverse_graph::out_edge_iterator> out_edges(const typename graph_traits::vertex_descriptor u, const reverse_graph& g) { - return in_edges(u, g.m_g); + return detail::reverse_edge_iter_pair::edge_descriptor>(in_edges(u, g.m_g)); } template @@ -201,22 +269,24 @@ vertex(const typename graph_traits::vertices_size_type v, } template -inline std::pair::edge_descriptor, - bool> +inline std::pair< typename graph_traits >::edge_descriptor, + bool> edge(const typename graph_traits::vertex_descriptor u, const typename graph_traits::vertex_descriptor v, const reverse_graph& g) { - return edge(v, u, g.m_g); + typedef typename graph_traits::edge_descriptor underlying_edge_descriptor; + std::pair e = edge(v, u, g.m_g); + return std::make_pair(detail::reverse_graph_edge_descriptor(e.first), e.second); } template -inline std::pair::out_edge_iterator, - typename graph_traits::out_edge_iterator> +inline std::pair::in_edge_iterator, + typename reverse_graph::in_edge_iterator> in_edges(const typename graph_traits::vertex_descriptor u, const reverse_graph& g) { - return out_edges(u, g.m_g); + return detail::reverse_edge_iter_pair::edge_descriptor>(out_edges(u, g.m_g)); } template @@ -243,85 +313,186 @@ in_degree(const typename graph_traits::vertex_descriptor u, template inline typename graph_traits::vertex_descriptor -source(const Edge& e, const reverse_graph& g) +source(const detail::reverse_graph_edge_descriptor& e, const reverse_graph& g) { - return target(e, g.m_g); + return target(e.underlying_descx, g.m_g); } template inline typename graph_traits::vertex_descriptor -target(const Edge& e, const reverse_graph& g) +target(const detail::reverse_graph_edge_descriptor& e, const reverse_graph& g) { - return source(e, g.m_g); + return source(e.underlying_descx, g.m_g); } namespace detail { - struct reverse_graph_vertex_property_selector { - template - struct bind_ { - typedef typename ReverseGraph::base_type Graph; - typedef property_map PMap; - typedef typename PMap::type type; - typedef typename PMap::const_type const_type; - }; - }; + template + struct reverse_graph_edge_property_map { + private: + PM underlying_pm; - struct reverse_graph_edge_property_selector { - template - struct bind_ { - typedef typename ReverseGraph::base_type Graph; - typedef property_map PMap; - typedef typename PMap::type type; - typedef typename PMap::const_type const_type; - }; + public: + typedef reverse_graph_edge_descriptor::key_type> key_type; + typedef typename property_traits::value_type value_type; + typedef typename property_traits::reference reference; + typedef typename property_traits::category category; + + explicit reverse_graph_edge_property_map(const PM& pm): underlying_pm(pm) {} + + friend reference + get(const reverse_graph_edge_property_map& m, + const key_type& e) { + return get(m.underlying_pm, e.underlying_descx); + } + + friend void + put(const reverse_graph_edge_property_map& m, + const key_type& e, + const value_type& v) { + put(m.underlying_pm, e.underlying_descx, v); + } + + reference operator[](const key_type& k) const { + return (this->underlying_pm)[k.underlying_descx]; + } }; } // namespace detail -template <> -struct vertex_property_selector { - typedef detail::reverse_graph_vertex_property_selector type; -}; - -template <> -struct edge_property_selector { - typedef detail::reverse_graph_edge_property_selector type; +template +struct property_map, Property> { + typedef boost::is_same::type, edge_property_tag> is_edge_prop; + typedef typename property_map::type orig_type; + typedef typename property_map::const_type orig_const_type; + typedef typename boost::mpl::if_, orig_type>::type type; + typedef typename boost::mpl::if_, orig_const_type>::type const_type; }; template -typename property_map, Property>::type +struct property_map, Property> { + typedef boost::is_same::type, edge_property_tag> is_edge_prop; + typedef typename property_map::const_type orig_const_type; + typedef typename boost::mpl::if_, orig_const_type>::type const_type; + typedef const_type type; +}; + +template +typename disable_if< + is_same, + typename property_map, Property>::type>::type get(Property p, reverse_graph& g) { - return get(p, g.m_g); + return typename property_map, Property>::type(get(p, g.m_g)); } template -typename property_map, Property>::const_type +typename disable_if< + is_same, + typename property_map, Property>::const_type>::type get(Property p, const reverse_graph& g) { const BidirGraph& gref = g.m_g; // in case GRef is non-const - return get(p, gref); + return typename property_map, Property>::const_type(get(p, gref)); } template -typename property_traits< - typename property_map::const_type ->::value_type +typename disable_if< + is_same, + typename property_traits< + typename property_map, Property>::const_type + >::value_type>::type get(Property p, const reverse_graph& g, const Key& k) { - return get(p, g.m_g, k); + return get(get(p, g), k); } template void -put(Property p, const reverse_graph& g, const Key& k, +put(Property p, reverse_graph& g, const Key& k, const Value& val) { - put(p, g.m_g, k, val); + put(get(p, g), k, val); } +// Get the underlying descriptor from a reverse_graph's wrapped edge descriptor + +namespace detail { + template + struct underlying_edge_desc_map_type { + E operator[](const reverse_graph_edge_descriptor& k) const { + return k.underlying_descx; + } + }; + + template + E + get(underlying_edge_desc_map_type m, + const reverse_graph_edge_descriptor& k) + { + return m[k]; + } +}; + +template +struct property_traits > { + typedef detail::reverse_graph_edge_descriptor key_type; + typedef E value_type; + typedef const E& reference; + typedef readable_property_map_tag category; +}; + +template +struct property_map, edge_underlying_t> { + private: + typedef typename graph_traits::edge_descriptor ed; + + public: + typedef detail::underlying_edge_desc_map_type type; + typedef detail::underlying_edge_desc_map_type const_type; +}; + +template struct is_reverse_graph: boost::mpl::false_ {}; +template struct is_reverse_graph >: boost::mpl::true_ {}; + +template +typename enable_if, + detail::underlying_edge_desc_map_type::edge_descriptor> >::type +get(edge_underlying_t, + G& g) +{ + return detail::underlying_edge_desc_map_type::edge_descriptor>(); +} + +template +typename enable_if, typename graph_traits::edge_descriptor>::type +get(edge_underlying_t, + G& g, + const typename graph_traits::edge_descriptor& k) +{ + return k.underlying_descx; +} + +template +typename enable_if, detail::underlying_edge_desc_map_type::edge_descriptor> >::type +get(edge_underlying_t, + const G& g) +{ + return detail::underlying_edge_desc_map_type::edge_descriptor>(); +} + +template +typename enable_if, typename graph_traits::edge_descriptor>::type +get(edge_underlying_t, + const G& g, + const typename graph_traits::edge_descriptor& k) +{ + return k.underlying_descx; +} + +// Access to wrapped graph's graph properties + template inline void @@ -344,9 +515,4 @@ get_property(const reverse_graph& g, Tag tag) } // namespace boost -#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) -// Stay out of the way of the concept checking class -# undef BidirectionalGraph -#endif - #endif diff --git a/3party/boost/boost/graph/stanford_graph.hpp b/3party/boost/boost/graph/stanford_graph.hpp index 0bb798c0f3..89f5e34b29 100644 --- a/3party/boost/boost/graph/stanford_graph.hpp +++ b/3party/boost/boost/graph/stanford_graph.hpp @@ -318,13 +318,15 @@ namespace boost { class sgb_vertex_util_map : public boost::put_get_helper > { + Tag tag; public: + explicit sgb_vertex_util_map(Tag tag = Tag()): tag(tag) {} typedef boost::lvalue_property_map_tag category; typedef typename Tag::type value_type; typedef Vertex* key_type; typedef Ref reference; reference operator[](Vertex* v) const { - return get_util_field(v, Tag()); + return get_util_field(v, tag); } }; @@ -333,13 +335,15 @@ namespace boost { class sgb_edge_util_map : public boost::put_get_helper > { + Tag tag; public: + explicit sgb_edge_util_map(Tag tag = Tag()): tag(tag) {} typedef boost::lvalue_property_map_tag category; typedef typename Tag::type value_type; typedef Vertex* key_type; typedef Ref reference; reference operator[](const sgb_edge& e) const { - return get_util_field(e._arc, Tag()); + return get_util_field(e._arc, tag); } }; diff --git a/3party/boost/boost/graph/stoer_wagner_min_cut.hpp b/3party/boost/boost/graph/stoer_wagner_min_cut.hpp index 814eae0ce8..060f51b4a6 100644 --- a/3party/boost/boost/graph/stoer_wagner_min_cut.hpp +++ b/3party/boost/boost/graph/stoer_wagner_min_cut.hpp @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace boost { @@ -218,7 +218,9 @@ namespace boost { typedef boost::bgl_named_params params_type; BOOST_GRAPH_DECLARE_CONVERTED_PARAMETERS(params_type, params) - BOOST_AUTO(pq, (boost::detail::make_priority_queue_from_arg_pack_gen >(choose_param(get_param(params, boost::distance_zero_t()), weight_type(0)))(g, arg_pack))); + typedef boost::detail::make_priority_queue_from_arg_pack_gen > gen_type; + gen_type gen(choose_param(get_param(params, boost::distance_zero_t()), weight_type(0))); + typename boost::result_of::type pq = gen(g, arg_pack); return boost::detail::stoer_wagner_min_cut(g, weights, diff --git a/3party/boost/boost/graph/strong_components.hpp b/3party/boost/boost/graph/strong_components.hpp index 6494283e5b..61345bdcb8 100644 --- a/3party/boost/boost/graph/strong_components.hpp +++ b/3party/boost/boost/graph/strong_components.hpp @@ -18,6 +18,7 @@ #include #include #include +#include namespace boost { @@ -93,11 +94,11 @@ namespace boost { const bgl_named_params& params) { typedef typename graph_traits::vertex_descriptor Vertex; - function_requires< ReadWritePropertyMapConcept >(); - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type RootV; - function_requires< ConvertibleConcept >(); - function_requires< ReadWritePropertyMapConcept >(); + BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typename property_traits::value_type total = 0; @@ -130,7 +131,7 @@ namespace boost { template <> - struct strong_comp_dispatch2 { + struct strong_comp_dispatch2 { template inline static typename property_traits::value_type @@ -138,7 +139,7 @@ namespace boost { ComponentMap comp, RootMap r_map, const bgl_named_params& params, - detail::error_property_not_found) + param_not_found) { typedef typename graph_traits::vertices_size_type size_type; size_type n = num_vertices(g) > 0 ? num_vertices(g) : 1; @@ -178,7 +179,7 @@ namespace boost { } }; template <> - struct strong_comp_dispatch1 { + struct strong_comp_dispatch1 { template @@ -186,7 +187,7 @@ namespace boost { apply(const Graph& g, ComponentMap comp, const bgl_named_params& params, - detail::error_property_not_found) + param_not_found) { typedef typename graph_traits::vertex_descriptor Vertex; typename std::vector::size_type @@ -282,7 +283,7 @@ namespace boost { kosaraju_strong_components(Graph& G, ComponentsMap c, FinishTime finish_time, ColorMap color) { - function_requires< MutableGraphConcept >(); + BOOST_CONCEPT_ASSERT(( MutableGraphConcept )); // ... typedef typename graph_traits::vertex_descriptor Vertex; diff --git a/3party/boost/boost/graph/subgraph.hpp b/3party/boost/boost/graph/subgraph.hpp index 2b702a80fe..22706bc617 100644 --- a/3party/boost/boost/graph/subgraph.hpp +++ b/3party/boost/boost/graph/subgraph.hpp @@ -23,7 +23,10 @@ #include #include -#include +#include +#include +#include +#include namespace boost { @@ -102,13 +105,11 @@ public: typedef typename Traits::in_edge_iterator in_edge_iterator; - typedef typename Graph::edge_property_type edge_property_type; - typedef typename Graph::vertex_property_type vertex_property_type; - typedef typename Graph::vertex_bundled vertex_bundled; - typedef typename Graph::edge_bundled edge_bundled; + typedef typename edge_property_type::type edge_property_type; + typedef typename vertex_property_type::type vertex_property_type; typedef subgraph_tag graph_tag; typedef Graph graph_type; - typedef typename Graph::graph_property_type graph_property_type; + typedef typename graph_property_type::type graph_property_type; // Create the main graph, the root of the subgraph tree subgraph() @@ -130,15 +131,29 @@ public: // copy constructor subgraph(const subgraph& x) - : m_graph(x.m_graph), m_parent(x.m_parent), m_edge_counter(x.m_edge_counter) + : m_parent(x.m_parent), m_edge_counter(x.m_edge_counter) , m_global_vertex(x.m_global_vertex), m_global_edge(x.m_global_edge) { - // Do a deep copy (recursive). - for(typename ChildrenList::const_iterator i = x.m_children.begin(); - i != x.m_children.end(); ++i) + if(x.is_root()) { - m_children.push_back(new subgraph( **i )); + m_graph = x.m_graph; } + // Do a deep copy (recursive). + // Only the root graph is copied, the subgraphs contain + // only references to the global vertices they own. + typename subgraph::children_iterator i,i_end; + boost::tie(i,i_end) = x.children(); + for(; i != i_end; ++i) + { + subgraph child = this->create_subgraph(); + child = *i; + vertex_iterator vi,vi_end; + boost::tie(vi,vi_end) = vertices(*i); + for (;vi!=vi_end;++vi) + { + add_vertex(*vi,child); + } + } } @@ -333,9 +348,6 @@ public: // Probably shouldn't be public.... } }; -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES -// TODO: I don't think these are required since the default metafunction -// returns Graph::vertex_bundled. template struct vertex_bundle_type > : vertex_bundle_type @@ -345,7 +357,11 @@ template struct edge_bundle_type > : edge_bundle_type { }; -#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES + +template +struct graph_bundle_type > + : graph_bundle_type +{ }; //=========================================================================== // Functions special to the Subgraph Class @@ -665,7 +681,7 @@ remove_edge(typename subgraph::edge_descriptor e, subgraph& g) typename subgraph::edge_descriptor e_global = g.local_to_global(e); #ifndef NDEBUG std::pair::edge_descriptor, bool> fe = g.find_edge(e_global); - assert(fe.second && fe.first == e); + BOOST_ASSERT(fe.second && fe.first == e); #endif //NDEBUG subgraph &root = g.root(); // chase to root detail::children_remove_edge(e_global, root.m_children); @@ -763,7 +779,10 @@ class subgraph_global_property_map { typedef property_traits Traits; public: - typedef typename Traits::category category; + typedef typename mpl::if_::type>, + readable_property_map_tag, + typename Traits::category>::type + category; typedef typename Traits::value_type value_type; typedef typename Traits::key_type key_type; typedef typename Traits::reference reference; @@ -771,18 +790,19 @@ public: subgraph_global_property_map() { } - subgraph_global_property_map(GraphPtr g) - : m_g(g) + subgraph_global_property_map(GraphPtr g, Tag tag) + : m_g(g), m_tag(tag) { } reference operator[](key_type e) const { - PropertyMap pmap = get(Tag(), m_g->root().m_graph); + PropertyMap pmap = get(m_tag, m_g->root().m_graph); return m_g->is_root() ? pmap[e] : pmap[m_g->local_to_global(e)]; } GraphPtr m_g; + Tag m_tag; }; /** @@ -798,7 +818,10 @@ class subgraph_local_property_map { typedef property_traits Traits; public: - typedef typename Traits::category category; + typedef typename mpl::if_::type>, + readable_property_map_tag, + typename Traits::category>::type + category; typedef typename Traits::value_type value_type; typedef typename Traits::key_type key_type; typedef typename Traits::reference reference; @@ -809,17 +832,18 @@ public: subgraph_local_property_map() { } - subgraph_local_property_map(GraphPtr g) - : m_g(g) + subgraph_local_property_map(GraphPtr g, Tag tag) + : m_g(g), m_tag(tag) { } reference operator[](key_type e) const { // Get property map on the underlying graph. - PropertyMap pmap = get(Tag(), m_g->m_graph); + PropertyMap pmap = get(m_tag, m_g->m_graph); return pmap[e]; } GraphPtr m_g; + Tag m_tag; }; namespace detail { @@ -934,139 +958,37 @@ struct edge_property_selector { typedef detail::subgraph_property_generator type; }; -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES -/** @internal - * This property map implements local or global bundled property access on - * an underlying graph. The LocalGlobal template template parameter must be - * one of the local_property or global_property templates. - */ -template < - typename Graph, typename Descriptor, typename Bundle, typename T, - template class LocalGlobal> -struct subgraph_lg_bundle_property_map - : put_get_helper< - T&, - subgraph_lg_bundle_property_map - > -{ -private: - typedef LocalGlobal Wrap; -public: - typedef Descriptor key_type; - typedef typename remove_const::type value_type; - typedef T& reference; - typedef lvalue_property_map_tag category; - - subgraph_lg_bundle_property_map() - { } - - subgraph_lg_bundle_property_map(Graph* g, T Bundle::* p) - : m_g(g), m_prop(p) - { } - - reference operator[](key_type k) const - { return (*m_g)[Wrap(k)].*m_prop; } - -private: - Graph* m_g; - T Bundle::* m_prop; -}; - -// Specialize the property map template to generate bundled property maps. -// NOTE: I'm cheating (actually double-dipping) with the local/global subgraph -// property templates. I'm not using them store descriptors, just specialize -// the property map template for specific lookups. -namespace graph_detail { - // Help decoding some of the types required for property map definitions. - template - struct bundled_subgraph_pmap_helper { - typedef subgraph Subgraph; - typedef graph_traits Traits; - typedef typename Subgraph::vertex_bundled VertBundled; - typedef typename Subgraph::edge_bundled EdgeBundled; - - // Deduce the descriptor from the template params - typedef typename mpl::if_< - detail::is_vertex_bundle, - typename Traits::vertex_descriptor, typename Traits::edge_descriptor - >::type Desc; - - // Deduce the bundled property type - typedef typename mpl::if_< - detail::is_vertex_bundle, - VertBundled, EdgeBundled - >::type Prop; - }; -} // namespace graph_detail - -template -struct property_map, local_property > - : graph_detail::bundled_subgraph_pmap_helper -{ -private: - typedef graph_detail::bundled_subgraph_pmap_helper Base; - typedef typename Base::Subgraph Subgraph; - typedef typename Base::Desc Desc; - typedef typename Base::Prop Prop; -public: - typedef subgraph_lg_bundle_property_map< - Subgraph, Desc, Prop, T, local_property - > type; - typedef subgraph_lg_bundle_property_map< - Subgraph const, Desc, Prop, T const, local_property - > const_type; -}; - -template -struct property_map, global_property > - : graph_detail::bundled_subgraph_pmap_helper -{ -private: - typedef graph_detail::bundled_subgraph_pmap_helper Base; - typedef typename Base::Subgraph Subgraph; - typedef typename Base::Desc Desc; - typedef typename Base::Prop Prop; -public: - typedef subgraph_lg_bundle_property_map< - Subgraph, Desc, Prop, T, global_property - > type; - typedef subgraph_lg_bundle_property_map< - Subgraph const, Desc, Prop, T const, global_property - > const_type; -}; -#endif - // ================================================== // get(p, g), get(p, g, k), and put(p, g, k, v) // ================================================== template typename property_map, Property>::type -get(Property, subgraph& g) { +get(Property p, subgraph& g) { typedef typename property_map< subgraph, Property>::type PMap; - return PMap(&g); + return PMap(&g, p); } template typename property_map, Property>::const_type -get(Property, const subgraph& g) { +get(Property p, const subgraph& g) { typedef typename property_map< subgraph, Property>::const_type PMap; - return PMap(&g); + return PMap(&g, p); } template typename property_traits< typename property_map, Property>::const_type >::value_type -get(Property, const subgraph& g, const Key& k) { +get(Property p, const subgraph& g, const Key& k) { typedef typename property_map< subgraph, Property>::const_type PMap; - PMap pmap(&g); + PMap pmap(&g, p); return pmap[k]; } template -void put(Property, subgraph& g, const Key& k, const Value& val) { +void put(Property p, subgraph& g, const Key& k, const Value& val) { typedef typename property_map< subgraph, Property>::type PMap; - PMap pmap(&g); + PMap pmap(&g, p); pmap[k] = val; } @@ -1076,20 +998,20 @@ void put(Property, subgraph& g, const Key& k, const Value& val) { // ================================================== template typename property_map, global_property >::type -get(global_property, subgraph& g) { +get(global_property p, subgraph& g) { typedef typename property_map< subgraph, global_property >::type Map; - return Map(&g); + return Map(&g, p.value); } template typename property_map, global_property >::const_type -get(global_property, const subgraph& g) { +get(global_property p, const subgraph& g) { typedef typename property_map< subgraph, global_property >::const_type Map; - return Map(&g); + return Map(&g, p.value); } // ================================================== @@ -1098,112 +1020,22 @@ get(global_property, const subgraph& g) { // ================================================== template typename property_map, local_property >::type -get(local_property, subgraph& g) { +get(local_property p, subgraph& g) { typedef typename property_map< subgraph, local_property >::type Map; - return Map(&g); + return Map(&g, p.value); } template typename property_map, local_property >::const_type -get(local_property, const subgraph& g) { +get(local_property p, const subgraph& g) { typedef typename property_map< subgraph, local_property >::const_type Map; - return Map(&g); -} - -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES -// ================================================== -// get(bundle(p), g) -// ================================================== - -template -inline typename property_map, T Bundle::*>::type -get(T Bundle::* p, subgraph& g) { - typedef typename property_map, T Bundle::*>::type Map; - return Map(&g, p); -} - -template -inline typename property_map, T Bundle::*>::const_type -get(T Bundle::* p, subgraph const& g) { - typedef typename property_map, T Bundle::*>::const_type Map; - return Map(&g, p); -} - -template -inline Type get(Type Bundle::* p, subgraph const& g, Key const& k) -{ return get(get(p, g), k); } - -template -inline void put(Type Bundle::* p, Graph& g, Key const& k, Value const& v) -{ put(get(p, g), k, v); } - -// ========================================================= -// Local bundled, get - -template -inline typename property_map< - subgraph, local_property ->::type -get(local_property p, subgraph& g) { - typedef typename property_map< - subgraph, local_property - >::type Map; return Map(&g, p.value); } -template -inline typename property_map< - subgraph, local_property ->::const_type -get(local_property p, subgraph const& g) { - typedef typename property_map< - subgraph, local_property - >::const_type Map; - return Map(&g, p.value); -} - -template -inline Type get(local_property p, subgraph const& g, - Key const& k) -{ return get(get(p, g), k); } - -// ========================================================= -// Global bundled, get - -template -inline typename property_map< - subgraph, global_property ->::type -get(global_property p, subgraph& g) { - typedef typename property_map< - subgraph, global_property - >::type Map; - return Map(&g, p.value); -} - -template -inline typename property_map< - subgraph, global_property ->::const_type -get(global_property p, subgraph const& g) { - typedef typename property_map< - subgraph, global_property - >::const_type Map; - return Map(&g, p.value); -} - -template -inline Type get(global_property p, subgraph const& g, - Key const& k) -{ return get(get(p, g), k); } - -#endif - template inline typename graph_property::type& get_property(subgraph& g, Tag tag) { diff --git a/3party/boost/boost/graph/tiernan_all_cycles.hpp b/3party/boost/boost/graph/tiernan_all_cycles.hpp index f750eb1779..2e7ebc97cd 100644 --- a/3party/boost/boost/graph/tiernan_all_cycles.hpp +++ b/3party/boost/boost/graph/tiernan_all_cycles.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include namespace boost { @@ -156,8 +157,8 @@ namespace detail const Path& p, const ClosedMatrix& m) { - function_requires< IncidenceGraphConcept >(); - function_requires< VertexIndexGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( VertexIndexGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; // get the vertices in question @@ -181,7 +182,7 @@ namespace detail inline bool can_wrap_path(const Graph& g, const Path& p) { - function_requires< IncidenceGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::out_edge_iterator OutIterator; @@ -193,7 +194,7 @@ namespace detail u = p.back(), v = p.front(); OutIterator i, end; - for(tie(i, end) = out_edges(u, g); i != end; ++i) { + for(boost::tie(i, end) = out_edges(u, g); i != end; ++i) { if((target(*i, g) == v)) { return true; } @@ -209,7 +210,7 @@ namespace detail Path& p, ClosedMatrix& closed) { - function_requires< IncidenceGraphConcept >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::edge_descriptor Edge; typedef typename graph_traits::out_edge_iterator OutIterator; @@ -220,7 +221,7 @@ namespace detail // AdjacencyIterator i, end; OutIterator i, end; - for(tie(i, end) = out_edges(u, g); i != end; ++i) { + for(boost::tie(i, end) = out_edges(u, g); i != end; ++i) { Vertex v = target(*i, g); // if we can actually extend along this edge, @@ -238,7 +239,7 @@ namespace detail inline bool exhaust_paths(const Graph& g, Path& p, ClosedMatrix& closed) { - function_requires< GraphConcept >(); + BOOST_CONCEPT_ASSERT(( GraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; // if there's more than one vertex in the path, this closes @@ -272,10 +273,10 @@ namespace detail std::size_t minlen, std::size_t maxlen) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef std::vector Path; - function_requires< CycleVisitorConcept >(); + BOOST_CONCEPT_ASSERT(( CycleVisitorConcept )); typedef std::vector VertexList; typedef std::vector ClosedMatrix; @@ -320,11 +321,11 @@ tiernan_all_cycles(const Graph& g, std::size_t minlen, std::size_t maxlen) { - function_requires< VertexListGraphConcept >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept )); typedef typename graph_traits::vertex_iterator VertexIterator; VertexIterator i, end; - for(tie(i, end) = vertices(g); i != end; ++i) { + for(boost::tie(i, end) = vertices(g); i != end; ++i) { detail::all_cycles_from_vertex(g, *i, vis, minlen, maxlen); } } diff --git a/3party/boost/boost/graph/transitive_closure.hpp b/3party/boost/boost/graph/transitive_closure.hpp index 01bfb3d304..5ba0cab7f0 100644 --- a/3party/boost/boost/graph/transitive_closure.hpp +++ b/3party/boost/boost/graph/transitive_closure.hpp @@ -19,6 +19,7 @@ #include #include #include +#include namespace boost { @@ -76,12 +77,12 @@ namespace boost typedef typename graph_traits < Graph >::adjacency_iterator adjacency_iterator; - function_requires < VertexListGraphConcept < Graph > >(); - function_requires < AdjacencyGraphConcept < Graph > >(); - function_requires < VertexMutableGraphConcept < GraphTC > >(); - function_requires < EdgeMutableGraphConcept < GraphTC > >(); - function_requires < ReadablePropertyMapConcept < VertexIndexMap, - vertex > >(); + BOOST_CONCEPT_ASSERT(( VertexListGraphConcept < Graph > )); + BOOST_CONCEPT_ASSERT(( AdjacencyGraphConcept < Graph > )); + BOOST_CONCEPT_ASSERT(( VertexMutableGraphConcept < GraphTC > )); + BOOST_CONCEPT_ASSERT(( EdgeMutableGraphConcept < GraphTC > )); + BOOST_CONCEPT_ASSERT(( ReadablePropertyMapConcept < VertexIndexMap, + vertex > )); typedef size_type cg_vertex; std::vector < cg_vertex > component_number_vec(num_vertices(g)); @@ -302,8 +303,8 @@ namespace boost typedef typename graph_traits < G >::vertex_descriptor vertex; typedef typename graph_traits < G >::vertex_iterator vertex_iterator; - function_requires < AdjacencyMatrixConcept < G > >(); - function_requires < EdgeMutableGraphConcept < G > >(); + BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept < G > )); + BOOST_CONCEPT_ASSERT(( EdgeMutableGraphConcept < G > )); // Matrix form: // for k @@ -328,8 +329,8 @@ namespace boost typedef typename graph_traits < G >::vertex_descriptor vertex; typedef typename graph_traits < G >::vertex_iterator vertex_iterator; - function_requires < AdjacencyMatrixConcept < G > >(); - function_requires < EdgeMutableGraphConcept < G > >(); + BOOST_CONCEPT_ASSERT(( AdjacencyMatrixConcept < G > )); + BOOST_CONCEPT_ASSERT(( EdgeMutableGraphConcept < G > )); // Make sure second loop will work if (num_vertices(g) == 0) diff --git a/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp b/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp new file mode 100644 index 0000000000..86d57ece07 --- /dev/null +++ b/3party/boost/boost/graph/two_graphs_common_spanning_trees.hpp @@ -0,0 +1,870 @@ +// Copyright (C) 2012, Michele Caini. +// 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) + +// Two Graphs Common Spanning Trees Algorithm +// Based on academic article of Mint, Read and Tarjan +// Efficient Algorithm for Common Spanning Tree Problem +// Electron. Lett., 28 April 1983, Volume 19, Issue 9, p.346-347 + + +#ifndef BOOST_GRAPH_TWO_GRAPHS_COMMON_SPANNING_TREES_HPP +#define BOOST_GRAPH_TWO_GRAPHS_COMMON_SPANNING_TREES_HPP + + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost +{ + + +namespace detail { + + + template + < + typename TreeMap, + typename PredMap, + typename DistMap, + typename LowMap, + typename Buffer + > + struct bridges_visitor: public default_dfs_visitor + { + bridges_visitor( + TreeMap tree, + PredMap pred, + DistMap dist, + LowMap low, + Buffer& buffer + ): mTree(tree), mPred(pred), mDist(dist), mLow(low), mBuffer(buffer) + { mNum = -1; } + + template + void initialize_vertex(const Vertex& u, const Graph& g) + { + put(mPred, u, u); + put(mDist, u, -1); + } + + template + void discover_vertex(const Vertex& u, const Graph& g) + { + put(mDist, u, ++mNum); + put(mLow, u, get(mDist, u)); + } + + template + void tree_edge(const Edge& e, const Graph& g) + { + put(mPred, target(e, g), source(e, g)); + put(mTree, target(e, g), e); + } + + template + void back_edge(const Edge& e, const Graph& g) + { + put(mLow, source(e, g), + (std::min)(get(mLow, source(e, g)), get(mDist, target(e, g)))); + } + + template + void finish_vertex(const Vertex& u, const Graph& g) + { + Vertex parent = get(mPred, u); + if(get(mLow, u) > get(mDist, parent)) + mBuffer.push(get(mTree, u)); + put(mLow, parent, + (std::min)(get(mLow, parent), get(mLow, u))); + } + + TreeMap mTree; + PredMap mPred; + DistMap mDist; + LowMap mLow; + Buffer& mBuffer; + int mNum; + }; + + + template + struct cycle_finder: public base_visitor< cycle_finder > + { + typedef on_back_edge event_filter; + cycle_finder(): mBuffer(0) { } + cycle_finder(Buffer* buffer) + : mBuffer(buffer) { } + template + void operator()(const Edge& e, const Graph& g) + { + if(mBuffer) + mBuffer->push(e); + } + Buffer* mBuffer; + }; + + + template + struct deleted_edge_status + { + deleted_edge_status() { } + deleted_edge_status(DeletedMap map): mMap(map) { } + template + bool operator()(const Edge& e) const + { return (!get(mMap, e)); } + DeletedMap mMap; + }; + + + template + struct inL_edge_status + { + inL_edge_status() { } + inL_edge_status(InLMap map): mMap(map) { } + template + bool operator()(const Edge& e) const + { return get(mMap, e); } + InLMap mMap; + }; + + + template < + typename Graph, + typename Func, + typename Seq, + typename Map + > + void rec_two_graphs_common_spanning_trees + ( + const Graph& iG, + bimap< + bimaps::set_of, + bimaps::set_of< typename graph_traits::edge_descriptor > + > iG_bimap, + Map aiG_inL, + Map diG, + const Graph& vG, + bimap< + bimaps::set_of, + bimaps::set_of< typename graph_traits::edge_descriptor > + > vG_bimap, + Map avG_inL, + Map dvG, + Func func, + Seq inL + ) + { + typedef graph_traits GraphTraits; + + typedef typename GraphTraits::vertex_descriptor vertex_descriptor; + typedef typename GraphTraits::edge_descriptor edge_descriptor; + + typedef typename Seq::size_type seq_size_type; + + int edges = num_vertices(iG) - 1; +// +// [ Michele Caini ] +// +// Using the condition (edges != 0) leads to the accidental submission of +// sub-graphs ((V-1+1)-fake-tree, named here fat-tree). +// Remove this condition is a workaround for the problem of fat-trees. +// Please do not add that condition, even if it improves performance. +// +// Here is proposed the previous guard (that was wrong): +// for(seq_size_type i = 0; (i < inL.size()) && (edges != 0); ++i) +// + { + for(seq_size_type i = 0; i < inL.size(); ++i) + if(inL[i]) + --edges; + + if(edges < 0) + return; + } + + bool is_tree = (edges == 0); + if(is_tree) { + func(inL); + } else { + std::map vertex_color; + std::map edge_color; + + std::stack iG_buf, vG_buf; + bool found = false; + + seq_size_type m; + for(seq_size_type j = 0; j < inL.size() && !found; ++j) { + if(!inL[j] + && !get(diG, iG_bimap.left.at(j)) + && !get(dvG, vG_bimap.left.at(j))) + { + put(aiG_inL, iG_bimap.left.at(j), true); + put(avG_inL, vG_bimap.left.at(j), true); + + undirected_dfs( + make_filtered_graph(iG, + detail::inL_edge_status< associative_property_map< + std::map > >(aiG_inL)), + make_dfs_visitor( + detail::cycle_finder< std::stack > (&iG_buf)), + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs( + make_filtered_graph(vG, + detail::inL_edge_status< associative_property_map< + std::map > >(avG_inL)), + make_dfs_visitor( + detail::cycle_finder< std::stack > (&vG_buf)), + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + if(iG_buf.empty() && vG_buf.empty()) { + inL[j] = true; + found = true; + m = j; + } else { + while(!iG_buf.empty()) iG_buf.pop(); + while(!vG_buf.empty()) vG_buf.pop(); + put(aiG_inL, iG_bimap.left.at(j), false); + put(avG_inL, vG_bimap.left.at(j), false); + } + } + } + + if(found) { + + std::stack iG_buf_copy, vG_buf_copy; + for(seq_size_type j = 0; j < inL.size(); ++j) { + if(!inL[j] + && !get(diG, iG_bimap.left.at(j)) + && !get(dvG, vG_bimap.left.at(j))) + { + + put(aiG_inL, iG_bimap.left.at(j), true); + put(avG_inL, vG_bimap.left.at(j), true); + + undirected_dfs( + make_filtered_graph(iG, + detail::inL_edge_status< associative_property_map< + std::map > >(aiG_inL)), + make_dfs_visitor( + detail::cycle_finder< + std::stack > (&iG_buf)), + associative_property_map< std::map< + vertex_descriptor, default_color_type> >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs( + make_filtered_graph(vG, + detail::inL_edge_status< associative_property_map< + std::map > >(avG_inL)), + make_dfs_visitor( + detail::cycle_finder< + std::stack > (&vG_buf)), + associative_property_map< std::map< + vertex_descriptor, default_color_type> >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + if(!iG_buf.empty() || !vG_buf.empty()) { + while(!iG_buf.empty()) iG_buf.pop(); + while(!vG_buf.empty()) vG_buf.pop(); + put(diG, iG_bimap.left.at(j), true); + put(dvG, vG_bimap.left.at(j), true); + iG_buf_copy.push(iG_bimap.left.at(j)); + vG_buf_copy.push(vG_bimap.left.at(j)); + } + + put(aiG_inL, iG_bimap.left.at(j), false); + put(avG_inL, vG_bimap.left.at(j), false); + } + } + + // REC + detail::rec_two_graphs_common_spanning_trees + (iG, iG_bimap, aiG_inL, diG, vG, vG_bimap, aiG_inL, dvG, func, inL); + + while(!iG_buf_copy.empty()) { + put(diG, iG_buf_copy.top(), false); + put(dvG, vG_bimap.left.at( + iG_bimap.right.at(iG_buf_copy.top())), false); + iG_buf_copy.pop(); + } + while(!vG_buf_copy.empty()) { + put(dvG, vG_buf_copy.top(), false); + put(diG, iG_bimap.left.at( + vG_bimap.right.at(vG_buf_copy.top())), false); + vG_buf_copy.pop(); + } + + inL[m] = false; + put(aiG_inL, iG_bimap.left.at(m), false); + put(avG_inL, vG_bimap.left.at(m), false); + + put(diG, iG_bimap.left.at(m), true); + put(dvG, vG_bimap.left.at(m), true); + + std::map tree_map; + std::map pred_map; + std::map dist_map, low_map; + + detail::bridges_visitor< + associative_property_map< + std::map + >, + associative_property_map< + std::map + >, + associative_property_map< std::map >, + associative_property_map< std::map >, + std::stack + > + iG_vis( + associative_property_map< + std::map< vertex_descriptor, edge_descriptor> >(tree_map), + associative_property_map< + std::map< vertex_descriptor, vertex_descriptor> >(pred_map), + associative_property_map< + std::map< vertex_descriptor, int> >(dist_map), + associative_property_map< + std::map< vertex_descriptor, int> >(low_map), + iG_buf + ), + vG_vis( + associative_property_map< + std::map< vertex_descriptor, edge_descriptor> >(tree_map), + associative_property_map< + std::map< vertex_descriptor, vertex_descriptor> >(pred_map), + associative_property_map< + std::map< vertex_descriptor, int> >(dist_map), + associative_property_map< + std::map< vertex_descriptor, int> >(low_map), + vG_buf + ); + + undirected_dfs(make_filtered_graph(iG, + detail::deleted_edge_status< associative_property_map< + std::map > >(diG)), + iG_vis, + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs(make_filtered_graph(vG, + detail::deleted_edge_status< associative_property_map< + std::map > >(dvG)), + vG_vis, + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + found = false; + std::stack iG_buf_tmp, vG_buf_tmp; + while(!iG_buf.empty() && !found) { + if(!inL[iG_bimap.right.at(iG_buf.top())]) { + put(aiG_inL, iG_buf.top(), true); + put(avG_inL, vG_bimap.left.at( + iG_bimap.right.at(iG_buf.top())), true); + + undirected_dfs( + make_filtered_graph(iG, + detail::inL_edge_status< associative_property_map< + std::map > >(aiG_inL)), + make_dfs_visitor( + detail::cycle_finder< + std::stack > (&iG_buf_tmp)), + associative_property_map< + std::map< + vertex_descriptor, default_color_type> >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs( + make_filtered_graph(vG, + detail::inL_edge_status< associative_property_map< + std::map > >(avG_inL)), + make_dfs_visitor( + detail::cycle_finder< + std::stack > (&vG_buf_tmp)), + associative_property_map< + std::map< + vertex_descriptor, default_color_type> >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + if(!iG_buf_tmp.empty() || !vG_buf_tmp.empty()) { + found = true; + } else { + while(!iG_buf_tmp.empty()) iG_buf_tmp.pop(); + while(!vG_buf_tmp.empty()) vG_buf_tmp.pop(); + iG_buf_copy.push(iG_buf.top()); + } + + put(aiG_inL, iG_buf.top(), false); + put(avG_inL, vG_bimap.left.at( + iG_bimap.right.at(iG_buf.top())), false); + } + iG_buf.pop(); + } + while(!vG_buf.empty() && !found) { + if(!inL[vG_bimap.right.at(vG_buf.top())]) { + put(avG_inL, vG_buf.top(), true); + put(aiG_inL, iG_bimap.left.at( + vG_bimap.right.at(vG_buf.top())), true); + + undirected_dfs( + make_filtered_graph(iG, + detail::inL_edge_status< associative_property_map< + std::map > >(aiG_inL)), + make_dfs_visitor( + detail::cycle_finder< + std::stack > (&iG_buf_tmp)), + associative_property_map< + std::map< + vertex_descriptor, default_color_type> >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs( + make_filtered_graph(vG, + detail::inL_edge_status< associative_property_map< + std::map > >(avG_inL)), + make_dfs_visitor( + detail::cycle_finder< + std::stack > (&vG_buf_tmp)), + associative_property_map< + std::map< + vertex_descriptor, default_color_type> >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + if(!iG_buf_tmp.empty() || !vG_buf_tmp.empty()) { + found = true; + } else { + while(!iG_buf_tmp.empty()) iG_buf_tmp.pop(); + while(!vG_buf_tmp.empty()) vG_buf_tmp.pop(); + vG_buf_copy.push(vG_buf.top()); + } + + put(avG_inL, vG_buf.top(), false); + put(aiG_inL, iG_bimap.left.at( + vG_bimap.right.at(vG_buf.top())), false); + } + vG_buf.pop(); + } + + if(!found) { + + while(!iG_buf_copy.empty()) { + inL[iG_bimap.right.at(iG_buf_copy.top())] = true; + put(aiG_inL, iG_buf_copy.top(), true); + put(avG_inL, vG_bimap.left.at( + iG_bimap.right.at(iG_buf_copy.top())), true); + iG_buf.push(iG_buf_copy.top()); + iG_buf_copy.pop(); + } + while(!vG_buf_copy.empty()) { + inL[vG_bimap.right.at(vG_buf_copy.top())] = true; + put(avG_inL, vG_buf_copy.top(), true); + put(aiG_inL, iG_bimap.left.at( + vG_bimap.right.at(vG_buf_copy.top())), true); + vG_buf.push(vG_buf_copy.top()); + vG_buf_copy.pop(); + } + + // REC + detail::rec_two_graphs_common_spanning_trees< + Graph, Func, Seq, Map> + (iG, iG_bimap, aiG_inL, diG, vG, vG_bimap, aiG_inL, dvG, func, inL); + + while(!iG_buf.empty()) { + inL[iG_bimap.right.at(iG_buf.top())] = false; + put(aiG_inL, iG_buf.top(), false); + put(avG_inL, vG_bimap.left.at( + iG_bimap.right.at(iG_buf.top())), false); + iG_buf.pop(); + } + while(!vG_buf.empty()) { + inL[vG_bimap.right.at(vG_buf.top())] = false; + put(avG_inL, vG_buf.top(), false); + put(aiG_inL, iG_bimap.left.at( + vG_bimap.right.at(vG_buf.top())), false); + vG_buf.pop(); + } + + } + + put(diG, iG_bimap.left.at(m), false); + put(dvG, vG_bimap.left.at(m), false); + + } + } + } + +} // namespace detail + + + +template +struct tree_collector +{ + +public: + BOOST_CONCEPT_ASSERT((BackInsertionSequence)); + BOOST_CONCEPT_ASSERT((RandomAccessContainer)); + BOOST_CONCEPT_ASSERT((CopyConstructible)); + + typedef typename Coll::value_type coll_value_type; + typedef typename Seq::value_type seq_value_type; + + BOOST_STATIC_ASSERT((is_same::value)); + BOOST_STATIC_ASSERT((is_same::value)); + + tree_collector(Coll& seqs): mSeqs(seqs) { } + + inline void operator()(Seq seq) + { mSeqs.push_back(seq); } + +private: + Coll& mSeqs; + +}; + + + +template < + typename Graph, + typename Order, + typename Func, + typename Seq +> +BOOST_CONCEPT_REQUIRES( + ((RandomAccessContainer)) + ((IncidenceGraphConcept)) + ((UnaryFunction)) + ((Mutable_RandomAccessContainer)) + ((VertexAndEdgeListGraphConcept)), + (void) +) +two_graphs_common_spanning_trees + ( + const Graph& iG, + Order iG_map, + const Graph& vG, + Order vG_map, + Func func, + Seq inL + ) +{ + typedef graph_traits GraphTraits; + + typedef typename GraphTraits::directed_category directed_category; + typedef typename GraphTraits::vertex_descriptor vertex_descriptor; + typedef typename GraphTraits::edge_descriptor edge_descriptor; + + typedef typename GraphTraits::edges_size_type edges_size_type; + typedef typename GraphTraits::edge_iterator edge_iterator; + + typedef typename Seq::const_iterator seq_const_iterator; + typedef typename Seq::difference_type seq_diff_type; + typedef typename Seq::value_type seq_value_type; + typedef typename Seq::size_type seq_size_type; + typedef typename Seq::iterator seq_iterator; + + typedef typename Order::const_iterator order_const_iterator; + typedef typename Order::difference_type order_diff_type; + typedef typename Order::value_type order_value_type; + typedef typename Order::size_type order_size_type; + typedef typename Order::iterator order_iterator; + + BOOST_STATIC_ASSERT((is_same::value)); + BOOST_CONCEPT_ASSERT((Convertible)); + + BOOST_CONCEPT_ASSERT((Convertible)); + BOOST_STATIC_ASSERT((is_same::value)); + + BOOST_STATIC_ASSERT((is_same::value)); + + if(num_vertices(iG) != num_vertices(vG)) + return; + + if(inL.size() != num_edges(iG) + || inL.size() != num_edges(vG)) + return; + + if(iG_map.size() != num_edges(iG) + || vG_map.size() != num_edges(vG)) + return; + + typedef bimaps::bimap< + bimaps::set_of< int >, + bimaps::set_of< order_value_type > + > bimap_type; + typedef typename bimap_type::value_type bimap_value; + + bimap_type iG_bimap, vG_bimap; + for(order_size_type i = 0; i < iG_map.size(); ++i) + iG_bimap.insert(bimap_value(i, iG_map[i])); + for(order_size_type i = 0; i < vG_map.size(); ++i) + vG_bimap.insert(bimap_value(i, vG_map[i])); + + edge_iterator current, last; + boost::tuples::tie(current, last) = edges(iG); + for(; current != last; ++current) + if(iG_bimap.right.find(*current) == iG_bimap.right.end()) + return; + boost::tuples::tie(current, last) = edges(vG); + for(; current != last; ++current) + if(vG_bimap.right.find(*current) == vG_bimap.right.end()) + return; + + std::stack iG_buf, vG_buf; + + std::map tree_map; + std::map pred_map; + std::map dist_map, low_map; + + detail::bridges_visitor< + associative_property_map< + std::map + >, + associative_property_map< + std::map + >, + associative_property_map< std::map >, + associative_property_map< std::map >, + std::stack + > + iG_vis( + associative_property_map< + std::map< vertex_descriptor, edge_descriptor> >(tree_map), + associative_property_map< + std::map< vertex_descriptor, vertex_descriptor> >(pred_map), + associative_property_map >(dist_map), + associative_property_map >(low_map), + iG_buf + ), + vG_vis( + associative_property_map< + std::map< vertex_descriptor, edge_descriptor> >(tree_map), + associative_property_map< + std::map< vertex_descriptor, vertex_descriptor> >(pred_map), + associative_property_map >(dist_map), + associative_property_map >(low_map), + vG_buf + ); + + std::map vertex_color; + std::map edge_color; + + undirected_dfs(iG, iG_vis, + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs(vG, vG_vis, + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + while(!iG_buf.empty()) { + inL[iG_bimap.right.at(iG_buf.top())] = true; + iG_buf.pop(); + } + while(!vG_buf.empty()) { + inL[vG_bimap.right.at(vG_buf.top())] = true; + vG_buf.pop(); + } + + std::map iG_inL, vG_inL; + associative_property_map< std::map > + aiG_inL(iG_inL), avG_inL(vG_inL); + + for(seq_size_type i = 0; i < inL.size(); ++i) + { + if(inL[i]) { + put(aiG_inL, iG_bimap.left.at(i), true); + put(avG_inL, vG_bimap.left.at(i), true); + } else { + put(aiG_inL, iG_bimap.left.at(i), false); + put(avG_inL, vG_bimap.left.at(i), false); + } + } + + undirected_dfs( + make_filtered_graph(iG, + detail::inL_edge_status< associative_property_map< + std::map > >(aiG_inL)), + make_dfs_visitor( + detail::cycle_finder< std::stack > (&iG_buf)), + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs( + make_filtered_graph(vG, + detail::inL_edge_status< associative_property_map< + std::map > >(avG_inL)), + make_dfs_visitor( + detail::cycle_finder< std::stack > (&vG_buf)), + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + if(iG_buf.empty() && vG_buf.empty()) { + + std::map iG_deleted, vG_deleted; + associative_property_map< std::map > diG(iG_deleted); + associative_property_map< std::map > dvG(vG_deleted); + + boost::tuples::tie(current, last) = edges(iG); + for(; current != last; ++current) + put(diG, *current, false); + boost::tuples::tie(current, last) = edges(vG); + for(; current != last; ++current) + put(dvG, *current, false); + + for(seq_size_type j = 0; j < inL.size(); ++j) { + if(!inL[j]) { + put(aiG_inL, iG_bimap.left.at(j), true); + put(avG_inL, vG_bimap.left.at(j), true); + + undirected_dfs( + make_filtered_graph(iG, + detail::inL_edge_status< associative_property_map< + std::map > >(aiG_inL)), + make_dfs_visitor( + detail::cycle_finder< std::stack > (&iG_buf)), + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + undirected_dfs( + make_filtered_graph(vG, + detail::inL_edge_status< associative_property_map< + std::map > >(avG_inL)), + make_dfs_visitor( + detail::cycle_finder< std::stack > (&vG_buf)), + associative_property_map< + std::map >(vertex_color), + associative_property_map< + std::map >(edge_color) + ); + + if(!iG_buf.empty() || !vG_buf.empty()) { + while(!iG_buf.empty()) iG_buf.pop(); + while(!vG_buf.empty()) vG_buf.pop(); + put(diG, iG_bimap.left.at(j), true); + put(dvG, vG_bimap.left.at(j), true); + } + + put(aiG_inL, iG_bimap.left.at(j), false); + put(avG_inL, vG_bimap.left.at(j), false); + } + } + + int cc = 0; + + std::map com_map; + cc += connected_components( + make_filtered_graph(iG, + detail::deleted_edge_status > >(diG)), + associative_property_map >(com_map) + ); + cc += connected_components( + make_filtered_graph(vG, + detail::deleted_edge_status > >(dvG)), + associative_property_map< std::map >(com_map) + ); + + if(cc != 2) + return; + + // REC + detail::rec_two_graphs_common_spanning_trees > > + (iG, iG_bimap, aiG_inL, diG, vG, vG_bimap, aiG_inL, dvG, func, inL); + + } + +} + + +template < + typename Graph, + typename Func, + typename Seq +> +BOOST_CONCEPT_REQUIRES( + ((IncidenceGraphConcept)) + ((EdgeListGraphConcept)), + (void) +) +two_graphs_common_spanning_trees + ( + const Graph& iG, + const Graph& vG, + Func func, + Seq inL + ) +{ + typedef graph_traits GraphTraits; + + typedef typename GraphTraits::edge_descriptor edge_descriptor; + typedef typename GraphTraits::edges_size_type edges_size_type; + typedef typename GraphTraits::edge_iterator edge_iterator; + + std::vector iGO, vGO; + edge_iterator curr, last; + + boost::tuples::tie(curr, last) = edges(iG); + for(; curr != last; ++curr) + iGO.push_back(*curr); + + boost::tuples::tie(curr, last) = edges(vG); + for(; curr != last; ++curr) + vGO.push_back(*curr); + + two_graphs_common_spanning_trees(iG, iGO, vG, vGO, func, inL); +} + + +} // namespace boost + + +#endif // BOOST_GRAPH_TWO_GRAPHS_COMMON_SPANNING_TREES_HPP diff --git a/3party/boost/boost/graph/undirected_dfs.hpp b/3party/boost/boost/graph/undirected_dfs.hpp index 9cad25ad72..a3e1c038fd 100644 --- a/3party/boost/boost/graph/undirected_dfs.hpp +++ b/3party/boost/boost/graph/undirected_dfs.hpp @@ -13,6 +13,7 @@ #include #include +#include namespace boost { @@ -32,16 +33,16 @@ namespace boost { VertexColorMap vertex_color, EdgeColorMap edge_color) { - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( DFSVisitorConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::edge_descriptor Edge; - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; typedef typename property_traits::value_type EColorValue; - function_requires< ColorValueConcept >(); - function_requires< ColorValueConcept >(); + BOOST_CONCEPT_ASSERT(( ColorValueConcept )); + BOOST_CONCEPT_ASSERT(( ColorValueConcept )); typedef color_traits Color; typedef color_traits EColor; typedef typename graph_traits::out_edge_iterator Iter; @@ -94,16 +95,16 @@ namespace boost { VertexColorMap vertex_color, EdgeColorMap edge_color) { - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept )); + BOOST_CONCEPT_ASSERT(( DFSVisitorConcept )); typedef typename graph_traits::vertex_descriptor Vertex; typedef typename graph_traits::edge_descriptor Edge; - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); + BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept )); typedef typename property_traits::value_type ColorValue; typedef typename property_traits::value_type EColorValue; - function_requires< ColorValueConcept >(); - function_requires< ColorValueConcept >(); + BOOST_CONCEPT_ASSERT(( ColorValueConcept )); + BOOST_CONCEPT_ASSERT(( ColorValueConcept )); typedef color_traits Color; typedef color_traits EColor; typename graph_traits::out_edge_iterator ei, ei_end; @@ -134,8 +135,8 @@ namespace boost { VertexColorMap vertex_color, EdgeColorMap edge_color, Vertex start_vertex) { - function_requires >(); - function_requires >(); + BOOST_CONCEPT_ASSERT(( DFSVisitorConcept )); + BOOST_CONCEPT_ASSERT(( EdgeListGraphConcept )); typedef typename property_traits::value_type ColorValue; typedef color_traits Color; @@ -187,7 +188,7 @@ namespace boost { }; template <> - struct udfs_dispatch { + struct udfs_dispatch { template @@ -195,7 +196,7 @@ namespace boost { apply(const Graph& g, DFSVisitor vis, Vertex start_vertex, const bgl_named_params& params, EdgeColorMap edge_color, - detail::error_property_not_found) + param_not_found) { std::vector color_vec(num_vertices(g)); default_color_type c = white_color; // avoid warning about un-init @@ -218,8 +219,7 @@ namespace boost { undirected_dfs(const Graph& g, const bgl_named_params& params) { - typedef typename property_value< bgl_named_params, - vertex_color_t>::type C; + typedef typename get_param_type< vertex_color_t, bgl_named_params >::type C; detail::udfs_dispatch::apply (g, choose_param(get_param(params, graph_visitor), diff --git a/3party/boost/boost/graph/undirected_graph.hpp b/3party/boost/boost/graph/undirected_graph.hpp index d5374101e2..adcc86e515 100644 --- a/3party/boost/boost/graph/undirected_graph.hpp +++ b/3party/boost/boost/graph/undirected_graph.hpp @@ -7,7 +7,6 @@ #ifndef BOOST_GRAPH_UNDIRECTED_GRAPH_HPP #define BOOST_GRAPH_UNDIRECTED_GRAPH_HPP -#include #include #include @@ -38,14 +37,12 @@ template < class undirected_graph { public: - typedef typename graph_detail::graph_prop::property graph_property_type; - typedef typename graph_detail::graph_prop::bundle graph_bundled; - - typedef typename graph_detail::vertex_prop::property vertex_property_type; - typedef typename graph_detail::vertex_prop::bundle vertex_bundled; - - typedef typename graph_detail::edge_prop::property edge_property_type; - typedef typename graph_detail::edge_prop::bundle edge_bundled; + typedef GraphProp graph_property_type; + typedef VertexProp vertex_property_type; + typedef EdgeProp edge_property_type; + typedef typename lookup_one_property::type graph_bundled; + typedef typename lookup_one_property::type vertex_bundled; + typedef typename lookup_one_property::type edge_bundled; private: // Embed indices into the vertex type. @@ -413,7 +410,7 @@ template typename UNDIRECTED_GRAPH::vertex_descriptor vertex(typename UNDIRECTED_GRAPH::vertices_size_type n, UNDIRECTED_GRAPH const& g) -{ return vertex(g.impl()); } +{ return vertex(n, g.impl()); } template std::pair @@ -530,36 +527,8 @@ remove_in_edge_if(typename UNDIRECTED_GRAPH::vertex_descriptor v, UNDIRECTED_GRAPH& g) { return remove_in_edge_if(v, pred, g.impl()); } -// Helper code for working with property maps -namespace detail { - struct undirected_graph_vertex_property_selector { - template - struct bind_ { - typedef typename UndirectedGraph::graph_type Graph; - typedef property_map PropertyMap; - typedef typename PropertyMap::type type; - typedef typename PropertyMap::const_type const_type; - }; - }; - - struct undirected_graph_edge_property_selector { - template - struct bind_ { - typedef typename UndirectedGraph::graph_type Graph; - typedef property_map PropertyMap; - typedef typename PropertyMap::type type; - typedef typename PropertyMap::const_type const_type; - }; - }; -} // namespace detail - -template <> -struct vertex_property_selector -{ typedef detail::undirected_graph_vertex_property_selector type; }; - -template <> -struct edge_property_selector -{ typedef detail::undirected_graph_edge_property_selector type; }; +template +struct property_map: property_map {}; // PropertyGraph concepts template @@ -599,36 +568,6 @@ template inline void set_property(UNDIRECTED_GRAPH& g, Property p, Value v) { return set_property(g.impl(), p, v); } -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES -template -inline typename property_map::type -get(Type Bundle::* p, UNDIRECTED_GRAPH& g) { - typedef typename property_map< - UNDIRECTED_GRAPH, Type Bundle::* - >::type return_type; - return return_type(&g, p); -} - -template -inline typename property_map::const_type -get(Type Bundle::* p, UNDIRECTED_GRAPH const& g) { - typedef typename property_map< - UNDIRECTED_GRAPH, Type Bundle::* - >::const_type return_type; - return return_type(&g, p); -} - -template -inline Type -get(Type Bundle::* p, UNDIRECTED_GRAPH const& g, Key const& k) -{ return get(p, g.impl(), k); } - -template -inline void -put(Type Bundle::* p, UNDIRECTED_GRAPH& g, Key const& k, Value const& v) -{ put(p, g.impl(), k, v); } -#endif - // Indexed Vertex graph template diff --git a/3party/boost/boost/graph/vector_as_graph.hpp b/3party/boost/boost/graph/vector_as_graph.hpp index ee0df4bc90..7bc8ac3802 100644 --- a/3party/boost/boost/graph/vector_as_graph.hpp +++ b/3party/boost/boost/graph/vector_as_graph.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -71,13 +72,14 @@ namespace boost { out_edge_iterator; typedef void in_edge_iterator; typedef void edge_iterator; - typedef typename integer_range::iterator vertex_iterator; + typedef counting_iterator vertex_iterator; typedef directed_tag directed_category; typedef allow_parallel_edge_tag edge_parallel_category; typedef vector_as_graph_traversal_tag traversal_category; typedef typename std::vector::size_type vertices_size_type; typedef void edges_size_type; typedef typename EdgeList::size_type degree_size_type; + static V null_vertex() {return V(-1);} }; template struct edge_property_type< std::vector > @@ -178,14 +180,11 @@ namespace boost { // source() and target() already provided for pairs in graph_traits.hpp template - std::pair - ::iterator, - typename boost::integer_range - ::iterator > + std::pair, + boost::counting_iterator > vertices(const std::vector& v) { - typedef typename boost::integer_range - ::iterator Iter; + typedef boost::counting_iterator Iter; return std::make_pair(Iter(0), Iter(v.size())); } diff --git a/3party/boost/boost/graph/write_dimacs.hpp b/3party/boost/boost/graph/write_dimacs.hpp index 0b8af17df4..a9a8904655 100644 --- a/3party/boost/boost/graph/write_dimacs.hpp +++ b/3party/boost/boost/graph/write_dimacs.hpp @@ -64,7 +64,7 @@ void write_dimacs_max_flow(const Graph& g, //output the edges edge_iterator ei, e_end; - for(tie(ei,e_end) = edges(g); ei!=e_end; ++ei){ + for(boost::tie(ei,e_end) = edges(g); ei!=e_end; ++ei){ out << "a " << idx[ source(*ei, g) ] + 1 << " " << idx[ target(*ei, g) ] + 1 << " " << get(capacity,*ei) << std::endl; } } diff --git a/3party/boost/boost/heap/binomial_heap.hpp b/3party/boost/boost/heap/binomial_heap.hpp new file mode 100644 index 0000000000..8ebc7d056f --- /dev/null +++ b/3party/boost/boost/heap/binomial_heap.hpp @@ -0,0 +1,921 @@ +// boost heap: binomial heap +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_BINOMIAL_HEAP_HPP +#define BOOST_HEAP_BINOMIAL_HEAP_HPP + +#include +#include + +#include + +#include +#include +#include +#include + +#ifndef BOOST_DOXYGEN_INVOKED +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif +#endif + +namespace boost { +namespace heap { +namespace detail { + +typedef parameter::parameters, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional + > binomial_heap_signature; + +template +struct make_binomial_heap_base +{ + static const bool constant_time_size = parameter::binding::type::value; + typedef typename detail::make_heap_base::type base_type; + typedef typename detail::make_heap_base::allocator_argument allocator_argument; + typedef typename detail::make_heap_base::compare_argument compare_argument; + + typedef parent_pointing_heap_node node_type; + + typedef typename allocator_argument::template rebind::other allocator_type; + + struct type: + base_type, + allocator_type + { + type(compare_argument const & arg): + base_type(arg) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + type(type const & rhs): + base_type(rhs), allocator_type(rhs) + {} + + type(type && rhs): + base_type(std::move(static_cast(rhs))), + allocator_type(std::move(static_cast(rhs))) + {} + + type & operator=(type && rhs) + { + base_type::operator=(std::move(static_cast(rhs))); + allocator_type::operator=(std::move(static_cast(rhs))); + return *this; + } + + type & operator=(type const & rhs) + { + base_type::operator=(static_cast(rhs)); + allocator_type::operator=(static_cast(rhs)); + return *this; + } +#endif + }; +}; + +} + +/** + * \class binomial_heap + * \brief binomial heap + * + * The template parameter T is the type to be managed by the container. + * The user can specify additional options and if no options are provided default options are used. + * + * The container supports the following options: + * - \c boost::heap::stable<>, defaults to \c stable + * - \c boost::heap::compare<>, defaults to \c compare > + * - \c boost::heap::allocator<>, defaults to \c allocator > + * - \c boost::heap::constant_time_size<>, defaults to \c constant_time_size + * - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type + * + */ +#ifdef BOOST_DOXYGEN_INVOKED +template +#else +template +#endif +class binomial_heap: + private detail::make_binomial_heap_base::type + >::type +{ + typedef typename detail::binomial_heap_signature::bind::type bound_args; + typedef detail::make_binomial_heap_base base_maker; + typedef typename base_maker::type super_t; + + typedef typename super_t::internal_type internal_type; + typedef typename super_t::size_holder_type size_holder; + typedef typename base_maker::allocator_argument allocator_argument; + + template + friend struct heap_merge_emulate; + +public: + static const bool constant_time_size = super_t::constant_time_size; + static const bool has_ordered_iterators = true; + static const bool is_mergable = true; + static const bool is_stable = detail::extract_stable::value; + static const bool has_reserve = false; + +private: +#ifndef BOOST_DOXYGEN_INVOKED + struct implementation_defined: + detail::extract_allocator_types + { + typedef T value_type; + typedef typename detail::extract_allocator_types::size_type size_type; + typedef typename detail::extract_allocator_types::reference reference; + + typedef typename base_maker::compare_argument value_compare; + typedef typename base_maker::allocator_type allocator_type; + typedef typename base_maker::node_type node; + + typedef typename allocator_type::pointer node_pointer; + typedef typename allocator_type::const_pointer const_node_pointer; + + typedef detail::node_handle handle_type; + + typedef typename base_maker::node_type node_type; + + typedef boost::intrusive::list, + boost::intrusive::constant_time_size + > node_list_type; + + typedef typename node_list_type::iterator node_list_iterator; + typedef typename node_list_type::const_iterator node_list_const_iterator; + typedef detail::value_extractor value_extractor; + + typedef detail::recursive_tree_iterator + > iterator; + typedef iterator const_iterator; + + typedef detail::tree_iterator, + true, + true, + value_compare + > ordered_iterator; + }; +#endif + +public: + typedef T value_type; + + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + /// \copydoc boost::heap::priority_queue::iterator + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + typedef typename implementation_defined::ordered_iterator ordered_iterator; + + typedef typename implementation_defined::handle_type handle_type; + +private: + typedef typename implementation_defined::node_type node_type; + typedef typename implementation_defined::node_list_type node_list_type; + typedef typename implementation_defined::node_pointer node_pointer; + typedef typename implementation_defined::const_node_pointer const_node_pointer; + typedef typename implementation_defined::node_list_iterator node_list_iterator; + typedef typename implementation_defined::node_list_const_iterator node_list_const_iterator; + + typedef typename super_t::internal_compare internal_compare; + +public: + /// \copydoc boost::heap::priority_queue::priority_queue(value_compare const &) + explicit binomial_heap(value_compare const & cmp = value_compare()): + super_t(cmp), top_element(0) + {} + + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue const &) + binomial_heap(binomial_heap const & rhs): + super_t(rhs), top_element(0) + { + if (rhs.empty()) + return; + + clone_forest(rhs); + size_holder::set_size(rhs.get_size()); + } + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue const &) + binomial_heap & operator=(binomial_heap const & rhs) + { + clear(); + size_holder::set_size(rhs.get_size()); + static_cast(*this) = rhs; + + if (rhs.empty()) + top_element = NULL; + else + clone_forest(rhs); + return *this; + } + +#ifdef BOOST_HAS_RVALUE_REFS + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue &&) + binomial_heap(binomial_heap && rhs): + super_t(std::move(rhs)), top_element(rhs.top_element) + { + trees.splice(trees.begin(), rhs.trees); + rhs.top_element = NULL; + } + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue &&) + binomial_heap & operator=(binomial_heap && rhs) + { + clear(); + super_t::operator=(std::move(rhs)); + trees.splice(trees.begin(), rhs.trees); + top_element = rhs.top_element; + rhs.top_element = NULL; + return *this; + } +#endif + + ~binomial_heap(void) + { + clear(); + } + + /// \copydoc boost::heap::priority_queue::empty + bool empty(void) const + { + return top_element == NULL; + } + + /** + * \b Effects: Returns the number of elements contained in the priority queue. + * + * \b Complexity: Constant, if configured with constant_time_size, otherwise linear. + * + * */ + size_type size(void) const + { + if (constant_time_size) + return size_holder::get_size(); + + if (empty()) + return 0; + else + return detail::count_list_nodes(trees); + } + + /// \copydoc boost::heap::priority_queue::max_size + size_type max_size(void) const + { + return allocator_type::max_size(); + } + + /// \copydoc boost::heap::priority_queue::clear + void clear(void) + { + typedef detail::node_disposer disposer; + trees.clear_and_dispose(disposer(*this)); + + size_holder::set_size(0); + top_element = NULL; + } + + /// \copydoc boost::heap::priority_queue::get_allocator + allocator_type get_allocator(void) const + { + return *this; + } + + /// \copydoc boost::heap::priority_queue::swap + void swap(binomial_heap & rhs) + { + super_t::swap(rhs); + std::swap(top_element, rhs.top_element); + trees.swap(rhs.trees); + } + + /// \copydoc boost::heap::priority_queue::top + const_reference top(void) const + { + BOOST_ASSERT(!empty()); + + return super_t::get_value(top_element->value); + } + + /** + * \b Effects: Adds a new element to the priority queue. Returns handle to element + * + * \b Complexity: Logarithmic. + * + * */ + handle_type push(value_type const & v) + { + node_pointer n = allocator_type::allocate(1); + new(n) node_type(super_t::make_node(v)); + + insert_node(trees.begin(), n); + + if (!top_element || super_t::operator()(top_element->value, n->value)) + top_element = n; + + size_holder::increment(); + sanity_check(); + return handle_type(n); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + /** + * \b Effects: Adds a new element to the priority queue. The element is directly constructed in-place. Returns handle to element. + * + * \b Complexity: Logarithmic. + * + * */ + template + handle_type emplace(Args&&... args) + { + node_pointer n = allocator_type::allocate(1); + new(n) node_type(super_t::make_node(std::forward(args)...)); + + insert_node(trees.begin(), n); + + if (!top_element || super_t::operator()(top_element->value, n->value)) + top_element = n; + + size_holder::increment(); + sanity_check(); + return handle_type(n); + } +#endif + + /** + * \b Effects: Removes the top element from the priority queue. + * + * \b Complexity: Logarithmic. + * + * */ + void pop(void) + { + BOOST_ASSERT(!empty()); + + node_pointer element = top_element; + + trees.erase(node_list_type::s_iterator_to(*element)); + size_holder::decrement(); + + if (element->child_count()) { + size_type sz = (1 << element->child_count()) - 1; + binomial_heap children(value_comp(), element->children, sz); + if (trees.empty()) + swap(children); + else + merge_and_clear_nodes(children); + } + + if (trees.empty()) + top_element = NULL; + else + update_top_element(); + + element->~node_type(); + allocator_type::deallocate(element, 1); + sanity_check(); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * */ + void update (handle_type handle, const_reference v) + { + if (super_t::operator()(super_t::get_value(handle.node_->value), v)) + increase(handle, v); + else + decrease(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void update (handle_type handle) + { + node_pointer this_node = handle.node_; + + if (this_node->parent) { + if (super_t::operator()(super_t::get_value(this_node->parent->value), super_t::get_value(this_node->value))) + increase(handle); + else + decrease(handle); + } + else + decrease(handle); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be greater than the current one + * */ + void increase (handle_type handle, const_reference v) + { + handle.node_->value = super_t::make_node(v); + increase(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void increase (handle_type handle) + { + node_pointer n = handle.node_; + siftup(n, *this); + + update_top_element(); + sanity_check(); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one + * */ + void decrease (handle_type handle, const_reference v) + { + handle.node_->value = super_t::make_node(v); + decrease(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void decrease (handle_type handle) + { + node_pointer n = handle.node_; + + siftdown(n); + + if (n == top_element) + update_top_element(); + } + + /** + * \b Effects: Merge with priority queue rhs. + * + * \b Complexity: Logarithmic. + * + * */ + void merge(binomial_heap & rhs) + { + if (rhs.empty()) + return; + + if (empty()) { + swap(rhs); + return; + } + + size_type new_size = size_holder::get_size() + rhs.get_size(); + merge_and_clear_nodes(rhs); + + size_holder::set_size(new_size); + rhs.set_size(0); + rhs.top_element = NULL; + + super_t::set_stability_count(std::max(super_t::get_stability_count(), + rhs.get_stability_count())); + rhs.set_stability_count(0); + } + +public: + /// \copydoc boost::heap::priority_queue::begin + iterator begin(void) const + { + return iterator(trees.begin()); + } + + /// \copydoc boost::heap::priority_queue::end + iterator end(void) const + { + return iterator(trees.end()); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_begin + ordered_iterator ordered_begin(void) const + { + return ordered_iterator(trees.begin(), trees.end(), top_element, super_t::value_comp()); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_end + ordered_iterator ordered_end(void) const + { + return ordered_iterator(NULL, super_t::value_comp()); + } + + /** + * \b Effects: Removes the element handled by \c handle from the priority_queue. + * + * \b Complexity: Logarithmic. + * */ + void erase(handle_type handle) + { + node_pointer n = handle.node_; + siftup(n, force_inf()); + top_element = n; + pop(); + } + + /// \copydoc boost::heap::d_ary_heap_mutable::s_handle_from_iterator + static handle_type s_handle_from_iterator(iterator const & it) + { + node_type * ptr = const_cast(it.get_node()); + return handle_type(ptr); + } + + /// \copydoc boost::heap::priority_queue::value_comp + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } + + /// \copydoc boost::heap::priority_queue::operator<(HeapType const & rhs) const + template + bool operator<(HeapType const & rhs) const + { + return detail::heap_compare(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator>(HeapType const & rhs) const + template + bool operator>(HeapType const & rhs) const + { + return detail::heap_compare(rhs, *this); + } + + /// \copydoc boost::heap::priority_queue::operator>=(HeapType const & rhs) const + template + bool operator>=(HeapType const & rhs) const + { + return !operator<(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator<=(HeapType const & rhs) const + template + bool operator<=(HeapType const & rhs) const + { + return !operator>(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator==(HeapType const & rhs) const + template + bool operator==(HeapType const & rhs) const + { + return detail::heap_equality(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator!=(HeapType const & rhs) const + template + bool operator!=(HeapType const & rhs) const + { + return !(*this == rhs); + } + +private: +#if !defined(BOOST_DOXYGEN_INVOKED) + void merge_and_clear_nodes(binomial_heap & rhs) + { + BOOST_HEAP_ASSERT (!empty()); + BOOST_HEAP_ASSERT (!rhs.empty()); + + node_list_iterator this_iterator = trees.begin(); + node_pointer carry_node = NULL; + + while (!rhs.trees.empty()) { + node_pointer rhs_node = static_cast(&rhs.trees.front()); + size_type rhs_degree = rhs_node->child_count(); + + if (super_t::operator()(top_element->value, rhs_node->value)) + top_element = rhs_node; + + try_again: + node_pointer this_node = static_cast(&*this_iterator); + size_type this_degree = this_node->child_count(); + sorted_by_degree(); + rhs.sorted_by_degree(); + + if (this_degree == rhs_degree) { + if (carry_node) { + if (carry_node->child_count() < this_degree) { + trees.insert(this_iterator, *carry_node); + carry_node = NULL; + } else { + rhs.trees.pop_front(); + carry_node = merge_trees(carry_node, rhs_node); + } + ++this_iterator; + } else { + this_iterator = trees.erase(this_iterator); + rhs.trees.pop_front(); + carry_node = merge_trees(this_node, rhs_node); + } + + if (this_iterator == trees.end()) + break; + else + continue; + } + + if (this_degree < rhs_degree) { + if (carry_node) { + if (carry_node->child_count() < this_degree) { + trees.insert(this_iterator, *carry_node); + carry_node = NULL; + ++this_iterator; + } else if (carry_node->child_count() == rhs_degree) { + rhs.trees.pop_front(); + carry_node = merge_trees(carry_node, rhs_node); + continue; + } else { + this_iterator = trees.erase(this_iterator); + carry_node = merge_trees(this_node, carry_node); + } + goto try_again; + } else { + ++this_iterator; + if (this_iterator == trees.end()) + break; + goto try_again; + } + + if (this_iterator == trees.end()) + break; + else + continue; + } + + if (this_degree > rhs_degree) { + rhs.trees.pop_front(); + if (carry_node) { + if (carry_node->child_count() < rhs_degree) { + trees.insert(this_iterator, *carry_node); + trees.insert(this_iterator, *rhs_node); + carry_node = NULL; + } else + carry_node = merge_trees(rhs_node, carry_node); + } else + trees.insert(this_iterator, *rhs_node); + } + } + + if (!rhs.trees.empty()) { + if (carry_node) { + node_list_iterator rhs_it = rhs.trees.begin(); + while (static_cast(&*rhs_it)->child_count() < carry_node->child_count()) + ++rhs_it; + rhs.insert_node(rhs_it, carry_node); + rhs.increment(); + sorted_by_degree(); + rhs.sorted_by_degree(); + if (trees.empty()) { + trees.splice(trees.end(), rhs.trees, rhs.trees.begin(), rhs.trees.end()); + update_top_element(); + } else + merge_and_clear_nodes(rhs); + } else + trees.splice(trees.end(), rhs.trees, rhs.trees.begin(), rhs.trees.end()); + return; + } + + if (carry_node) + insert_node(this_iterator, carry_node); + } + + void clone_forest(binomial_heap const & rhs) + { + BOOST_HEAP_ASSERT(trees.empty()); + typedef typename node_type::template node_cloner node_cloner; + trees.clone_from(rhs.trees, node_cloner(*this, NULL), detail::nop_disposer()); + + update_top_element(); + } + + struct force_inf + { + template + bool operator()(X const &, X const &) const + { + return false; + } + }; + + template + void siftup(node_pointer n, Compare const & cmp) + { + while (n->parent) { + node_pointer parent = n->parent; + node_pointer grand_parent = parent->parent; + if (cmp(n->value, parent->value)) + return; + + n->remove_from_parent(); + + n->swap_children(parent); + n->update_children(); + parent->update_children(); + + if (grand_parent) { + parent->remove_from_parent(); + grand_parent->add_child(n); + } else { + node_list_iterator it = trees.erase(node_list_type::s_iterator_to(*parent)); + trees.insert(it, *n); + } + n->add_child(parent); + BOOST_HEAP_ASSERT(parent->child_count() == n->child_count()); + } + } + + void siftdown(node_pointer n) + { + while (n->child_count()) { + node_pointer max_child = detail::find_max_child(n->children, super_t::get_internal_cmp()); + + if (super_t::operator()(max_child->value, n->value)) + return; + + max_child->remove_from_parent(); + + n->swap_children(max_child); + n->update_children(); + max_child->update_children(); + + node_pointer parent = n->parent; + if (parent) { + n->remove_from_parent(); + max_child->add_child(n); + parent->add_child(max_child); + } else { + node_list_iterator position = trees.erase(node_list_type::s_iterator_to(*n)); + max_child->add_child(n); + trees.insert(position, *max_child); + } + } + } + + void insert_node(node_list_iterator it, node_pointer n) + { + if (it != trees.end()) + BOOST_HEAP_ASSERT(static_cast(&*it)->child_count() >= n->child_count()); + + while(true) { + BOOST_HEAP_ASSERT(!n->is_linked()); + if (it == trees.end()) + break; + + node_pointer this_node = static_cast(&*it); + size_type this_degree = this_node->child_count(); + size_type n_degree = n->child_count(); + if (this_degree == n_degree) { + BOOST_HEAP_ASSERT(it->is_linked()); + it = trees.erase(it); + + n = merge_trees(n, this_node); + } else + break; + } + trees.insert(it, *n); + } + + // private constructor, just used in pop() + explicit binomial_heap(value_compare const & cmp, node_list_type & child_list, size_type size): + super_t(cmp) + { + size_holder::set_size(size); + if (size) + top_element = static_cast(&*child_list.begin()); // not correct, but we will reset it later + else + top_element = NULL; + + for (node_list_iterator it = child_list.begin(); it != child_list.end(); ++it) { + node_pointer n = static_cast(&*it); + n->parent = NULL; + } + + trees.splice(trees.end(), child_list, child_list.begin(), child_list.end()); + + trees.sort(detail::cmp_by_degree()); + } + + node_pointer merge_trees (node_pointer node1, node_pointer node2) + { + BOOST_HEAP_ASSERT(node1->child_count() == node2->child_count()); + + if (super_t::operator()(node1->value, node2->value)) + std::swap(node1, node2); + + if (node2->parent) + node2->remove_from_parent(); + + node1->add_child(node2); + return node1; + } + + void update_top_element(void) + { + top_element = detail::find_max_child(trees, super_t::get_internal_cmp()); + } + + void sorted_by_degree(void) const + { +#ifdef BOOST_HEAP_SANITYCHECKS + int degree = -1; + + for (node_list_const_iterator it = trees.begin(); it != trees.end(); ++it) { + const_node_pointer n = static_cast(&*it); + BOOST_HEAP_ASSERT(int(n->child_count()) > degree); + degree = n->child_count(); + + BOOST_HEAP_ASSERT((detail::is_heap(n, *this))); + + size_type child_nodes = detail::count_nodes(n); + BOOST_HEAP_ASSERT(child_nodes == size_type(1 << static_cast(&*it)->child_count())); + } +#endif + } + + void sanity_check(void) + { +#ifdef BOOST_HEAP_SANITYCHECKS + sorted_by_degree(); + + if (!empty()) { + node_pointer found_top = detail::find_max_child(trees, super_t::get_internal_cmp()); + BOOST_HEAP_ASSERT(top_element == found_top); + } + + if (constant_time_size) { + size_t counted = detail::count_list_nodes(trees); + size_t stored = size_holder::get_size(); + BOOST_HEAP_ASSERT(counted == stored); + } +#endif + } + + node_pointer top_element; + node_list_type trees; +#endif // BOOST_DOXYGEN_INVOKED +}; + + +} /* namespace heap */ +} /* namespace boost */ + +#undef BOOST_HEAP_ASSERT + +#endif /* BOOST_HEAP_D_ARY_HEAP_HPP */ diff --git a/3party/boost/boost/heap/d_ary_heap.hpp b/3party/boost/boost/heap/d_ary_heap.hpp new file mode 100644 index 0000000000..2bfa187595 --- /dev/null +++ b/3party/boost/boost/heap/d_ary_heap.hpp @@ -0,0 +1,825 @@ +// // boost heap: d-ary heap as containter adaptor +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_D_ARY_HEAP_HPP +#define BOOST_HEAP_D_ARY_HEAP_HPP + +#include +#include + +#include + +#include +#include +#include +#include +#include + +#ifndef BOOST_DOXYGEN_INVOKED +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif +#endif + +namespace boost { +namespace heap { +namespace detail { + +template +struct nop_index_updater +{ + void operator()(T &, std::size_t) const + {} + + template + struct rebind { + typedef nop_index_updater other; + }; +}; + +typedef parameter::parameters, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional + > d_ary_heap_signature; + + +/* base class for d-ary heap */ +template +class d_ary_heap: + private make_heap_base::type +{ + typedef make_heap_base heap_base_maker; + + typedef typename heap_base_maker::type super_t; + typedef typename super_t::internal_type internal_type; + + typedef typename heap_base_maker::allocator_argument::template rebind::other internal_type_allocator; + typedef std::vector container_type; + typedef typename container_type::const_iterator container_iterator; + + typedef typename IndexUpdater::template rebind::other index_updater; + + container_type q_; + + static const unsigned int D = parameter::binding::type::value; + + template + friend struct heap_merge_emulate; + + struct implementation_defined: + extract_allocator_types + { + typedef T value_type; + typedef typename detail::extract_allocator_types::size_type size_type; + + typedef typename heap_base_maker::compare_argument value_compare; + typedef typename heap_base_maker::allocator_argument allocator_type; + + struct ordered_iterator_dispatcher + { + static size_type max_index(const d_ary_heap * heap) + { + return heap->q_.size() - 1; + } + + static bool is_leaf(const d_ary_heap * heap, size_type index) + { + return !heap->not_leaf(index); + } + + static std::pair get_child_nodes(const d_ary_heap * heap, size_type index) + { + BOOST_HEAP_ASSERT(!is_leaf(heap, index)); + return std::make_pair(d_ary_heap::first_child_index(index), + heap->last_child_index(index)); + } + + static internal_type const & get_internal_value(const d_ary_heap * heap, size_type index) + { + return heap->q_[index]; + } + + static value_type const & get_value(internal_type const & arg) + { + return super_t::get_value(arg); + } + }; + + typedef detail::ordered_adaptor_iterator ordered_iterator; + + typedef detail::stable_heap_iterator iterator; + typedef iterator const_iterator; + typedef void * handle_type; + + }; + + typedef typename implementation_defined::ordered_iterator_dispatcher ordered_iterator_dispatcher; + +public: + typedef T value_type; + + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + typedef typename implementation_defined::ordered_iterator ordered_iterator; + typedef typename implementation_defined::handle_type handle_type; + + static const bool is_stable = extract_stable::value; + + explicit d_ary_heap(value_compare const & cmp = value_compare()): + super_t(cmp) + {} + + d_ary_heap(d_ary_heap const & rhs): + super_t(rhs), q_(rhs.q_) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + d_ary_heap(d_ary_heap && rhs): + super_t(std::move(rhs)), q_(std::move(rhs.q_)) + {} + + d_ary_heap & operator=(d_ary_heap && rhs) + { + super_t::operator=(std::move(rhs)); + q_ = std::move(rhs.q_); + return *this; + } +#endif + + d_ary_heap & operator=(d_ary_heap const & rhs) + { + static_cast(*this) = static_cast(rhs); + q_ = rhs.q_; + return *this; + } + + bool empty(void) const + { + return q_.empty(); + } + + size_type size(void) const + { + return q_.size(); + } + + size_type max_size(void) const + { + return q_.max_size(); + } + + void clear(void) + { + q_.clear(); + } + + allocator_type get_allocator(void) const + { + return q_.get_allocator(); + } + + value_type const & top(void) const + { + BOOST_ASSERT(!empty()); + return super_t::get_value(q_.front()); + } + + void push(value_type const & v) + { + q_.push_back(super_t::make_node(v)); + reset_index(size() - 1, size() - 1); + siftup(q_.size() - 1); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + void emplace(Args&&... args) + { + q_.emplace_back(super_t::make_node(std::forward(args)...)); + reset_index(size() - 1, size() - 1); + siftup(q_.size() - 1); + } +#endif + void pop(void) + { + BOOST_ASSERT(!empty()); + std::swap(q_.front(), q_.back()); + q_.pop_back(); + + if (q_.empty()) + return; + + reset_index(0, 0); + siftdown(0); + } + + void swap(d_ary_heap & rhs) + { + super_t::swap(rhs); + q_.swap(rhs.q_); + } + + iterator begin(void) const + { + return iterator(q_.begin()); + } + + iterator end(void) const + { + return iterator(q_.end()); + } + + ordered_iterator ordered_begin(void) const + { + return ordered_iterator(0, this, super_t::get_internal_cmp()); + } + + ordered_iterator ordered_end(void) const + { + return ordered_iterator(size(), this, super_t::get_internal_cmp()); + } + + void reserve (size_type element_count) + { + q_.reserve(element_count); + } + + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } + +private: + void reset_index(size_type index, size_type new_index) + { + BOOST_HEAP_ASSERT(index < q_.size()); + index_updater()(q_[index], new_index); + } + + void siftdown(size_type index) + { + while (not_leaf(index)) { + size_type max_child_index = top_child_index(index); + if (!super_t::operator()(q_[max_child_index], q_[index])) { + reset_index(index, max_child_index); + reset_index(max_child_index, index); + std::swap(q_[max_child_index], q_[index]); + index = max_child_index; + } + else + return; + } + } + + /* returns new index */ + void siftup(size_type index) + { + while (index != 0) { + size_type parent = parent_index(index); + + if (super_t::operator()(q_[parent], q_[index])) { + reset_index(index, parent); + reset_index(parent, index); + std::swap(q_[parent], q_[index]); + index = parent; + } + else + return; + } + } + + bool not_leaf(size_type index) const + { + const size_t first_child = first_child_index(index); + return first_child < q_.size(); + } + + size_type top_child_index(size_type index) const + { + // invariant: index is not a leaf, so the iterator range is not empty + + const size_t first_index = first_child_index(index); + typedef typename container_type::const_iterator container_iterator; + + const container_iterator first_child = q_.begin() + first_index; + const container_iterator end = q_.end(); + + const size_type max_elements = std::distance(first_child, end); + + const container_iterator last_child = (max_elements > D) ? first_child + D + : end; + + const container_iterator min_element = std::max_element(first_child, last_child, static_cast(*this)); + + return min_element - q_.begin(); + } + + static size_type parent_index(size_type index) + { + return (index - 1) / D; + } + + static size_type first_child_index(size_type index) + { + return index * D + 1; + } + + size_type last_child_index(size_type index) const + { + typedef typename container_type::const_iterator container_iterator; + const size_t first_index = first_child_index(index); + + const size_type last_index = std::min(first_index + D - 1, size() - 1); + + return last_index; + } + + template + struct rebind { + typedef d_ary_heap, + boost::heap::stability_counter_type, + boost::heap::arity, + boost::heap::compare, + boost::heap::allocator + >::type, + X + > other; + }; + + template friend class priority_queue_mutable_wrapper; + + void update(size_type index) + { + if (index == 0) { + siftdown(index); + return; + } + size_type parent = parent_index(index); + + if (super_t::operator()(q_[parent], q_[index])) + siftup(index); + else + siftdown(index); + } + + void erase(size_type index) + { + while (index != 0) + { + size_type parent = parent_index(index); + + reset_index(index, parent); + reset_index(parent, index); + std::swap(q_[parent], q_[index]); + index = parent; + } + pop(); + } + + void increase(size_type index) + { + siftup(index); + } + + void decrease(size_type index) + { + siftdown(index); + } +}; + + +template +struct select_dary_heap +{ + static const bool is_mutable = extract_mutable::value; + + typedef typename mpl::if_c< is_mutable, + priority_queue_mutable_wrapper > >, + d_ary_heap > + >::type type; +}; + +} /* namespace detail */ + + + +/** + * \class d_ary_heap + * \brief d-ary heap class + * + * This class implements an immutable priority queue. Internally, the d-ary heap is represented + * as dynamically sized array (std::vector), that directly stores the values. + * + * The template parameter T is the type to be managed by the container. + * The user can specify additional options and if no options are provided default options are used. + * + * The container supports the following options: + * - \c boost::heap::arity<>, required + * - \c boost::heap::compare<>, defaults to \c compare > + * - \c boost::heap::stable<>, defaults to \c stable + * - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type + * - \c boost::heap::allocator<>, defaults to \c allocator > + * - \c boost::heap::mutable_<>, defaults to \c mutable_ + * + */ +#ifdef BOOST_DOXYGEN_INVOKED +template +#else +template +#endif +class d_ary_heap: + public detail::select_dary_heap::type>::type +{ + typedef typename detail::d_ary_heap_signature::bind::type bound_args; + typedef typename detail::select_dary_heap::type super_t; + + template + friend struct heap_merge_emulate; + +#ifndef BOOST_DOXYGEN_INVOKED + static const bool is_mutable = detail::extract_mutable::value; + +#define BOOST_HEAP_TYPEDEF_FROM_SUPER_T(NAME) \ + typedef typename super_t::NAME NAME; + + struct implementation_defined + { + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(size_type) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(difference_type) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(value_compare) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(allocator_type) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(reference) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(const_reference) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(pointer) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(const_pointer) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(iterator) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(const_iterator) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(ordered_iterator) + BOOST_HEAP_TYPEDEF_FROM_SUPER_T(handle_type) + }; +#undef BOOST_HEAP_TYPEDEF_FROM_SUPER_T + +#endif +public: + static const bool constant_time_size = true; + static const bool has_ordered_iterators = true; + static const bool is_mergable = false; + static const bool has_reserve = true; + static const bool is_stable = super_t::is_stable; + + typedef T value_type; + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + /// \copydoc boost::heap::priority_queue::iterator + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + typedef typename implementation_defined::ordered_iterator ordered_iterator; + typedef typename implementation_defined::handle_type handle_type; + + /// \copydoc boost::heap::priority_queue::priority_queue(value_compare const &) + explicit d_ary_heap(value_compare const & cmp = value_compare()): + super_t(cmp) + {} + + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue const &) + d_ary_heap(d_ary_heap const & rhs): + super_t(rhs) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue &&) + d_ary_heap(d_ary_heap && rhs): + super_t(std::move(rhs)) + {} + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue &&) + d_ary_heap & operator=(d_ary_heap && rhs) + { + super_t::operator=(std::move(rhs)); + return *this; + } +#endif + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue const &) + d_ary_heap & operator=(d_ary_heap const & rhs) + { + super_t::operator=(rhs); + return *this; + } + + /// \copydoc boost::heap::priority_queue::empty + bool empty(void) const + { + return super_t::empty(); + } + + /// \copydoc boost::heap::priority_queue::size + size_type size(void) const + { + return super_t::size(); + } + + /// \copydoc boost::heap::priority_queue::max_size + size_type max_size(void) const + { + return super_t::max_size(); + } + + /// \copydoc boost::heap::priority_queue::clear + void clear(void) + { + super_t::clear(); + } + + /// \copydoc boost::heap::priority_queue::get_allocator + allocator_type get_allocator(void) const + { + return super_t::get_allocator(); + } + + /// \copydoc boost::heap::priority_queue::top + value_type const & top(void) const + { + return super_t::top(); + } + + /// \copydoc boost::heap::priority_queue::push + typename mpl::if_c::type push(value_type const & v) + { + return super_t::push(v); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + /// \copydoc boost::heap::priority_queue::emplace + template + typename mpl::if_c::type emplace(Args&&... args) + { + return super_t::emplace(std::forward(args)...); + } +#endif + + /// \copydoc boost::heap::priority_queue::operator<(HeapType const & rhs) const + template + bool operator<(HeapType const & rhs) const + { + return detail::heap_compare(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator>(HeapType const & rhs) const + template + bool operator>(HeapType const & rhs) const + { + return detail::heap_compare(rhs, *this); + } + + /// \copydoc boost::heap::priority_queue::operator>=(HeapType const & rhs) const + template + bool operator>=(HeapType const & rhs) const + { + return !operator<(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator<=(HeapType const & rhs) const + template + bool operator<=(HeapType const & rhs) const + { + return !operator>(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator==(HeapType const & rhs) const + template + bool operator==(HeapType const & rhs) const + { + return detail::heap_equality(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator!=(HeapType const & rhs) const + template + bool operator!=(HeapType const & rhs) const + { + return !(*this == rhs); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Requirement: data structure must be configured as mutable + * */ + void update(handle_type handle, const_reference v) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::update(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * + * \b Requirement: data structure must be configured as mutable + * */ + void update(handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::update(handle); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be greater than the current one + * + * \b Requirement: data structure must be configured as mutable + * */ + void increase(handle_type handle, const_reference v) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::increase(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be greater than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * + * \b Requirement: data structure must be configured as mutable + * */ + void increase(handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::increase(handle); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one + * + * \b Requirement: data structure must be configured as mutable + * */ + void decrease(handle_type handle, const_reference v) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::decrease(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * + * \b Requirement: data structure must be configured as mutable + * */ + void decrease(handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::decrease(handle); + } + + /** + * \b Effects: Removes the element handled by \c handle from the priority_queue. + * + * \b Complexity: Logarithmic. + * + * \b Requirement: data structure must be configured as mutable + * */ + void erase(handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + super_t::erase(handle); + } + + /** + * \b Effects: Casts an iterator to a node handle. + * + * \b Complexity: Constant. + * + * \b Requirement: data structure must be configured as mutable + * */ + static handle_type s_handle_from_iterator(iterator const & it) + { + BOOST_STATIC_ASSERT(is_mutable); + return super_t::s_handle_from_iterator(it); + } + + /// \copydoc boost::heap::priority_queue::pop + void pop(void) + { + super_t::pop(); + } + + /// \copydoc boost::heap::priority_queue::swap + void swap(d_ary_heap & rhs) + { + super_t::swap(rhs); + } + + /// \copydoc boost::heap::priority_queue::begin + const_iterator begin(void) const + { + return super_t::begin(); + } + + /// \copydoc boost::heap::priority_queue::begin + iterator begin(void) + { + return super_t::begin(); + } + + /// \copydoc boost::heap::priority_queue::end + iterator end(void) + { + return super_t::end(); + } + + /// \copydoc boost::heap::priority_queue::end + const_iterator end(void) const + { + return super_t::end(); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_begin + ordered_iterator ordered_begin(void) const + { + return super_t::ordered_begin(); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_end + ordered_iterator ordered_end(void) const + { + return super_t::ordered_end(); + } + + /// \copydoc boost::heap::priority_queue::reserve + void reserve (size_type element_count) + { + super_t::reserve(element_count); + } + + /// \copydoc boost::heap::priority_queue::value_comp + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } +}; + +} /* namespace heap */ +} /* namespace boost */ + +#undef BOOST_HEAP_ASSERT + +#endif /* BOOST_HEAP_D_ARY_HEAP_HPP */ diff --git a/3party/boost/boost/heap/detail/heap_comparison.hpp b/3party/boost/boost/heap/detail/heap_comparison.hpp new file mode 100644 index 0000000000..557f892293 --- /dev/null +++ b/3party/boost/boost/heap/detail/heap_comparison.hpp @@ -0,0 +1,245 @@ +// boost heap: heap node helper classes +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_DETAIL_HEAP_COMPARISON_HPP +#define BOOST_HEAP_DETAIL_HEAP_COMPARISON_HPP + +#include +#include +#include +#include + +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif + +namespace boost { +namespace heap { +namespace detail { + +template +bool value_equality(Heap1 const & lhs, Heap2 const & rhs, + typename Heap1::value_type lval, typename Heap2::value_type rval) +{ + typename Heap1::value_compare const & cmp = lhs.value_comp(); + bool ret = !(cmp(lval, rval)) && !(cmp(rval, lval)); + + // if this assertion is triggered, the value_compare objects of lhs and rhs return different values + BOOST_ASSERT((ret == (!(rhs.value_comp()(lval, rval)) && !(rhs.value_comp()(rval, lval))))); + + return ret; +} + +template +bool value_compare(Heap1 const & lhs, Heap2 const & rhs, + typename Heap1::value_type lval, typename Heap2::value_type rval) +{ + typename Heap1::value_compare const & cmp = lhs.value_comp(); + bool ret = cmp(lval, rval); + + // if this assertion is triggered, the value_compare objects of lhs and rhs return different values + BOOST_ASSERT((ret == rhs.value_comp()(lval, rval))); + return ret; +} + +struct heap_equivalence_copy +{ + template + bool operator()(Heap1 const & lhs, Heap2 const & rhs) + { + BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue)); + BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue)); + + // if this assertion is triggered, the value_compare types are incompatible + BOOST_STATIC_ASSERT((boost::is_same::value)); + + if (Heap1::constant_time_size && Heap2::constant_time_size) + if (lhs.size() != rhs.size()) + return false; + + if (lhs.empty() && rhs.empty()) + return true; + + Heap1 lhs_copy(lhs); + Heap2 rhs_copy(rhs); + + while (true) { + if (!value_equality(lhs_copy, rhs_copy, lhs_copy.top(), rhs_copy.top())) + return false; + + lhs_copy.pop(); + rhs_copy.pop(); + + if (lhs_copy.empty() && rhs_copy.empty()) + return true; + + if (lhs_copy.empty()) + return false; + + if (rhs_copy.empty()) + return false; + } + } +}; + + +struct heap_equivalence_iteration +{ + template + bool operator()(Heap1 const & lhs, Heap2 const & rhs) + { + BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue)); + BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue)); + + // if this assertion is triggered, the value_compare types are incompatible + BOOST_STATIC_ASSERT((boost::is_same::value)); + + if (Heap1::constant_time_size && Heap2::constant_time_size) + if (lhs.size() != rhs.size()) + return false; + + if (lhs.empty() && rhs.empty()) + return true; + + typename Heap1::ordered_iterator it1 = lhs.ordered_begin(); + typename Heap1::ordered_iterator it1_end = lhs.ordered_end(); + typename Heap1::ordered_iterator it2 = rhs.ordered_begin(); + typename Heap1::ordered_iterator it2_end = rhs.ordered_end(); + while (true) { + if (!value_equality(lhs, rhs, *it1, *it2)) + return false; + + ++it1; + ++it2; + + if (it1 == it1_end && it2 == it2_end) + return true; + + if (it1 == it1_end || it2 == it2_end) + return false; + } + } +}; + + +template +bool heap_equality(Heap1 const & lhs, Heap2 const & rhs) +{ + const bool use_ordered_iterators = Heap1::has_ordered_iterators && Heap2::has_ordered_iterators; + + typedef typename boost::mpl::if_c::type equivalence_check; + + equivalence_check check; + return check(lhs, rhs); +} + + +struct heap_compare_iteration +{ + template + bool operator()(Heap1 const & lhs, Heap2 const & rhs) + { + typename Heap1::size_type left_size = lhs.size(); + typename Heap2::size_type right_size = rhs.size(); + if (left_size < right_size) + return true; + + if (left_size > right_size) + return false; + + typename Heap1::ordered_iterator it1 = lhs.ordered_begin(); + typename Heap1::ordered_iterator it1_end = lhs.ordered_end(); + typename Heap1::ordered_iterator it2 = rhs.ordered_begin(); + typename Heap1::ordered_iterator it2_end = rhs.ordered_end(); + while (true) { + if (value_compare(lhs, rhs, *it1, *it2)) + return true; + + if (value_compare(lhs, rhs, *it2, *it1)) + return false; + + ++it1; + ++it2; + + if (it1 == it1_end && it2 == it2_end) + return true; + + if (it1 == it1_end || it2 == it2_end) + return false; + } + } +}; + +struct heap_compare_copy +{ + template + bool operator()(Heap1 const & lhs, Heap2 const & rhs) + { + typename Heap1::size_type left_size = lhs.size(); + typename Heap2::size_type right_size = rhs.size(); + if (left_size < right_size) + return true; + + if (left_size > right_size) + return false; + + Heap1 lhs_copy(lhs); + Heap2 rhs_copy(rhs); + + while (true) { + if (value_compare(lhs_copy, rhs_copy, lhs_copy.top(), rhs_copy.top())) + return true; + + if (value_compare(lhs_copy, rhs_copy, rhs_copy.top(), lhs_copy.top())) + return false; + + lhs_copy.pop(); + rhs_copy.pop(); + + if (lhs_copy.empty() && rhs_copy.empty()) + return false; + } + } +}; + +template +bool heap_compare(Heap1 const & lhs, Heap2 const & rhs) +{ + const bool use_ordered_iterators = Heap1::has_ordered_iterators && Heap2::has_ordered_iterators; + + typedef typename boost::mpl::if_c::type compare_check; + + compare_check check; + return check(lhs, rhs); +} + + +} /* namespace detail */ +} /* namespace heap */ +} /* namespace boost */ + + +#undef BOOST_HEAP_ASSERT + +#endif // BOOST_HEAP_DETAIL_HEAP_COMPARISON_HPP diff --git a/3party/boost/boost/heap/detail/heap_node.hpp b/3party/boost/boost/heap/detail/heap_node.hpp new file mode 100644 index 0000000000..659ffc300c --- /dev/null +++ b/3party/boost/boost/heap/detail/heap_node.hpp @@ -0,0 +1,366 @@ +// boost heap: heap node helper classes +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_DETAIL_HEAP_NODE_HPP +#define BOOST_HEAP_DETAIL_HEAP_NODE_HPP + +#include +#include +#include +#include + +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif + + +namespace boost { +namespace heap { +namespace detail { + +namespace bi = boost::intrusive; +namespace mpl = boost::mpl; + +template +struct heap_node_base: + bi::list_base_hook, + bi::link_mode + >::type + > +{}; + +typedef bi::list > heap_node_list; + +struct nop_disposer +{ + template + void operator()(T * n) + { + BOOST_HEAP_ASSERT(false); + } +}; + +template +bool is_heap(const Node * n, typename HeapBase::value_compare const & cmp) +{ + for (typename Node::const_child_iterator it = n->children.begin(); it != n->children.end(); ++it) { + Node const & this_node = static_cast(*it); + const Node * child = static_cast(&this_node); + + if (cmp(HeapBase::get_value(n->value), HeapBase::get_value(child->value)) || + !is_heap(child, cmp)) + return false; + } + return true; +} + +template +std::size_t count_nodes(const Node * n); + +template +std::size_t count_list_nodes(List const & node_list) +{ + std::size_t ret = 0; + + for (typename List::const_iterator it = node_list.begin(); it != node_list.end(); ++it) { + const Node * child = static_cast(&*it); + ret += count_nodes(child); + } + return ret; +} + +template +std::size_t count_nodes(const Node * n) +{ + return 1 + count_list_nodes(n->children); +} + + +/* node cloner + * + * Requires `Clone Constructor': + * template + * Node::Node(Node const &, Alloc &) + * + * template + * Node::Node(Node const &, Alloc &, Node * parent) + * + * */ +template +struct node_cloner +{ + node_cloner(Alloc & allocator): + allocator(allocator) + {} + + Node * operator() (NodeBase const & node) + { + Node * ret = allocator.allocate(1); + new (ret) Node(static_cast(node), allocator); + return ret; + } + + Node * operator() (NodeBase const & node, Node * parent) + { + Node * ret = allocator.allocate(1); + new (ret) Node(static_cast(node), allocator, parent); + return ret; + } + +private: + Alloc & allocator; +}; + +/* node disposer + * + * Requirements: + * Node::clear_subtree(Alloc &) clears the subtree via allocator + * + * */ +template +struct node_disposer +{ + typedef typename Alloc::pointer node_pointer; + + node_disposer(Alloc & alloc): + alloc_(alloc) + {} + + void operator()(NodeBase * base) + { + node_pointer n = static_cast(base); + n->clear_subtree(alloc_); + alloc_.deallocate(n, 1); + } + + Alloc & alloc_; +}; + + +template +struct heap_node: + heap_node_base +{ + typedef heap_node_base node_base; + +public: + typedef ValueType value_type; + + typedef bi::list > child_list; + + typedef typename child_list::iterator child_iterator; + typedef typename child_list::const_iterator const_child_iterator; + typedef typename child_list::size_type size_type; + + heap_node(ValueType const & v): + value(v) + {} + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + heap_node(Args&&... args): + value(std::forward(args)...) + {} +#endif + +/* protected: */ + heap_node(heap_node const & rhs): + value(rhs.value) + { + /* we don't copy the child list, but clone it later */ + } + +public: + + template + heap_node (heap_node const & rhs, Alloc & allocator): + value(rhs.value) + { + children.clone_from(rhs.children, node_cloner(allocator), nop_disposer()); + } + + size_type child_count(void) const + { + BOOST_STATIC_ASSERT(constant_time_child_size); + return children.size(); + } + + void add_child(heap_node * n) + { + children.push_back(*n); + } + + template + void clear_subtree(Alloc & alloc) + { + children.clear_and_dispose(node_disposer(alloc)); + } + + void swap_children(heap_node * rhs) + { + children.swap(rhs->children); + } + + ValueType value; + child_list children; +}; + +template +struct parent_pointing_heap_node: + heap_node +{ + typedef heap_node super_t; + + parent_pointing_heap_node(value_type const & v): + super_t(v), parent(NULL) + {} + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + parent_pointing_heap_node(Args&&... args): + super_t(std::forward(args)...), parent(NULL) + {} +#endif + + template + struct node_cloner + { + node_cloner(Alloc & allocator, parent_pointing_heap_node * parent): + allocator(allocator), parent_(parent) + {} + + parent_pointing_heap_node * operator() (typename super_t::node_base const & node) + { + parent_pointing_heap_node * ret = allocator.allocate(1); + new (ret) parent_pointing_heap_node(static_cast(node), allocator, parent_); + return ret; + } + + private: + Alloc & allocator; + parent_pointing_heap_node * parent_; + }; + + template + parent_pointing_heap_node (parent_pointing_heap_node const & rhs, Alloc & allocator, parent_pointing_heap_node * parent): + super_t(static_cast(rhs)), parent(parent) + { + super_t::children.clone_from(rhs.children, node_cloner(allocator, this), nop_disposer()); + } + + void update_children(void) + { + typedef heap_node_list::iterator node_list_iterator; + for (node_list_iterator it = super_t::children.begin(); it != super_t::children.end(); ++it) { + parent_pointing_heap_node * child = static_cast(&*it); + child->parent = this; + } + } + + void remove_from_parent(void) + { + BOOST_HEAP_ASSERT(parent); + parent->children.erase(heap_node_list::s_iterator_to(*this)); + parent = NULL; + } + + void add_child(parent_pointing_heap_node * n) + { + BOOST_HEAP_ASSERT(n->parent == NULL); + n->parent = this; + super_t::add_child(n); + } + + parent_pointing_heap_node * get_parent(void) + { + return parent; + } + + const parent_pointing_heap_node * get_parent(void) const + { + return parent; + } + + parent_pointing_heap_node * parent; +}; + + +template +struct marked_heap_node: + parent_pointing_heap_node +{ + typedef parent_pointing_heap_node super_t; + + marked_heap_node(value_type const & v): + super_t(v), mark(false) + {} + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + marked_heap_node(Args&&... args): + super_t(std::forward(args)...), mark(false) + {} +#endif + + marked_heap_node * get_parent(void) + { + return static_cast(super_t::parent); + } + + const marked_heap_node * get_parent(void) const + { + return static_cast(super_t::parent); + } + + bool mark; +}; + + +template +struct cmp_by_degree +{ + template + bool operator()(NodeBase const & left, + NodeBase const & right) + { + return static_cast(&left)->child_count() < static_cast(&right)->child_count(); + } +}; + +template +Node * find_max_child(List const & list, Cmp const & cmp) +{ + BOOST_HEAP_ASSERT(!list.empty()); + + const Node * ret = static_cast (&list.front()); + for (typename List::const_iterator it = list.begin(); it != list.end(); ++it) { + const Node * current = static_cast (&*it); + + if (cmp(ret->value, current->value)) + ret = current; + } + + return const_cast(ret); +} + +} /* namespace detail */ +} /* namespace heap */ +} /* namespace boost */ + +#undef BOOST_HEAP_ASSERT +#endif /* BOOST_HEAP_DETAIL_HEAP_NODE_HPP */ diff --git a/3party/boost/boost/heap/detail/ilog2.hpp b/3party/boost/boost/heap/detail/ilog2.hpp new file mode 100644 index 0000000000..9b5df05ef4 --- /dev/null +++ b/3party/boost/boost/heap/detail/ilog2.hpp @@ -0,0 +1,64 @@ +// boost heap: integer log2 +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_DETAIL_ILOG2_HPP +#define BOOST_HEAP_DETAIL_ILOG2_HPP + +#include // std::size_t + +namespace boost { +namespace heap { +namespace detail { + +template +struct log2 +{ + IntType operator()(IntType value) + { + IntType l = 0; + while( (value >> l) > 1 ) + ++l; + return l; + } +}; + +#ifdef __GNUC__ +template<> +struct log2 +{ + unsigned int operator()(unsigned int value) + { + return sizeof(unsigned int)*8 - __builtin_clz(value - 1); + } +}; + +template<> +struct log2 +{ + unsigned long operator()(unsigned long value) + { + return sizeof(unsigned long)*8 - __builtin_clzl(value - 1); + } +}; + +#endif + +} /* namespace detail */ + + +template +IntType log2(IntType value) +{ + detail::log2 fn; + return fn(value); +} + +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_DETAIL_ILOG2_HPP */ \ No newline at end of file diff --git a/3party/boost/boost/heap/detail/mutable_heap.hpp b/3party/boost/boost/heap/detail/mutable_heap.hpp new file mode 100644 index 0000000000..02731f59cb --- /dev/null +++ b/3party/boost/boost/heap/detail/mutable_heap.hpp @@ -0,0 +1,534 @@ +// boost heap +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_DETAIL_MUTABLE_HEAP_HPP +#define BOOST_HEAP_DETAIL_MUTABLE_HEAP_HPP + +/*! \file + * INTERNAL ONLY + */ + +#include +#include + +#include +#include +#include + +namespace boost { +namespace heap { +namespace detail { + +/* wrapper for a mutable heap container adaptors + * + * this wrapper introduces an additional indirection. the heap is not constructed from objects, + * but instead from std::list iterators. this way, the mutability is achieved + * + */ +template +class priority_queue_mutable_wrapper +{ +public: + typedef typename PriorityQueueType::value_type value_type; + typedef typename PriorityQueueType::size_type size_type; + typedef typename PriorityQueueType::value_compare value_compare; + typedef typename PriorityQueueType::allocator_type allocator_type; + + typedef typename PriorityQueueType::reference reference; + typedef typename PriorityQueueType::const_reference const_reference; + typedef typename PriorityQueueType::pointer pointer; + typedef typename PriorityQueueType::const_pointer const_pointer; + static const bool is_stable = PriorityQueueType::is_stable; + +private: + typedef std::pair node_type; + + typedef std::list::other> object_list; + + typedef typename object_list::iterator list_iterator; + typedef typename object_list::const_iterator const_list_iterator; + + template + friend struct heap_merge_emulate; + + typedef typename PriorityQueueType::super_t::stability_counter_type stability_counter_type; + + stability_counter_type get_stability_count(void) const + { + return q_.get_stability_count(); + } + + void set_stability_count(stability_counter_type new_count) + { + q_.set_stability_count(new_count); + } + + template + struct index_updater + { + template + void operator()(It & it, size_type new_index) + { + q_type::get_value(it)->second = new_index; + } + + template + struct rebind { + typedef index_updater other; + }; + }; + +public: + struct handle_type + { + value_type & operator*() const + { + return iterator->first; + } + + handle_type (void) + {} + + handle_type(handle_type const & rhs): + iterator(rhs.iterator) + {} + + private: + explicit handle_type(list_iterator const & it): + iterator(it) + {} + + list_iterator iterator; + + friend class priority_queue_mutable_wrapper; + }; + +private: + struct indirect_cmp: + public value_compare + { + indirect_cmp(value_compare const & cmp = value_compare()): + value_compare(cmp) + {} + + bool operator()(const_list_iterator const & lhs, const_list_iterator const & rhs) const + { + return value_compare::operator()(lhs->first, rhs->first); + } + }; + + typedef typename PriorityQueueType::template rebind >::other q_type; + +protected: + q_type q_; + object_list objects; + +protected: + priority_queue_mutable_wrapper(value_compare const & cmp = value_compare()): + q_(cmp) + {} + + priority_queue_mutable_wrapper(priority_queue_mutable_wrapper const & rhs): + objects(rhs.objects) + { + for (typename object_list::iterator it = objects.begin(); it != objects.end(); ++it) + q_.push(it); + } + + priority_queue_mutable_wrapper & operator=(priority_queue_mutable_wrapper const & rhs) + { + objects = rhs.objects; + q_.clear(); + for (typename object_list::iterator it = objects.begin(); it != objects.end(); ++it) + q_.push(it); + return *this; + } + +#ifdef BOOST_HAS_RVALUE_REFS + priority_queue_mutable_wrapper (priority_queue_mutable_wrapper && rhs): + q_(std::move(rhs.q_)) + { + /// FIXME: msvc seems to invalidate iterators when moving std::list + std::swap(objects, rhs.objects); + } + + priority_queue_mutable_wrapper & operator=(priority_queue_mutable_wrapper && rhs) + { + q_ = std::move(rhs.q_); + objects.clear(); + std::swap(objects, rhs.objects); + return *this; + } +#endif + + +public: + template + class iterator_base: + public boost::iterator_adaptor, + iterator_type, + value_type const, + boost::bidirectional_traversal_tag> + { + typedef boost::iterator_adaptor, + iterator_type, + value_type const, + boost::bidirectional_traversal_tag> super_t; + + friend class boost::iterator_core_access; + friend class priority_queue_mutable_wrapper; + + iterator_base(void): + super_t(0) + {} + + template + explicit iterator_base(T const & it): + super_t(it) + {} + + value_type const & dereference() const + { + return super_t::base()->first; + } + + iterator_type get_list_iterator() const + { + return super_t::base_reference(); + } + }; + + typedef iterator_base iterator; + typedef iterator_base const_iterator; + + typedef typename object_list::difference_type difference_type; + + class ordered_iterator: + public boost::iterator_adaptor, + q_type::ordered_iterator_dispatcher + { + typedef boost::iterator_adaptor adaptor_type; + + typedef const_list_iterator iterator; + typedef typename q_type::ordered_iterator_dispatcher ordered_iterator_dispatcher; + + friend class boost::iterator_core_access; + + public: + ordered_iterator(void): + adaptor_type(0), unvisited_nodes(indirect_cmp()), q_(NULL) + {} + + ordered_iterator(const priority_queue_mutable_wrapper * q, indirect_cmp const & cmp): + adaptor_type(0), unvisited_nodes(cmp), q_(q) + {} + + ordered_iterator(const_list_iterator it, const priority_queue_mutable_wrapper * q, indirect_cmp const & cmp): + adaptor_type(it), unvisited_nodes(cmp), q_(q) + { + if (it != q->objects.end()) + discover_nodes(it); + } + + bool operator!=(ordered_iterator const & rhs) const + { + return adaptor_type::base() != rhs.base(); + } + + bool operator==(ordered_iterator const & rhs) const + { + return !operator!=(rhs); + } + + private: + void increment(void) + { + if (unvisited_nodes.empty()) + adaptor_type::base_reference() = q_->objects.end(); + else { + iterator next = unvisited_nodes.top(); + unvisited_nodes.pop(); + discover_nodes(next); + adaptor_type::base_reference() = next; + } + } + + value_type const & dereference() const + { + return adaptor_type::base()->first; + } + + void discover_nodes(iterator current) + { + size_type current_index = current->second; + const q_type * q = &(q_->q_); + + if (ordered_iterator_dispatcher::is_leaf(q, current_index)) + return; + + std::pair child_range = ordered_iterator_dispatcher::get_child_nodes(q, current_index); + + for (size_type i = child_range.first; i <= child_range.second; ++i) { + typename q_type::internal_type const & internal_value_at_index = ordered_iterator_dispatcher::get_internal_value(q, i); + typename q_type::value_type const & value_at_index = q_->q_.get_value(internal_value_at_index); + + unvisited_nodes.push(value_at_index); + } + } + + std::priority_queue::other >, + indirect_cmp + > unvisited_nodes; + const priority_queue_mutable_wrapper * q_; + }; + + bool empty(void) const + { + return q_.empty(); + } + + size_type size(void) const + { + return q_.size(); + } + + size_type max_size(void) const + { + return objects.max_size(); + } + + void clear(void) + { + q_.clear(); + objects.clear(); + } + + allocator_type get_allocator(void) const + { + return q_.get_allocator(); + } + + void swap(priority_queue_mutable_wrapper & rhs) + { + objects.swap(rhs.objects); + q_.swap(rhs.q_); + } + + const_reference top(void) const + { + BOOST_ASSERT(!empty()); + return q_.top()->first; + } + + handle_type push(value_type const & v) + { + objects.push_front(std::make_pair(v, 0)); + list_iterator ret = objects.begin(); + q_.push(ret); + return handle_type(ret); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + handle_type emplace(Args&&... args) + { + objects.push_front(std::make_pair(std::forward(args)..., 0)); + list_iterator ret = objects.begin(); + q_.push(ret); + return handle_type(ret); + } +#endif + + void pop(void) + { + BOOST_ASSERT(!empty()); + list_iterator q_top = q_.top(); + q_.pop(); + objects.erase(q_top); + } + + /** + * \b Effects: Merge with priority queue rhs. + * + * \b Complexity: N log(N) + * + * */ + void merge(priority_queue_mutable_wrapper const & rhs) + { + q_.reserve(q_.size() + rhs.q_.size()); + + for (typename object_list::const_iterator it = rhs.objects.begin(); it != rhs.objects.end(); ++it) + push(it->first); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * */ + void update(handle_type handle, const_reference v) + { + list_iterator it = handle.iterator; + value_type const & current_value = it->first; + value_compare const & cmp = q_; + if (cmp(v, current_value)) + decrease(handle, v); + else + increase(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void update(handle_type handle) + { + list_iterator it = handle.iterator; + size_type index = it->second; + q_.update(index); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be greater than the current one + * */ + void increase(handle_type handle, const_reference v) + { + BOOST_ASSERT(!value_compare()(v, handle.iterator->first)); + handle.iterator->first = v; + increase(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be greater than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void increase(handle_type handle) + { + list_iterator it = handle.iterator; + size_type index = it->second; + q_.increase(index); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one + * */ + void decrease(handle_type handle, const_reference v) + { + BOOST_ASSERT(!value_compare()(handle.iterator->first, v)); + handle.iterator->first = v; + decrease(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void decrease(handle_type handle) + { + list_iterator it = handle.iterator; + size_type index = it->second; + q_.decrease(index); + } + + /** + * \b Effects: Removes the element handled by \c handle from the priority_queue. + * + * \b Complexity: Logarithmic. + * */ + void erase(handle_type handle) + { + list_iterator it = handle.iterator; + size_type index = it->second; + q_.erase(index); + objects.erase(it); + } + + const_iterator begin(void) const + { + return const_iterator(objects.begin()); + } + + const_iterator end(void) const + { + return const_iterator(objects.end()); + } + + iterator begin(void) + { + return iterator(objects.begin()); + } + + iterator end(void) + { + return iterator(objects.end()); + } + + ordered_iterator ordered_begin(void) const + { + if (!empty()) + return ordered_iterator(q_.top(), this, indirect_cmp(q_.value_comp())); + else + return ordered_end(); + } + + ordered_iterator ordered_end(void) const + { + return ordered_iterator(objects.end(), this, indirect_cmp(q_.value_comp())); + } + + static handle_type s_handle_from_iterator(iterator const & it) + { + return handle_type(it.get_list_iterator()); + } + + value_compare const & value_comp(void) const + { + return q_.value_comp(); + } + + void reserve (size_type element_count) + { + q_.reserve(element_count); + } +}; + + +} /* namespace detail */ +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_DETAIL_MUTABLE_HEAP_HPP */ diff --git a/3party/boost/boost/heap/detail/ordered_adaptor_iterator.hpp b/3party/boost/boost/heap/detail/ordered_adaptor_iterator.hpp new file mode 100644 index 0000000000..e2f166f85e --- /dev/null +++ b/3party/boost/boost/heap/detail/ordered_adaptor_iterator.hpp @@ -0,0 +1,146 @@ +// boost heap: ordered iterator helper classes for container adaptors +// +// Copyright (C) 2011 Tim Blechmann +// +// 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 BOOST_HEAP_DETAIL_ORDERED_ADAPTOR_ITERATOR_HPP +#define BOOST_HEAP_DETAIL_ORDERED_ADAPTOR_ITERATOR_HPP + +#include +#include + +#include +#include +#include +#include + +namespace boost { +namespace heap { +namespace detail { + +/* ordered iterator helper classes for container adaptors + * + * Requirements for Dispatcher: + * + * * static size_type max_index(const ContainerType * heap); // return maximum index + * * static bool is_leaf(const ContainerType * heap, size_type index); // return if index denotes a leaf + * * static std::pair get_child_nodes(const ContainerType * heap, size_type index); // get index range of child nodes + * * static internal_type const & get_internal_value(const ContainerType * heap, size_type index); // get internal value at index + * * static value_type const & get_value(internal_type const & arg) const; // get value_type from internal_type + * + * */ +template +class ordered_adaptor_iterator: + public boost::iterator_facade, + ValueType, + boost::forward_traversal_tag + >, + Dispatcher +{ + friend class boost::iterator_core_access; + + struct compare_by_heap_value: + ValueCompare + { + const ContainerType * container; + + compare_by_heap_value (const ContainerType * container, ValueCompare const & cmp): + ValueCompare(cmp), container(container) + {} + + bool operator()(size_t lhs, size_t rhs) + { + assert(lhs <= Dispatcher::max_index(container)); + assert(rhs <= Dispatcher::max_index(container)); + return ValueCompare::operator()(Dispatcher::get_internal_value(container, lhs), + Dispatcher::get_internal_value(container, rhs)); + } + }; + + const ContainerType * container; + size_t current_index; // current index: special value -1 denotes `end' iterator + +public: + ordered_adaptor_iterator(void): + container(NULL), current_index(std::numeric_limits::max()), + unvisited_nodes(compare_by_heap_value(NULL, ValueCompare())) + {} + + ordered_adaptor_iterator(const ContainerType * container, ValueCompare const & cmp): + container(container), current_index(container->size()), + unvisited_nodes(compare_by_heap_value(container, ValueCompare())) + {} + + ordered_adaptor_iterator(size_t initial_index, const ContainerType * container, ValueCompare const & cmp): + container(container), current_index(initial_index), + unvisited_nodes(compare_by_heap_value(container, cmp)) + { + discover_nodes(initial_index); + } + +private: + bool equal (ordered_adaptor_iterator const & rhs) const + { + if (current_index != rhs.current_index) + return false; + + if (container != rhs.container) // less likely than first check + return false; + + return true; + } + + void increment(void) + { + if (unvisited_nodes.empty()) + current_index = Dispatcher::max_index(container) + 1; + else { + current_index = unvisited_nodes.top(); + unvisited_nodes.pop(); + discover_nodes(current_index); + } + } + + ValueType const & dereference() const + { + BOOST_ASSERT(current_index <= Dispatcher::max_index(container)); + return Dispatcher::get_value(Dispatcher::get_internal_value(container, current_index)); + } + + void discover_nodes(size_t index) + { + if (Dispatcher::is_leaf(container, index)) + return; + + std::pair child_range = Dispatcher::get_child_nodes(container, index); + + for (size_t i = child_range.first; i <= child_range.second; ++i) + unvisited_nodes.push(i); + } + + std::priority_queue::other >, + compare_by_heap_value + > unvisited_nodes; +}; + + +} /* namespace detail */ +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_DETAIL_ORDERED_ADAPTOR_ITERATOR_HPP */ diff --git a/3party/boost/boost/heap/detail/stable_heap.hpp b/3party/boost/boost/heap/detail/stable_heap.hpp new file mode 100644 index 0000000000..f9101afd10 --- /dev/null +++ b/3party/boost/boost/heap/detail/stable_heap.hpp @@ -0,0 +1,476 @@ +// boost heap: helper classes for stable priority queues +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_DETAIL_STABLE_HEAP_HPP +#define BOOST_HEAP_DETAIL_STABLE_HEAP_HPP + +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace boost { +namespace heap { +namespace detail { + + +template +struct size_holder +{ + static const bool constant_time_size = ConstantSize; + typedef SizeType size_type; + + size_holder(void): + size_(0) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + size_holder(size_holder && rhs): + size_(rhs.size_) + { + rhs.size_ = 0; + } + + size_holder(size_holder const & rhs): + size_(rhs.size_) + {} + + size_holder & operator=(size_holder && rhs) + { + size_ = rhs.size_; + rhs.size_ = 0; + return *this; + } + + size_holder & operator=(size_holder const & rhs) + { + size_ = rhs.size_; + return *this; + } +#endif + + SizeType get_size() const + { return size_; } + + void set_size(SizeType size) + { size_ = size; } + + void decrement() + { --size_; } + + void increment() + { ++size_; } + + void add(SizeType value) + { size_ += value; } + + void sub(SizeType value) + { size_ -= value; } + + void swap(size_holder & rhs) + { std::swap(size_, rhs.size_); } + + SizeType size_; +}; + +template +struct size_holder +{ + static const bool constant_time_size = false; + typedef SizeType size_type; + + size_holder(void) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + size_holder(size_holder && rhs) + {} + + size_holder(size_holder const & rhs) + {} + + size_holder & operator=(size_holder && rhs) + { + return *this; + } + + size_holder & operator=(size_holder const & rhs) + { + return *this; + } +#endif + + size_type get_size() const + { return 0; } + + void set_size(size_type) + {} + + void decrement() + {} + + void increment() + {} + + void add(SizeType value) + {} + + void sub(SizeType value) + {} + + void swap(size_holder & rhs) + {} +}; + +template +struct heap_base: + Cmp, + size_holder +{ + typedef StabilityCounterType stability_counter_type; + typedef T value_type; + typedef T internal_type; + typedef size_holder size_holder_type; + typedef Cmp value_compare; + typedef Cmp internal_compare; + static const bool is_stable = stable; + + heap_base (Cmp const & cmp = Cmp()): + Cmp(cmp) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + heap_base(heap_base && rhs): + Cmp(std::move(static_cast(rhs))), + size_holder_type(std::move(static_cast(rhs))) + {} + + heap_base(heap_base const & rhs): + Cmp(static_cast(rhs)), + size_holder_type(static_cast(rhs)) + {} + + heap_base & operator=(heap_base && rhs) + { + Cmp::operator=(std::move(static_cast(rhs))); + size_holder_type::operator=(std::move(static_cast(rhs))); + return *this; + } + + heap_base & operator=(heap_base const & rhs) + { + Cmp::operator=(static_cast(rhs)); + size_holder_type::operator=(static_cast(rhs)); + return *this; + } +#endif + + bool operator()(internal_type const & lhs, internal_type const & rhs) const + { + return Cmp::operator()(lhs, rhs); + } + + internal_type make_node(T const & val) + { + return val; + } + +#ifdef BOOST_HAS_RVALUE_REFS + T && make_node(T && val) + { + return std::forward(val); + } +#endif + + static T & get_value(internal_type & val) + { + return val; + } + + static T const & get_value(internal_type const & val) + { + return val; + } + + Cmp const & value_comp(void) const + { + return *this; + } + + Cmp const & get_internal_cmp(void) const + { + return *this; + } + + void swap(heap_base & rhs) + { + std::swap(static_cast(*this), static_cast(rhs)); + size_holder::swap(rhs); + } + + stability_counter_type get_stability_count(void) const + { + return 0; + } + + void set_stability_count(stability_counter_type) + {} + + template + friend struct heap_merge_emulate; +}; + +template +struct heap_base: + Cmp, + size_holder +{ + typedef StabilityCounterType stability_counter_type; + typedef T value_type; + typedef std::pair internal_type; + typedef size_holder size_holder_type; + typedef Cmp value_compare; + + heap_base (Cmp const & cmp = Cmp()): + Cmp(cmp), counter_(0) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + heap_base(heap_base && rhs): + Cmp(std::move(static_cast(rhs))), + size_holder_type(std::move(static_cast(rhs))), counter_(rhs.counter_) + { + rhs.counter_ = 0; + } + + heap_base(heap_base & rhs): + Cmp(static_cast(rhs)), + size_holder_type(static_cast(rhs)), counter_(rhs.counter_) + {} + + heap_base & operator=(heap_base && rhs) + { + Cmp::operator=(std::move(static_cast(rhs))); + size_holder_type::operator=(std::move(static_cast(rhs))); + + counter_ = rhs.counter_; + rhs.counter_ = 0; + return *this; + } + + heap_base & operator=(heap_base const & rhs) + { + Cmp::operator=(static_cast(rhs)); + size_holder_type::operator=(static_cast(rhs)); + + counter_ = rhs.counter_; + return *this; + } + +#endif + + bool operator()(internal_type const & lhs, internal_type const & rhs) const + { + internal_compare cmp(get_internal_cmp()); + return cmp(lhs, rhs); + } + + bool operator()(T const & lhs, T const & rhs) const + { + return Cmp::operator()(lhs, rhs); + } + + internal_type make_node(T const & val) + { + stability_counter_type count = ++counter_; + if (counter_ == std::numeric_limits::max()) + BOOST_THROW_EXCEPTION(std::runtime_error("boost::heap counter overflow")); + return std::make_pair(val, count); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + internal_type make_node(Args&&... args) + { + stability_counter_type count = ++counter_; + if (counter_ == std::numeric_limits::max()) + BOOST_THROW_EXCEPTION(std::runtime_error("boost::heap counter overflow")); + return std::make_pair(std::forward(args)..., count); + } +#endif + + static T & get_value(internal_type & val) + { + return val.first; + } + + static T const & get_value(internal_type const & val) + { + return val.first; + } + + Cmp const & value_comp(void) const + { + return *this; + } + + struct internal_compare: + Cmp + { + internal_compare(Cmp const & cmp = Cmp()): + Cmp(cmp) + {} + + bool operator()(internal_type const & lhs, internal_type const & rhs) const + { + if (Cmp::operator()(lhs.first, rhs.first)) + return true; + + if (Cmp::operator()(rhs.first, lhs.first)) + return false; + + return lhs.second > rhs.second; + } + }; + + internal_compare get_internal_cmp(void) const + { + return internal_compare(*this); + } + + void swap(heap_base & rhs) + { + std::swap(static_cast(*this), static_cast(rhs)); + std::swap(counter_, rhs.counter_); + size_holder::swap(rhs); + } + + stability_counter_type get_stability_count(void) const + { + return counter_; + } + + void set_stability_count(stability_counter_type new_count) + { + counter_ = new_count; + } + + template + friend struct heap_merge_emulate; + +private: + stability_counter_type counter_; +}; + +template +struct node_handle +{ + explicit node_handle(node_pointer n = 0): + node_(n) + {} + + reference operator*() const + { + return extractor::get_value(node_->value); + } + + node_pointer node_; +}; + +template +struct value_extractor +{ + value_type const & operator()(internal_type const & data) const + { + return extractor::get_value(data); + } +}; + +template +class stable_heap_iterator: + public boost::iterator_adaptor, + ContainerIterator, + T const, + boost::random_access_traversal_tag> +{ + typedef boost::iterator_adaptor super_t; + +public: + stable_heap_iterator(void): + super_t(0) + {} + + explicit stable_heap_iterator(ContainerIterator const & it): + super_t(it) + {} + +private: + friend class boost::iterator_core_access; + + T const & dereference() const + { + return Extractor::get_value(*super_t::base()); + } +}; + +template +struct make_heap_base +{ + typedef typename parameter::binding >::type compare_argument; + typedef typename parameter::binding >::type allocator_argument; + typedef typename parameter::binding::type stability_counter_type; + + static const bool is_stable = extract_stable::value; + + typedef heap_base type; +}; + + +template +struct extract_allocator_types +{ + typedef typename Alloc::size_type size_type; + typedef typename Alloc::difference_type difference_type; + typedef typename Alloc::reference reference; + typedef typename Alloc::const_reference const_reference; + typedef typename Alloc::pointer pointer; + typedef typename Alloc::const_pointer const_pointer; +}; + + +} /* namespace detail */ +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_DETAIL_STABLE_HEAP_HPP */ diff --git a/3party/boost/boost/heap/detail/tree_iterator.hpp b/3party/boost/boost/heap/detail/tree_iterator.hpp new file mode 100644 index 0000000000..83c8d3fb4c --- /dev/null +++ b/3party/boost/boost/heap/detail/tree_iterator.hpp @@ -0,0 +1,393 @@ +// boost heap: node tree iterator helper classes +// +// Copyright (C) 2010 Tim Blechmann +// +// 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) + +// Disclaimer: Not a Boost library. + +#ifndef BOOST_HEAP_DETAIL_TREE_ITERATOR_HPP +#define BOOST_HEAP_DETAIL_TREE_ITERATOR_HPP + +#include +#include + +#include +#include + +namespace boost { +namespace heap { +namespace detail { + + +template +struct identity: + public std::unary_function +{ + type& operator()(type& x) const + { return x; } + + const type& operator()(const type& x) const + { return x; } +}; + +template +struct caster: + public std::unary_function +{ + template + type& operator()(U& x) const + { return static_cast(x); } + + template + const type& operator()(const U& x) const + { return static_cast(x); } +}; + +template +struct dereferencer +{ + template + Node * operator()(Iterator const & it) + { + return static_cast(*it); + } +}; + +template +struct pointer_to_reference +{ + template + const Node * operator()(Iterator const & it) + { + return static_cast(&*it); + } +}; + + +template +struct unordered_tree_iterator_storage +{ + unordered_tree_iterator_storage(ValueCompare const & cmp) + {} + + void push(HandleType h) + { + data_.push_back(h); + } + + HandleType const & top(void) + { + return data_.back(); + } + + void pop(void) + { + data_.pop_back(); + } + + bool empty(void) const + { + return data_.empty(); + } + + std::vector::other > data_; +}; + +template +struct ordered_tree_iterator_storage: + ValueExtractor +{ + struct compare_values_by_handle: + ValueExtractor, + ValueCompare + { + compare_values_by_handle(ValueCompare const & cmp): + ValueCompare(cmp) + {} + + bool operator()(HandleType const & lhs, HandleType const & rhs) const + { + ValueType const & lhs_value = ValueExtractor::operator()(lhs->value); + ValueType const & rhs_value = ValueExtractor::operator()(rhs->value); + return ValueCompare::operator()(lhs_value, rhs_value); + } + }; + + ordered_tree_iterator_storage(ValueCompare const & cmp): + data_(compare_values_by_handle(cmp)) + {} + + void push(HandleType h) + { + data_.push(h); + } + + void pop(void) + { + data_.pop(); + } + + HandleType const & top(void) + { + return data_.top(); + } + + bool empty(void) const + { + return data_.empty(); + } + + std::priority_queue::other>, + compare_values_by_handle> data_; +}; + + +/* tree iterator helper class + * + * Requirements: + * Node provides child_iterator + * ValueExtractor can convert Node->value to ValueType + * + * */ +template , + typename ValueExtractor = identity, + typename PointerExtractor = dereferencer, + bool check_null_pointer = false, + bool ordered_iterator = false, + typename ValueCompare = std::less + > +class tree_iterator: + public boost::iterator_adaptor, + const Node *, + ValueType, + boost::forward_traversal_tag + >, + ValueExtractor, + PointerExtractor +{ + typedef boost::iterator_adaptor, + const Node *, + ValueType, + boost::forward_traversal_tag + > adaptor_type; + + friend class boost::iterator_core_access; + + typedef typename boost::mpl::if_c< ordered_iterator, + ordered_tree_iterator_storage, + unordered_tree_iterator_storage + >::type + unvisited_node_container; + +public: + tree_iterator(void): + adaptor_type(0), unvisited_nodes(ValueCompare()) + {} + + tree_iterator(ValueCompare const & cmp): + adaptor_type(0), unvisited_nodes(cmp) + {} + + tree_iterator(const Node * it, ValueCompare const & cmp): + adaptor_type(it), unvisited_nodes(cmp) + { + if (it) + discover_nodes(it); + } + + /* fills the iterator from a list of possible top nodes */ + template + tree_iterator(NodePointerIterator begin, NodePointerIterator end, const Node * top_node, ValueCompare const & cmp): + adaptor_type(0), unvisited_nodes(cmp) + { + BOOST_STATIC_ASSERT(ordered_iterator); + if (begin == end) + return; + + adaptor_type::base_reference() = top_node; + discover_nodes(top_node); + + for (NodePointerIterator it = begin; it != end; ++it) { + const Node * current_node = static_cast(&*it); + if (current_node != top_node) + unvisited_nodes.push(current_node); + } + } + + bool operator!=(tree_iterator const & rhs) const + { + return adaptor_type::base() != rhs.base(); + } + + bool operator==(tree_iterator const & rhs) const + { + return !operator!=(rhs); + } + + const Node * get_node() const + { + return adaptor_type::base_reference(); + } + +private: + void increment(void) + { + if (unvisited_nodes.empty()) + adaptor_type::base_reference() = 0; + else { + const Node * next = unvisited_nodes.top(); + unvisited_nodes.pop(); + discover_nodes(next); + adaptor_type::base_reference() = next; + } + } + + ValueType const & dereference() const + { + return ValueExtractor::operator()(adaptor_type::base_reference()->value); + } + + void discover_nodes(const Node * n) + { + for (typename Node::const_child_iterator it = n->children.begin(); it != n->children.end(); ++it) { + const Node * n = PointerExtractor::operator()(it); + if (check_null_pointer && n == NULL) + continue; + unvisited_nodes.push(n); + } + } + + unvisited_node_container unvisited_nodes; +}; + +template +struct list_iterator_converter +{ + typename NodeList::const_iterator operator()(const Node * node) + { + return NodeList::s_iterator_to(*node); + } + + Node * operator()(typename NodeList::const_iterator it) + { + return const_cast(static_cast(&*it)); + } +}; + +template , + typename IteratorCoverter = identity + > +class recursive_tree_iterator: + public boost::iterator_adaptor, + NodeIterator, + ValueType const, + boost::bidirectional_traversal_tag>, + ValueExtractor, IteratorCoverter +{ + typedef boost::iterator_adaptor, + NodeIterator, + ValueType const, + boost::bidirectional_traversal_tag> adaptor_type; + + friend class boost::iterator_core_access; + + +public: + recursive_tree_iterator(void): + adaptor_type(0) + {} + + explicit recursive_tree_iterator(NodeIterator const & it): + adaptor_type(it) + {} + + void increment(void) + { + NodeIterator next = adaptor_type::base_reference(); + + const Node * n = get_node(next); + if (n->children.empty()) { + const Node * parent = get_node(next)->get_parent(); + + ++next; + + while (true) { + if (parent == NULL || next != parent->children.end()) + break; + + next = IteratorCoverter::operator()(parent); + parent = get_node(next)->get_parent(); + ++next; + } + } else + next = n->children.begin(); + + adaptor_type::base_reference() = next; + return; + } + + ValueType const & dereference() const + { + return ValueExtractor::operator()(get_node(adaptor_type::base_reference())->value); + } + + static const Node * get_node(NodeIterator const & it) + { + return static_cast(&*it); + } + + const Node * get_node() const + { + return get_node(adaptor_type::base_reference()); + } +}; + + +} /* namespace detail */ +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_DETAIL_TREE_ITERATOR_HPP */ diff --git a/3party/boost/boost/heap/fibonacci_heap.hpp b/3party/boost/boost/heap/fibonacci_heap.hpp new file mode 100644 index 0000000000..76d1cfae65 --- /dev/null +++ b/3party/boost/boost/heap/fibonacci_heap.hpp @@ -0,0 +1,769 @@ +// boost heap: fibonacci heap +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_FIBONACCI_HEAP_HPP +#define BOOST_HEAP_FIBONACCI_HEAP_HPP + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#ifndef BOOST_DOXYGEN_INVOKED +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif +#endif + +namespace boost { +namespace heap { +namespace detail { + +typedef parameter::parameters, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional + > fibonacci_heap_signature; + +template +struct make_fibonacci_heap_base +{ + static const bool constant_time_size = parameter::binding::type::value; + + typedef typename detail::make_heap_base::type base_type; + typedef typename detail::make_heap_base::allocator_argument allocator_argument; + typedef typename detail::make_heap_base::compare_argument compare_argument; + typedef marked_heap_node node_type; + + typedef typename allocator_argument::template rebind::other allocator_type; + + struct type: + base_type, + allocator_type + { + type(compare_argument const & arg): + base_type(arg) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + type(type && rhs): + base_type(std::move(static_cast(rhs))), + allocator_type(std::move(static_cast(rhs))) + {} + + type(type & rhs): + base_type(static_cast(rhs)), + allocator_type(static_cast(rhs)) + {} + + type & operator=(type && rhs) + { + base_type::operator=(std::move(static_cast(rhs))); + allocator_type::operator=(std::move(static_cast(rhs))); + return *this; + } + + type & operator=(type const & rhs) + { + base_type::operator=(static_cast(rhs)); + allocator_type::operator=(static_cast(rhs)); + return *this; + } +#endif + }; +}; + +} + + + +/** + * \class fibonacci_heap + * \brief fibonacci heap + * + * The template parameter T is the type to be managed by the container. + * The user can specify additional options and if no options are provided default options are used. + * + * The container supports the following options: + * - \c boost::heap::stable<>, defaults to \c stable + * - \c boost::heap::compare<>, defaults to \c compare > + * - \c boost::heap::allocator<>, defaults to \c allocator > + * - \c boost::heap::constant_time_size<>, defaults to \c constant_time_size + * - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type + * + */ +#ifdef BOOST_DOXYGEN_INVOKED +template +#else +template +#endif +class fibonacci_heap: + private detail::make_fibonacci_heap_base::type + >::type +{ + typedef typename detail::fibonacci_heap_signature::bind::type bound_args; + typedef detail::make_fibonacci_heap_base base_maker; + typedef typename base_maker::type super_t; + + typedef typename super_t::size_holder_type size_holder; + typedef typename super_t::internal_type internal_type; + typedef typename base_maker::allocator_argument allocator_argument; + + template + friend struct heap_merge_emulate; + +private: +#ifndef BOOST_DOXYGEN_INVOKED + struct implementation_defined: + detail::extract_allocator_types + { + typedef T value_type; + typedef typename detail::extract_allocator_types::size_type size_type; + typedef typename detail::extract_allocator_types::reference reference; + + typedef typename base_maker::compare_argument value_compare; + typedef typename base_maker::allocator_type allocator_type; + + typedef typename allocator_type::pointer node_pointer; + typedef typename allocator_type::const_pointer const_node_pointer; + + typedef detail::heap_node_list node_list_type; + typedef typename node_list_type::iterator node_list_iterator; + typedef typename node_list_type::const_iterator node_list_const_iterator; + + typedef typename base_maker::node_type node; + + typedef detail::value_extractor value_extractor; + typedef typename super_t::internal_compare internal_compare; + typedef detail::node_handle handle_type; + + typedef detail::recursive_tree_iterator + > iterator; + typedef iterator const_iterator; + + typedef detail::tree_iterator, + true, + true, + value_compare + > ordered_iterator; + }; + + typedef typename implementation_defined::node node; + typedef typename implementation_defined::node_pointer node_pointer; + typedef typename implementation_defined::node_list_type node_list_type; + typedef typename implementation_defined::node_list_iterator node_list_iterator; + typedef typename implementation_defined::node_list_const_iterator node_list_const_iterator; + typedef typename implementation_defined::internal_compare internal_compare; +#endif + +public: + typedef T value_type; + + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + /// \copydoc boost::heap::priority_queue::iterator + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + typedef typename implementation_defined::ordered_iterator ordered_iterator; + + typedef typename implementation_defined::handle_type handle_type; + + static const bool constant_time_size = base_maker::constant_time_size; + static const bool has_ordered_iterators = true; + static const bool is_mergable = true; + static const bool is_stable = detail::extract_stable::value; + static const bool has_reserve = false; + + /// \copydoc boost::heap::priority_queue::priority_queue(value_compare const &) + explicit fibonacci_heap(value_compare const & cmp = value_compare()): + super_t(cmp), top_element(0) + {} + + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue const &) + fibonacci_heap(fibonacci_heap const & rhs): + super_t(rhs), top_element(0) + { + if (rhs.empty()) + return; + + clone_forest(rhs); + size_holder::set_size(rhs.size()); + } + +#ifdef BOOST_HAS_RVALUE_REFS + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue &&) + fibonacci_heap(fibonacci_heap && rhs): + super_t(std::move(rhs)), top_element(rhs.top_element) + { + roots.splice(roots.begin(), rhs.roots); + rhs.top_element = NULL; + } + + fibonacci_heap(fibonacci_heap & rhs): + super_t(rhs), top_element(rhs.top_element) + { + roots.splice(roots.begin(), rhs.roots); + rhs.top_element = NULL; + } + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue &&) + fibonacci_heap & operator=(fibonacci_heap && rhs) + { + clear(); + + super_t::operator=(std::move(rhs)); + roots.splice(roots.begin(), rhs.roots); + top_element = rhs.top_element; + rhs.top_element = NULL; + return *this; + } +#endif + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue const &) + fibonacci_heap & operator=(fibonacci_heap const & rhs) + { + clear(); + size_holder::set_size(rhs.size()); + static_cast(*this) = rhs; + + if (rhs.empty()) + top_element = NULL; + else + clone_forest(rhs); + return *this; + } + + ~fibonacci_heap(void) + { + clear(); + } + + /// \copydoc boost::heap::priority_queue::empty + bool empty(void) const + { + if (constant_time_size) + return size() == 0; + else + return roots.empty(); + } + + /// \copydoc boost::heap::priority_queue::size + size_type size(void) const + { + if (constant_time_size) + return size_holder::get_size(); + + if (empty()) + return 0; + else + return detail::count_list_nodes(roots); + } + + /// \copydoc boost::heap::priority_queue::max_size + size_type max_size(void) const + { + return allocator_type::max_size(); + } + + /// \copydoc boost::heap::priority_queue::clear + void clear(void) + { + typedef detail::node_disposer disposer; + roots.clear_and_dispose(disposer(*this)); + + size_holder::set_size(0); + top_element = NULL; + } + + /// \copydoc boost::heap::priority_queue::get_allocator + allocator_type get_allocator(void) const + { + return *this; + } + + /// \copydoc boost::heap::priority_queue::swap + void swap(fibonacci_heap & rhs) + { + super_t::swap(rhs); + std::swap(top_element, rhs.top_element); + roots.swap(rhs.roots); + } + + + /// \copydoc boost::heap::priority_queue::top + value_type const & top(void) const + { + BOOST_ASSERT(!empty()); + + return super_t::get_value(top_element->value); + } + + /** + * \b Effects: Adds a new element to the priority queue. Returns handle to element + * + * \b Complexity: Constant. + * + * \b Note: Does not invalidate iterators. + * + * */ + handle_type push(value_type const & v) + { + size_holder::increment(); + + node_pointer n = allocator_type::allocate(1); + + new(n) node(super_t::make_node(v)); + roots.push_front(*n); + + if (!top_element || super_t::operator()(top_element->value, n->value)) + top_element = n; + return handle_type(n); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + /** + * \b Effects: Adds a new element to the priority queue. The element is directly constructed in-place. Returns handle to element. + * + * \b Complexity: Constant. + * + * \b Note: Does not invalidate iterators. + * + * */ + template + handle_type emplace(Args&&... args) + { + size_holder::increment(); + + node_pointer n = allocator_type::allocate(1); + + new(n) node(super_t::make_node(std::forward(args)...)); + roots.push_front(*n); + + if (!top_element || super_t::operator()(top_element->value, n->value)) + top_element = n; + return handle_type(n); + } +#endif + + /** + * \b Effects: Removes the top element from the priority queue. + * + * \b Complexity: Logarithmic (amortized). Linear (worst case). + * + * */ + void pop(void) + { + BOOST_ASSERT(!empty()); + + node_pointer element = top_element; + roots.erase(node_list_type::s_iterator_to(*element)); + + add_children_to_root(element); + + element->~node(); + allocator_type::deallocate(element, 1); + + size_holder::decrement(); + if (!empty()) + consolidate(); + else + top_element = NULL; + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic if current value < v, Constant otherwise. + * + * */ + void update (handle_type handle, const_reference v) + { + if (super_t::operator()(super_t::get_value(handle.node_->value), v)) + increase(handle, v); + else + decrease(handle, v); + } + + /** \copydoc boost::heap::fibonacci_heap::update(handle_type, const_reference) + * + * \b Rationale: The lazy update function is a modification of the traditional update, that just invalidates + * the iterator the the object referred to by the handle. + * */ + void update_lazy(handle_type handle, const_reference v) + { + handle.node_->value = super_t::make_node(v); + update_lazy(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void update (handle_type handle) + { + node_pointer n = handle.node_; + node_pointer parent = n->get_parent(); + + if (parent) { + n->parent = NULL; + roots.splice(roots.begin(), parent->children, node_list_type::s_iterator_to(*n)); + } + add_children_to_root(n); + consolidate(); + } + + /** \copydoc boost::heap::fibonacci_heap::update (handle_type handle) + * + * \b Rationale: The lazy update function is a modification of the traditional update, that just invalidates + * the iterator the the object referred to by the handle. + * */ + void update_lazy (handle_type handle) + { + node_pointer n = handle.node_; + node_pointer parent = n->get_parent(); + + if (parent) { + n->parent = NULL; + roots.splice(roots.begin(), parent->children, node_list_type::s_iterator_to(*n)); + } + add_children_to_root(n); + } + + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Constant. + * + * \b Note: The new value is expected to be greater than the current one + * */ + void increase (handle_type handle, const_reference v) + { + handle.node_->value = super_t::make_node(v); + increase(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Constant. + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void increase (handle_type handle) + { + node_pointer n = handle.node_; + + if (n->parent) { + if (super_t::operator()(n->get_parent()->value, n->value)) { + node_pointer parent = n->get_parent(); + cut(n); + cascading_cut(parent); + } + } + + if (super_t::operator()(top_element->value, n->value)) { + top_element = n; + return; + } + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one + * */ + void decrease (handle_type handle, const_reference v) + { + handle.node_->value = super_t::make_node(v); + decrease(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic. + * + * \b Note: The new value is expected to be less than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void decrease (handle_type handle) + { + update(handle); + } + + /** + * \b Effects: Removes the element handled by \c handle from the priority_queue. + * + * \b Complexity: Logarithmic. + * */ + void erase(handle_type const & handle) + { + node_pointer n = handle.node_; + node_pointer parent = n->get_parent(); + + if (parent) + parent->children.erase(node_list_type::s_iterator_to(*n)); + else + roots.erase(node_list_type::s_iterator_to(*n)); + + add_children_to_root(n); + consolidate(); + + n->~node(); + allocator_type::deallocate(n, 1); + + size_holder::decrement(); + } + + /// \copydoc boost::heap::priority_queue::begin + iterator begin(void) const + { + return iterator(roots.begin()); + } + + /// \copydoc boost::heap::priority_queue::end + iterator end(void) const + { + return iterator(roots.end()); + } + + + /** + * \b Effects: Returns an ordered iterator to the first element contained in the priority queue. + * + * \b Note: Ordered iterators traverse the priority queue in heap order. + * */ + ordered_iterator ordered_begin(void) const + { + return ordered_iterator(roots.begin(), roots.end(), top_element, super_t::value_comp()); + } + + /** + * \b Effects: Returns an ordered iterator to the first element contained in the priority queue. + * + * \b Note: Ordered iterators traverse the priority queue in heap order. + * */ + ordered_iterator ordered_end(void) const + { + return ordered_iterator(NULL, super_t::value_comp()); + } + + /** + * \b Effects: Merge with priority queue rhs. + * + * \b Complexity: Constant. + * + * */ + void merge(fibonacci_heap & rhs) + { + size_holder::add(rhs.get_size()); + + if (!top_element || + (rhs.top_element && super_t::operator()(top_element->value, rhs.top_element->value))) + top_element = rhs.top_element; + + roots.splice(roots.end(), rhs.roots); + + rhs.set_size(0); + + super_t::set_stability_count(std::max(super_t::get_stability_count(), + rhs.get_stability_count())); + rhs.set_stability_count(0); + } + + /// \copydoc boost::heap::d_ary_heap_mutable::s_handle_from_iterator + static handle_type s_handle_from_iterator(iterator const & it) + { + node * ptr = const_cast(it.get_node()); + return handle_type(ptr); + } + + /// \copydoc boost::heap::priority_queue::value_comp + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } + + /// \copydoc boost::heap::priority_queue::operator<(HeapType const & rhs) const + template + bool operator<(HeapType const & rhs) const + { + return detail::heap_compare(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator>(HeapType const & rhs) const + template + bool operator>(HeapType const & rhs) const + { + return detail::heap_compare(rhs, *this); + } + + /// \copydoc boost::heap::priority_queue::operator>=(HeapType const & rhs) const + template + bool operator>=(HeapType const & rhs) const + { + return !operator<(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator<=(HeapType const & rhs) const + template + bool operator<=(HeapType const & rhs) const + { + return !operator>(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator==(HeapType const & rhs) const + template + bool operator==(HeapType const & rhs) const + { + return detail::heap_equality(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator!=(HeapType const & rhs) const + template + bool operator!=(HeapType const & rhs) const + { + return !(*this == rhs); + } + +private: +#if !defined(BOOST_DOXYGEN_INVOKED) + void clone_forest(fibonacci_heap const & rhs) + { + BOOST_HEAP_ASSERT(roots.empty()); + typedef typename node::template node_cloner node_cloner; + roots.clone_from(rhs.roots, node_cloner(*this, NULL), detail::nop_disposer()); + + top_element = detail::find_max_child(roots, super_t::get_internal_cmp()); + } + + void cut(node_pointer n) + { + node_pointer parent = n->get_parent(); + roots.splice(roots.begin(), parent->children, node_list_type::s_iterator_to(*n)); + n->parent = 0; + n->mark = false; + } + + void cascading_cut(node_pointer n) + { + node_pointer parent = n->get_parent(); + + if (parent) { + if (!parent->mark) + parent->mark = true; + else { + cut(n); + cascading_cut(parent); + } + } + } + + void add_children_to_root(node_pointer n) + { + for (node_list_iterator it = n->children.begin(); it != n->children.end(); ++it) { + node_pointer child = static_cast(&*it); + child->parent = 0; + } + + roots.splice(roots.end(), n->children); + } + + void consolidate(void) + { + if (roots.empty()) + return; + + static const size_type max_log2 = sizeof(size_type) * 8; + boost::array aux; + aux.assign(NULL); + + node_list_iterator it = roots.begin(); + top_element = static_cast(&*it); + + do { + node_pointer n = static_cast(&*it); + ++it; + size_type node_rank = n->child_count(); + + if (aux[node_rank] == NULL) + aux[node_rank] = n; + else { + do { + node_pointer other = aux[node_rank]; + if (super_t::operator()(n->value, other->value)) + std::swap(n, other); + + if (other->parent) + n->children.splice(n->children.end(), other->parent->children, node_list_type::s_iterator_to(*other)); + else + n->children.splice(n->children.end(), roots, node_list_type::s_iterator_to(*other)); + + other->parent = n; + + aux[node_rank] = NULL; + node_rank = n->child_count(); + } while (aux[node_rank] != NULL); + aux[node_rank] = n; + } + + if (super_t::operator()(top_element->value, n->value)) + top_element = n; + } + while (it != roots.end()); + } + + mutable node_pointer top_element; + node_list_type roots; +#endif +}; + +} /* namespace heap */ +} /* namespace boost */ + +#undef BOOST_HEAP_ASSERT + +#endif /* BOOST_HEAP_FIBONACCI_HEAP_HPP */ diff --git a/3party/boost/boost/heap/heap_concepts.hpp b/3party/boost/boost/heap/heap_concepts.hpp new file mode 100644 index 0000000000..f7a6d1bcd7 --- /dev/null +++ b/3party/boost/boost/heap/heap_concepts.hpp @@ -0,0 +1,103 @@ +// boost heap: concepts +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_CONCEPTS_HPP +#define BOOST_HEAP_CONCEPTS_HPP + +#include + +namespace boost { +namespace heap { + + +template +struct PriorityQueue: + boost::ForwardContainer +{ + typedef typename C::iterator iterator; + typedef typename C::const_iterator const_iterator; + typedef typename C::allocator_type allocator_type; + typedef typename C::value_compare value_compare; + typedef typename C::value_type value_type; + typedef typename C::const_reference const_reference; + + + BOOST_CONCEPT_USAGE(PriorityQueue) + { + BOOST_CONCEPT_ASSERT((boost::Assignable)); + BOOST_CONCEPT_ASSERT((boost::Container)); + BOOST_CONCEPT_ASSERT((boost::EqualityComparable)); + BOOST_CONCEPT_ASSERT((boost::Comparable)); + + BOOST_CONCEPT_ASSERT((boost::Const_BinaryPredicate)); + + c.swap(c2); + c.clear(); + a = c.get_allocator(); + + typename PriorityQueue::value_type v; + c.push(v); + + v = c.top(); + c.pop(); + + cmp = c.value_comp(); + + // verify tags + has_ordered_iterators = C::has_ordered_iterators; + is_mergable = C::is_mergable; + is_stable = C::is_stable; + } + +private: + C c, c2; + allocator_type a; + typename C::value_type v; + value_compare cmp; + bool has_ordered_iterators, is_mergable, is_stable; +}; + +template +struct MergablePriorityQueue: + PriorityQueue +{ + BOOST_CONCEPT_USAGE(MergablePriorityQueue) + { + C c, c2; + c.merge(c2); + } +}; + + +template +struct MutablePriorityQueue: + PriorityQueue +{ + typedef typename C::handle_type handle_type; + + BOOST_CONCEPT_USAGE(MutablePriorityQueue) + { + BOOST_CONCEPT_ASSERT((boost::Assignable)); + + typename MutablePriorityQueue::value_type v; + typename MutablePriorityQueue::handle_type h = c.push(v); + c.update(h, v); + c.increase(h, v); + c.decrease(h, v); + + c.update(h); + c.increase(h); + c.decrease(h); + } + + C c; +}; + +}} + +#endif /* BOOST_HEAP_CONCEPTS_HPP */ diff --git a/3party/boost/boost/heap/heap_merge.hpp b/3party/boost/boost/heap/heap_merge.hpp new file mode 100644 index 0000000000..192d0f9d32 --- /dev/null +++ b/3party/boost/boost/heap/heap_merge.hpp @@ -0,0 +1,125 @@ +// boost heap: heap merge algorithms +// +// Copyright (C) 2011 Tim Blechmann +// +// 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 BOOST_HEAP_MERGE_HPP +#define BOOST_HEAP_MERGE_HPP + +#include +#include +#include + +namespace boost { +namespace heap { +namespace detail { + +template +struct heap_merge_emulate +{ + struct dummy_reserver + { + static void reserve (Heap1 & lhs, std::size_t required_size) + {} + }; + + struct reserver + { + static void reserve (Heap1 & lhs, std::size_t required_size) + { + lhs.reserve(required_size); + } + }; + + typedef typename boost::mpl::if_c::type space_reserver; + + static void merge(Heap1 & lhs, Heap2 & rhs) + { + if (Heap1::constant_time_size && Heap2::constant_time_size) { + if (Heap1::has_reserve) { + std::size_t required_size = lhs.size() + rhs.size(); + space_reserver::reserve(lhs, required_size); + } + } + + // FIXME: container adaptors could benefit from first appending all elements and then restoring the heap order + // FIXME: optimize: if we have ordered iterators and we can efficiently insert keys with a below the lowest key in the heap + // d-ary, b and fibonacci heaps fall into this category + + while (!rhs.empty()) { + lhs.push(rhs.top()); + rhs.pop(); + } + + lhs.set_stability_count(std::max(lhs.get_stability_count(), + rhs.get_stability_count())); + rhs.set_stability_count(0); + } + +}; + + +template +struct heap_merge_same_mergable +{ + static void merge(Heap & lhs, Heap & rhs) + { + lhs.merge(rhs); + } +}; + + +template +struct heap_merge_same +{ + static const bool is_mergable = Heap::is_mergable; + typedef typename boost::mpl::if_c, + heap_merge_emulate + >::type heap_merger; + + static void merge(Heap & lhs, Heap & rhs) + { + heap_merger::merge(lhs, rhs); + } +}; + +} /* namespace detail */ + + +/** merge rhs into lhs + * + * \b Effect: lhs contains all elements that have been part of rhs, rhs is empty. + * + * */ +template +void heap_merge(Heap1 & lhs, Heap2 & rhs) +{ + BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue)); + BOOST_CONCEPT_ASSERT((boost::heap::PriorityQueue)); + + // if this assertion is triggered, the value_compare types are incompatible + BOOST_STATIC_ASSERT((boost::is_same::value)); + + const bool same_heaps = boost::is_same::value; + + typedef typename boost::mpl::if_c, + detail::heap_merge_emulate + >::type heap_merger; + + heap_merger::merge(lhs, rhs); +} + + +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_MERGE_HPP */ diff --git a/3party/boost/boost/heap/pairing_heap.hpp b/3party/boost/boost/heap/pairing_heap.hpp new file mode 100644 index 0000000000..238a9ff2c6 --- /dev/null +++ b/3party/boost/boost/heap/pairing_heap.hpp @@ -0,0 +1,707 @@ +// boost heap: pairing heap +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_PAIRING_HEAP_HPP +#define BOOST_HEAP_PAIRING_HEAP_HPP + +#include +#include + +#include + +#include +#include +#include +#include +#include + +#ifndef BOOST_DOXYGEN_INVOKED +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif +#endif + +namespace boost { +namespace heap { +namespace detail { + +typedef parameter::parameters, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional + > pairing_heap_signature; + +template +struct make_pairing_heap_base +{ + static const bool constant_time_size = parameter::binding::type::value; + typedef typename detail::make_heap_base::type base_type; + typedef typename detail::make_heap_base::allocator_argument allocator_argument; + typedef typename detail::make_heap_base::compare_argument compare_argument; + + typedef heap_node node_type; + + typedef typename allocator_argument::template rebind::other allocator_type; + + struct type: + base_type, + allocator_type + { + type(compare_argument const & arg): + base_type(arg) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + type(type const & rhs): + base_type(rhs), allocator_type(rhs) + {} + + type(type && rhs): + base_type(std::move(static_cast(rhs))), + allocator_type(std::move(static_cast(rhs))) + {} + + type & operator=(type && rhs) + { + base_type::operator=(std::move(static_cast(rhs))); + allocator_type::operator=(std::move(static_cast(rhs))); + return *this; + } + + type & operator=(type const & rhs) + { + base_type::operator=(static_cast(rhs)); + allocator_type::operator=(static_cast(rhs)); + return *this; + } +#endif + }; +}; + +} + +/** + * \class pairing_heap + * \brief pairing heap + * + * Pairing heaps are self-adjusting binary heaps. Although design and implementation are rather simple, + * the complexity analysis is yet unsolved. For details, consult: + * + * Pettie, Seth (2005), "Towards a final analysis of pairing heaps", + * Proc. 46th Annual IEEE Symposium on Foundations of Computer Science, pp. 174–183 + * + * The template parameter T is the type to be managed by the container. + * The user can specify additional options and if no options are provided default options are used. + * + * The container supports the following options: + * - \c boost::heap::compare<>, defaults to \c compare > + * - \c boost::heap::stable<>, defaults to \c stable + * - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type + * - \c boost::heap::allocator<>, defaults to \c allocator > + * - \c boost::heap::constant_time_size<>, defaults to \c constant_time_size + * + * + */ +#ifdef BOOST_DOXYGEN_INVOKED +template +#else +template +#endif +class pairing_heap: + private detail::make_pairing_heap_base::type + >::type +{ + typedef typename detail::pairing_heap_signature::bind::type bound_args; + typedef detail::make_pairing_heap_base base_maker; + typedef typename base_maker::type super_t; + + typedef typename super_t::internal_type internal_type; + typedef typename super_t::size_holder_type size_holder; + typedef typename base_maker::allocator_argument allocator_argument; + +private: + template + friend struct heap_merge_emulate; + +#ifndef BOOST_DOXYGEN_INVOKED + struct implementation_defined: + detail::extract_allocator_types + { + typedef T value_type; + typedef typename detail::extract_allocator_types::size_type size_type; + typedef typename detail::extract_allocator_types::reference reference; + + typedef typename base_maker::compare_argument value_compare; + typedef typename base_maker::allocator_type allocator_type; + + typedef typename allocator_type::pointer node_pointer; + typedef typename allocator_type::const_pointer const_node_pointer; + + typedef detail::heap_node_list node_list_type; + typedef typename node_list_type::iterator node_list_iterator; + typedef typename node_list_type::const_iterator node_list_const_iterator; + + typedef typename base_maker::node_type node; + + typedef detail::value_extractor value_extractor; + typedef typename super_t::internal_compare internal_compare; + typedef detail::node_handle handle_type; + + typedef detail::tree_iterator, + false, + false, + value_compare + > iterator; + + typedef iterator const_iterator; + + typedef detail::tree_iterator, + false, + true, + value_compare + > ordered_iterator; + }; + + typedef typename implementation_defined::node node; + typedef typename implementation_defined::node_pointer node_pointer; + typedef typename implementation_defined::node_list_type node_list_type; + typedef typename implementation_defined::node_list_iterator node_list_iterator; + typedef typename implementation_defined::node_list_const_iterator node_list_const_iterator; + typedef typename implementation_defined::internal_compare internal_compare; + + typedef boost::intrusive::list, + boost::intrusive::constant_time_size + > node_child_list; +#endif + +public: + typedef T value_type; + + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + /// \copydoc boost::heap::priority_queue::iterator + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + typedef typename implementation_defined::ordered_iterator ordered_iterator; + + typedef typename implementation_defined::handle_type handle_type; + + static const bool constant_time_size = super_t::constant_time_size; + static const bool has_ordered_iterators = true; + static const bool is_mergable = true; + static const bool is_stable = detail::extract_stable::value; + static const bool has_reserve = false; + + /// \copydoc boost::heap::priority_queue::priority_queue(value_compare const &) + explicit pairing_heap(value_compare const & cmp = value_compare()): + super_t(cmp), root(NULL) + {} + + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue const &) + pairing_heap(pairing_heap const & rhs): + super_t(rhs), root(NULL) + { + if (rhs.empty()) + return; + + clone_tree(rhs); + size_holder::set_size(rhs.get_size()); + } + +#ifdef BOOST_HAS_RVALUE_REFS + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue &&) + pairing_heap(pairing_heap && rhs): + super_t(std::move(rhs)), root(rhs.root) + { + rhs.root = NULL; + } + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue &&) + pairing_heap & operator=(pairing_heap && rhs) + { + super_t::operator=(std::move(rhs)); + root = rhs.root; + rhs.root = NULL; + return *this; + } +#endif + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue const & rhs) + pairing_heap & operator=(pairing_heap const & rhs) + { + clear(); + size_holder::set_size(rhs.get_size()); + static_cast(*this) = rhs; + + clone_tree(rhs); + return *this; + } + + ~pairing_heap(void) + { + while (!empty()) + pop(); + } + + /// \copydoc boost::heap::priority_queue::empty + bool empty(void) const + { + return root == NULL; + } + + /// \copydoc boost::heap::binomial_heap::size + size_type size(void) const + { + if (constant_time_size) + return size_holder::get_size(); + + if (root == NULL) + return 0; + else + return detail::count_nodes(root); + } + + /// \copydoc boost::heap::priority_queue::max_size + size_type max_size(void) const + { + return allocator_type::max_size(); + } + + /// \copydoc boost::heap::priority_queue::clear + void clear(void) + { + if (empty()) + return; + + root->template clear_subtree(*this); + root->~node(); + allocator_type::deallocate(root, 1); + root = NULL; + size_holder::set_size(0); + } + + /// \copydoc boost::heap::priority_queue::get_allocator + allocator_type get_allocator(void) const + { + return *this; + } + + /// \copydoc boost::heap::priority_queue::swap + void swap(pairing_heap & rhs) + { + super_t::swap(rhs); + std::swap(root, rhs.root); + } + + + /// \copydoc boost::heap::priority_queue::top + const_reference top(void) const + { + BOOST_ASSERT(!empty()); + + return super_t::get_value(root->value); + } + + /** + * \b Effects: Adds a new element to the priority queue. Returns handle to element + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * */ + handle_type push(value_type const & v) + { + size_holder::increment(); + + node_pointer n = allocator_type::allocate(1); + + new(n) node(super_t::make_node(v)); + + merge_node(n); + return handle_type(n); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + /** + * \b Effects: Adds a new element to the priority queue. The element is directly constructed in-place. Returns handle to element. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * */ + template + handle_type emplace(Args&&... args) + { + size_holder::increment(); + + node_pointer n = allocator_type::allocate(1); + + new(n) node(super_t::make_node(std::forward(args)...)); + + merge_node(n); + return handle_type(n); + } +#endif + + /** + * \b Effects: Removes the top element from the priority queue. + * + * \b Complexity: Logarithmic (amortized). + * + * */ + void pop(void) + { + BOOST_ASSERT(!empty()); + + erase(handle_type(root)); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * */ + void update (handle_type handle, const_reference v) + { + handle.node_->value = super_t::make_node(v); + update(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void update (handle_type handle) + { + node_pointer n = handle.node_; + + n->unlink(); + if (!n->children.empty()) + n = merge_nodes(n, merge_node_list(n->children)); + + if (n != root) + merge_node(n); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * \b Note: The new value is expected to be greater than the current one + * */ + void increase (handle_type handle, const_reference v) + { + update(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void increase (handle_type handle) + { + update(handle); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * \b Note: The new value is expected to be less than the current one + * */ + void decrease (handle_type handle, const_reference v) + { + update(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * \b Note: The new value is expected to be less than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void decrease (handle_type handle) + { + update(handle); + } + + /** + * \b Effects: Removes the element handled by \c handle from the priority_queue. + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * */ + void erase(handle_type handle) + { + node_pointer n = handle.node_; + if (n != root) { + n->unlink(); + if (!n->children.empty()) + merge_node(merge_node_list(n->children)); + } else { + if (!n->children.empty()) + root = merge_node_list(n->children); + else + root = NULL; + } + + size_holder::decrement(); + n->~node(); + allocator_type::deallocate(n, 1); + } + + /// \copydoc boost::heap::priority_queue::begin + iterator begin(void) const + { + return iterator(root, super_t::value_comp()); + } + + /// \copydoc boost::heap::priority_queue::end + iterator end(void) const + { + return iterator(); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_begin + ordered_iterator ordered_begin(void) const + { + return ordered_iterator(root, super_t::value_comp()); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_begin + ordered_iterator ordered_end(void) const + { + return ordered_iterator(NULL, super_t::value_comp()); + } + + + /// \copydoc boost::heap::d_ary_heap_mutable::s_handle_from_iterator + static handle_type s_handle_from_iterator(iterator const & it) + { + node * ptr = const_cast(it.get_node()); + return handle_type(ptr); + } + + /** + * \b Effects: Merge all elements from rhs into this + * + * \cond + * \b Complexity: \f$2^2log(log(N))\f$ (amortized). + * \endcond + * + * \b Complexity: 2**2*log(log(N)) (amortized). + * + * */ + void merge(pairing_heap & rhs) + { + if (rhs.empty()) + return; + + merge_node(rhs.root); + + size_holder::add(rhs.get_size()); + rhs.set_size(0); + rhs.root = NULL; + + super_t::set_stability_count(std::max(super_t::get_stability_count(), + rhs.get_stability_count())); + rhs.set_stability_count(0); + } + + /// \copydoc boost::heap::priority_queue::value_comp + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } + + /// \copydoc boost::heap::priority_queue::operator<(HeapType const & rhs) const + template + bool operator<(HeapType const & rhs) const + { + return detail::heap_compare(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator>(HeapType const & rhs) const + template + bool operator>(HeapType const & rhs) const + { + return detail::heap_compare(rhs, *this); + } + + /// \copydoc boost::heap::priority_queue::operator>=(HeapType const & rhs) const + template + bool operator>=(HeapType const & rhs) const + { + return !operator<(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator<=(HeapType const & rhs) const + template + bool operator<=(HeapType const & rhs) const + { + return !operator>(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator==(HeapType const & rhs) const + template + bool operator==(HeapType const & rhs) const + { + return detail::heap_equality(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator!=(HeapType const & rhs) const + template + bool operator!=(HeapType const & rhs) const + { + return !(*this == rhs); + } + +private: +#if !defined(BOOST_DOXYGEN_INVOKED) + void clone_tree(pairing_heap const & rhs) + { + BOOST_HEAP_ASSERT(root == NULL); + if (rhs.empty()) + return; + + root = allocator_type::allocate(1); + + new(root) node(static_cast(*rhs.root), static_cast(*this)); + } + + void merge_node(node_pointer other) + { + BOOST_HEAP_ASSERT(other); + if (root != NULL) + root = merge_nodes(root, other); + else + root = other; + } + + node_pointer merge_node_list(node_child_list & children) + { + assert(!children.empty()); + node_pointer merged = merge_first_pair(children); + if (children.empty()) + return merged; + + node_child_list node_list; + node_list.push_back(*merged); + + do { + node_pointer next_merged = merge_first_pair(children); + node_list.push_back(*next_merged); + } while (!children.empty()); + + return merge_node_list(node_list); + } + + node_pointer merge_first_pair(node_child_list & children) + { + assert(!children.empty()); + node_pointer first_child = static_cast(&children.front()); + children.pop_front(); + if (children.empty()) + return first_child; + + node_pointer second_child = static_cast(&children.front()); + children.pop_front(); + + return merge_nodes(first_child, second_child); + } + + node_pointer merge_nodes(node_pointer node1, node_pointer node2) + { + if (super_t::operator()(node1->value, node2->value)) + std::swap(node1, node2); + + node2->unlink(); + node1->children.push_front(*node2); + return node1; + } + + node_pointer root; +#endif +}; + + +} /* namespace heap */ +} /* namespace boost */ + +#undef BOOST_HEAP_ASSERT +#endif /* BOOST_HEAP_PAIRING_HEAP_HPP */ diff --git a/3party/boost/boost/heap/policies.hpp b/3party/boost/boost/heap/policies.hpp new file mode 100644 index 0000000000..60266054da --- /dev/null +++ b/3party/boost/boost/heap/policies.hpp @@ -0,0 +1,169 @@ +// boost heap +// +// Copyright (C) 2010-2011 Tim Blechmann +// +// 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 BOOST_HEAP_POLICIES_HPP +#define BOOST_HEAP_POLICIES_HPP + +#include +#include +#include +#include +#include + + +namespace boost { +namespace heap { + +#ifndef BOOST_DOXYGEN_INVOKED +BOOST_PARAMETER_TEMPLATE_KEYWORD(allocator) +BOOST_PARAMETER_TEMPLATE_KEYWORD(compare) + +namespace tag { struct stable; } + +template +struct stable: + boost::parameter::template_keyword > +{}; + +namespace tag { struct mutable_; } + +template +struct mutable_: + boost::parameter::template_keyword > +{}; + + +namespace tag { struct constant_time_size; } + +template +struct constant_time_size: + boost::parameter::template_keyword > +{}; + +namespace tag { struct store_parent_pointer; } + +template +struct store_parent_pointer: + boost::parameter::template_keyword > +{}; + +namespace tag { struct arity; } + +template +struct arity: + boost::parameter::template_keyword > +{}; + +namespace tag { struct objects_per_page; } + +template +struct objects_per_page: + boost::parameter::template_keyword > +{}; + +BOOST_PARAMETER_TEMPLATE_KEYWORD(stability_counter_type) + +namespace detail { + +namespace mpl = boost::mpl; + +template +struct has_arg +{ + typedef typename boost::parameter::binding::type type; + static const bool value = mpl::is_not_void_::type::value; +}; + +template +struct extract_stable +{ + static const bool has_stable = has_arg::value; + + typedef typename mpl::if_c::type, + mpl::bool_ + >::type stable_t; + + static const bool value = stable_t::value; +}; + +template +struct extract_mutable +{ + static const bool has_mutable = has_arg::value; + + typedef typename mpl::if_c::type, + mpl::bool_ + >::type mutable_t; + + static const bool value = mutable_t::value; +}; + +} + +#else + +/** \brief Specifies the predicate for the heap order + */ +template +struct compare{}; + +/** \brief Configure heap as mutable + * + * Certain heaps need to be configured specifically do be mutable. + * + * */ +template +struct mutable_{}; + +/** \brief Specifies allocator for the internal memory management + */ +template +struct allocator{}; + +/** \brief Configure a heap as \b stable + * + * A priority queue is stable, if elements with the same priority are popped from the heap, in the same order as + * they are inserted. + * */ +template +struct stable{}; + +/** \brief Specifies the type for stability counter + * + * */ +template +struct stability_counter_type{}; + +/** \brief Configures complexity of size() + * + * Specifies, whether size() should have linear or constant complexity. + * */ +template +struct constant_time_size{}; + +/** \brief Store parent pointer in heap node. + * + * Maintaining a parent pointer adds some maintenance and size overhead, but iterating a heap is more efficient. + * */ +template +struct store_parent_pointer{}; + +/** \brief Specify arity. + * + * Specifies the arity of a D-ary heap + * */ +template +struct arity{}; +#endif + +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_POLICIES_HPP */ diff --git a/3party/boost/boost/heap/priority_queue.hpp b/3party/boost/boost/heap/priority_queue.hpp new file mode 100644 index 0000000000..05d79fd875 --- /dev/null +++ b/3party/boost/boost/heap/priority_queue.hpp @@ -0,0 +1,404 @@ +// boost heap: wrapper for stl heap +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_PRIORITY_QUEUE_HPP +#define BOOST_HEAP_PRIORITY_QUEUE_HPP + +#include +#include +#include + +#include + +#include +#include + +namespace boost { +namespace heap { +namespace detail { + +typedef parameter::parameters, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional + > priority_queue_signature; +} + +/** + * \class priority_queue + * \brief priority queue, based on stl heap functions + * + * The priority_queue class is a wrapper for the stl heap functions.
+ * The template parameter T is the type to be managed by the container. + * The user can specify additional options and if no options are provided default options are used. + * + * The container supports the following options: + * - \c boost::heap::compare<>, defaults to \c compare > + * - \c boost::heap::stable<>, defaults to \c stable + * - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type + * - \c boost::heap::allocator<>, defaults to \c allocator > + * + */ +#ifdef BOOST_DOXYGEN_INVOKED +template +#else +template +#endif +class priority_queue: + private detail::make_heap_base::type, false>::type +{ + typedef detail::make_heap_base::type, false> heap_base_maker; + + typedef typename heap_base_maker::type super_t; + typedef typename super_t::internal_type internal_type; + typedef typename heap_base_maker::allocator_argument::template rebind::other internal_type_allocator; + typedef std::vector container_type; + + template + friend struct detail::heap_merge_emulate; + + container_type q_; + +#ifndef BOOST_DOXYGEN_INVOKED + struct implementation_defined: + detail::extract_allocator_types + { + typedef typename heap_base_maker::compare_argument value_compare; + typedef detail::stable_heap_iterator iterator; + typedef iterator const_iterator; + typedef typename container_type::allocator_type allocator_type; + }; +#endif + +public: + typedef T value_type; + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + /** + * \b Note: The iterator does not traverse the priority queue in order of the priorities. + * */ + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + + static const bool constant_time_size = true; + static const bool has_ordered_iterators = false; + static const bool is_mergable = false; + static const bool is_stable = heap_base_maker::is_stable; + static const bool has_reserve = true; + + /** + * \b Effects: constructs an empty priority queue. + * + * \b Complexity: Constant. + * + * */ + explicit priority_queue(value_compare const & cmp = value_compare()): + super_t(cmp) + {} + + /** + * \b Effects: copy-constructs priority queue from rhs. + * + * \b Complexity: Linear. + * + * */ + priority_queue (priority_queue const & rhs): + super_t(rhs), q_(rhs.q_) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + /** + * \b Effects: C++11-style move constructor. + * + * \b Complexity: Constant. + * + * \b Note: Only available, if BOOST_HAS_RVALUE_REFS is defined + * */ + priority_queue(priority_queue && rhs): + super_t(std::move(rhs)), q_(std::move(rhs.q_)) + {} + + /** + * \b Effects: C++11-style move assignment. + * + * \b Complexity: Constant. + * + * \b Note: Only available, if BOOST_HAS_RVALUE_REFS is defined + * */ + priority_queue & operator=(priority_queue && rhs) + { + super_t::operator=(std::move(rhs)); + q_ = std::move(rhs.q_); + return *this; + } +#endif + + /** + * \b Effects: Assigns priority queue from rhs. + * + * \b Complexity: Linear. + * + * */ + priority_queue & operator=(priority_queue const & rhs) + { + static_cast(*this) = static_cast(rhs); + q_ = rhs.q_; + return *this; + } + + /** + * \b Effects: Returns true, if the priority queue contains no elements. + * + * \b Complexity: Constant. + * + * */ + bool empty(void) const + { + return q_.empty(); + } + + /** + * \b Effects: Returns the number of elements contained in the priority queue. + * + * \b Complexity: Constant. + * + * */ + size_type size(void) const + { + return q_.size(); + } + + /** + * \b Effects: Returns the maximum number of elements the priority queue can contain. + * + * \b Complexity: Constant. + * + * */ + size_type max_size(void) const + { + return q_.max_size(); + } + + /** + * \b Effects: Removes all elements from the priority queue. + * + * \b Complexity: Linear. + * + * */ + void clear(void) + { + q_.clear(); + } + + /** + * \b Effects: Returns allocator. + * + * \b Complexity: Constant. + * + * */ + allocator_type get_allocator(void) const + { + return q_.get_allocator(); + } + + /** + * \b Effects: Returns a const_reference to the maximum element. + * + * \b Complexity: Constant. + * + * */ + const_reference top(void) const + { + BOOST_ASSERT(!empty()); + return super_t::get_value(q_.front()); + } + + /** + * \b Effects: Adds a new element to the priority queue. + * + * \b Complexity: Logarithmic (amortized). Linear (worst case). + * + * */ + void push(value_type const & v) + { + q_.push_back(super_t::make_node(v)); + std::push_heap(q_.begin(), q_.end(), static_cast(*this)); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + /** + * \b Effects: Adds a new element to the priority queue. The element is directly constructed in-place. + * + * \b Complexity: Logarithmic (amortized). Linear (worst case). + * + * */ + template + void emplace(Args&&... args) + { + q_.emplace_back(super_t::make_node(std::forward(args)...)); + std::push_heap(q_.begin(), q_.end(), static_cast(*this)); + } +#endif + + /** + * \b Effects: Removes the top element from the priority queue. + * + * \b Complexity: Logarithmic (amortized). Linear (worst case). + * + * */ + void pop(void) + { + BOOST_ASSERT(!empty()); + std::pop_heap(q_.begin(), q_.end(), static_cast(*this)); + q_.pop_back(); + } + + /** + * \b Effects: Swaps two priority queues. + * + * \b Complexity: Constant. + * + * */ + void swap(priority_queue & rhs) + { + super_t::swap(rhs); + q_.swap(rhs.q_); + } + + /** + * \b Effects: Returns an iterator to the first element contained in the priority queue. + * + * \b Complexity: Constant. + * + * */ + iterator begin(void) const + { + return iterator(q_.begin()); + } + + /** + * \b Effects: Returns an iterator to the end of the priority queue. + * + * \b Complexity: Constant. + * + * */ + iterator end(void) const + { + return iterator(q_.end()); + } + + /** + * \b Effects: Reserves memory for element_count elements + * + * \b Complexity: Linear. + * + * \b Node: Invalidates iterators + * + * */ + void reserve(size_type element_count) + { + q_.reserve(element_count); + } + + /** + * \b Effect: Returns the value_compare object used by the priority queue + * + * */ + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } + + /** + * \b Returns: Element-wise comparison of heap data structures + * + * \b Requirement: the \c value_compare object of both heaps must match. + * + * */ + template + bool operator<(HeapType const & rhs) const + { + return detail::heap_compare(*this, rhs); + } + + /** + * \b Returns: Element-wise comparison of heap data structures + * + * \b Requirement: the \c value_compare object of both heaps must match. + * + * */ + template + bool operator>(HeapType const & rhs) const + { + return detail::heap_compare(rhs, *this); + } + + /** + * \b Returns: Element-wise comparison of heap data structures + * + * \b Requirement: the \c value_compare object of both heaps must match. + * + * */ + template + bool operator>=(HeapType const & rhs) const + { + return !operator<(rhs); + } + + /** + * \b Returns: Element-wise comparison of heap data structures + * + * \b Requirement: the \c value_compare object of both heaps must match. + * + * */ + template + bool operator<=(HeapType const & rhs) const + { + return !operator>(rhs); + } + + /** \brief Equivalent comparison + * \b Returns: True, if both heap data structures are equivalent. + * + * \b Requirement: the \c value_compare object of both heaps must match. + * + * */ + template + bool operator==(HeapType const & rhs) const + { + return detail::heap_equality(*this, rhs); + } + + /** \brief Equivalent comparison + * \b Returns: True, if both heap data structures are not equivalent. + * + * \b Requirement: the \c value_compare object of both heaps must match. + * + * */ + template + bool operator!=(HeapType const & rhs) const + { + return !(*this == rhs); + } +}; + +} /* namespace heap */ +} /* namespace boost */ + +#endif /* BOOST_HEAP_PRIORITY_QUEUE_HPP */ diff --git a/3party/boost/boost/heap/skew_heap.hpp b/3party/boost/boost/heap/skew_heap.hpp new file mode 100644 index 0000000000..c388ed1c9c --- /dev/null +++ b/3party/boost/boost/heap/skew_heap.hpp @@ -0,0 +1,925 @@ +// boost heap: skew heap +// +// Copyright (C) 2010 Tim Blechmann +// +// 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 BOOST_HEAP_SKEW_HEAP_HPP +#define BOOST_HEAP_SKEW_HEAP_HPP + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + + +#ifndef BOOST_DOXYGEN_INVOKED +#ifdef BOOST_HEAP_SANITYCHECKS +#define BOOST_HEAP_ASSERT BOOST_ASSERT +#else +#define BOOST_HEAP_ASSERT(expression) +#endif +#endif + +namespace boost { +namespace heap { +namespace detail { + +template +struct parent_holder +{ + parent_holder(void): + parent_(NULL) + {} + + void set_parent(node_pointer parent) + { + BOOST_HEAP_ASSERT(static_cast(this) != parent); + parent_ = parent; + } + + node_pointer get_parent(void) const + { + return parent_; + } + + node_pointer parent_; +}; + +template +struct parent_holder +{ + void set_parent(node_pointer parent) + {} + + node_pointer get_parent(void) const + { + return NULL; + } +}; + + +template +struct skew_heap_node: + parent_holder*, store_parent_pointer> +{ + typedef parent_holder*, store_parent_pointer> super_t; + + typedef boost::array child_list_type; + typedef typename child_list_type::iterator child_iterator; + typedef typename child_list_type::const_iterator const_child_iterator; + + skew_heap_node(value_type const & v): + value(v) + { + children.assign(0); + } + +#ifdef BOOST_HAS_RVALUE_REFS + skew_heap_node(value_type && v): + value(v) + { + children.assign(0); + } +#endif + + template + skew_heap_node (skew_heap_node const & rhs, Alloc & allocator, skew_heap_node * parent): + value(rhs.value) + { + super_t::set_parent(parent); + node_cloner cloner(allocator); + clone_child(0, rhs, cloner); + clone_child(1, rhs, cloner); + } + + template + void clone_child(int index, skew_heap_node const & rhs, Cloner & cloner) + { + if (rhs.children[index]) + children[index] = cloner(*rhs.children[index], this); + else + children[index] = NULL; + } + + template + void clear_subtree(Alloc & alloc) + { + node_disposer disposer(alloc); + dispose_child(children[0], disposer); + dispose_child(children[1], disposer); + } + + template + void dispose_child(skew_heap_node * node, Disposer & disposer) + { + if (node) + disposer(node); + } + + std::size_t count_children(void) const + { + size_t ret = 1; + if (children[0]) + ret += children[0]->count_children(); + if (children[1]) + ret += children[1]->count_children(); + + return ret; + } + + template + bool is_heap(typename HeapBase::value_compare const & cmp) const + { + for (const_child_iterator it = children.begin(); it != children.end(); ++it) { + const skew_heap_node * child = *it; + + if (child == NULL) + continue; + + if (store_parent_pointer) + BOOST_HEAP_ASSERT(child->get_parent() == this); + + if (cmp(HeapBase::get_value(value), HeapBase::get_value(child->value)) || + !child->is_heap(cmp)) + return false; + } + return true; + } + + value_type value; + boost::array children; +}; + + +typedef parameter::parameters, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional, + boost::parameter::optional + > skew_heap_signature; + +template +struct make_skew_heap_base +{ + static const bool constant_time_size = parameter::binding::type::value; + + typedef typename make_heap_base::type base_type; + typedef typename make_heap_base::allocator_argument allocator_argument; + typedef typename make_heap_base::compare_argument compare_argument; + + static const bool is_mutable = extract_mutable::value; + static const bool store_parent_pointer = parameter::binding::type::value || is_mutable; + + typedef skew_heap_node node_type; + + typedef typename allocator_argument::template rebind::other allocator_type; + + struct type: + base_type, + allocator_type + { + type(compare_argument const & arg): + base_type(arg) + {} + +#ifdef BOOST_HAS_RVALUE_REFS + type(type && rhs): + base_type(std::move(static_cast(rhs))), + allocator_type(std::move(static_cast(rhs))) + {} + + type(type const & rhs): + base_type(rhs), + allocator_type(rhs) + {} + + type & operator=(type && rhs) + { + base_type::operator=(std::move(static_cast(rhs))); + allocator_type::operator=(std::move(static_cast(rhs))); + return *this; + } + + type & operator=(type const & rhs) + { + base_type::operator=(static_cast(rhs)); + allocator_type::operator=(static_cast(rhs)); + return *this; + } +#endif + }; +}; + +} /* namespace detail */ + +/** + * \class skew_heap + * \brief skew heap + * + * + * The template parameter T is the type to be managed by the container. + * The user can specify additional options and if no options are provided default options are used. + * + * The container supports the following options: + * - \c boost::heap::compare<>, defaults to \c compare > + * - \c boost::heap::stable<>, defaults to \c stable + * - \c boost::heap::stability_counter_type<>, defaults to \c stability_counter_type + * - \c boost::heap::allocator<>, defaults to \c allocator > + * - \c boost::heap::constant_time_size<>, defaults to \c constant_time_size + * - \c boost::heap::store_parent_pointer<>, defaults to \c store_parent_pointer. Maintaining a parent pointer adds some + * maintenance and size overhead, but iterating a heap is more efficient. + * - \c boost::heap::mutable<>, defaults to \c mutable. + * + */ +#ifdef BOOST_DOXYGEN_INVOKED +template +#else +template +#endif +class skew_heap: + private detail::make_skew_heap_base::type + >::type +{ + typedef typename detail::skew_heap_signature::bind::type bound_args; + typedef detail::make_skew_heap_base base_maker; + typedef typename base_maker::type super_t; + + typedef typename super_t::internal_type internal_type; + typedef typename super_t::size_holder_type size_holder; + typedef typename base_maker::allocator_argument allocator_argument; + + static const bool store_parent_pointer = base_maker::store_parent_pointer; + template + friend struct heap_merge_emulate; + + struct implementation_defined: + detail::extract_allocator_types + { + typedef T value_type; + + typedef typename base_maker::compare_argument value_compare; + typedef typename base_maker::allocator_type allocator_type; + + typedef typename base_maker::node_type node; + typedef typename allocator_type::pointer node_pointer; + typedef typename allocator_type::const_pointer const_node_pointer; + + typedef detail::value_extractor value_extractor; + + typedef boost::array child_list_type; + typedef typename child_list_type::iterator child_list_iterator; + + typedef typename boost::mpl::if_c + >, + detail::tree_iterator, + true, + false, + value_compare + > + >::type iterator; + + typedef iterator const_iterator; + + typedef detail::tree_iterator, + true, + true, + value_compare + > ordered_iterator; + + typedef typename detail::extract_allocator_types::reference reference; + typedef detail::node_handle handle_type; + }; + + typedef typename implementation_defined::value_extractor value_extractor; + typedef typename implementation_defined::node node; + typedef typename implementation_defined::node_pointer node_pointer; + +public: + typedef T value_type; + + typedef typename implementation_defined::size_type size_type; + typedef typename implementation_defined::difference_type difference_type; + typedef typename implementation_defined::value_compare value_compare; + typedef typename implementation_defined::allocator_type allocator_type; + typedef typename implementation_defined::reference reference; + typedef typename implementation_defined::const_reference const_reference; + typedef typename implementation_defined::pointer pointer; + typedef typename implementation_defined::const_pointer const_pointer; + + /// \copydoc boost::heap::priority_queue::iterator + typedef typename implementation_defined::iterator iterator; + typedef typename implementation_defined::const_iterator const_iterator; + typedef typename implementation_defined::ordered_iterator ordered_iterator; + + static const bool constant_time_size = super_t::constant_time_size; + static const bool has_ordered_iterators = true; + static const bool is_mergable = true; + static const bool is_stable = detail::extract_stable::value; + static const bool has_reserve = false; + static const bool is_mutable = detail::extract_mutable::value; + + typedef typename mpl::if_c::type handle_type; + + /// \copydoc boost::heap::priority_queue::priority_queue(value_compare const &) + explicit skew_heap(value_compare const & cmp = value_compare()): + super_t(cmp), root(NULL) + {} + + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue const &) + skew_heap(skew_heap const & rhs): + super_t(rhs), root(0) + { + if (rhs.empty()) + return; + + clone_tree(rhs); + size_holder::set_size(rhs.get_size()); + } + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue const & rhs) + skew_heap & operator=(skew_heap const & rhs) + { + clear(); + size_holder::set_size(rhs.get_size()); + static_cast(*this) = rhs; + + clone_tree(rhs); + return *this; + } + +#ifdef BOOST_HAS_RVALUE_REFS + /// \copydoc boost::heap::priority_queue::priority_queue(priority_queue &&) + skew_heap(skew_heap && rhs): + super_t(std::move(rhs)), root(rhs.root) + { + rhs.root = NULL; + } + + /// \copydoc boost::heap::priority_queue::operator=(priority_queue &&) + skew_heap & operator=(skew_heap && rhs) + { + super_t::operator=(std::move(rhs)); + root = rhs.root; + rhs.root = NULL; + return *this; + } +#endif + + ~skew_heap(void) + { + clear(); + } + + /** + * \b Effects: Adds a new element to the priority queue. + * + * \b Complexity: Logarithmic (amortized). + * + * */ + typename mpl::if_c::type push(value_type const & v) + { + typedef typename mpl::if_c::type push_helper; + return push_helper::push(this, v); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + /** + * \b Effects: Adds a new element to the priority queue. The element is directly constructed in-place. + * + * \b Complexity: Logarithmic (amortized). + * + * */ + template + typename mpl::if_c::type emplace(Args&&... args) + { + typedef typename mpl::if_c::type push_helper; + return push_helper::emplace(this, std::forward(args)...); + } +#endif + + /// \copydoc boost::heap::priority_queue::empty + bool empty(void) const + { + return root == NULL; + } + + /// \copydoc boost::heap::binomial_heap::size + size_type size(void) const + { + if (constant_time_size) + return size_holder::get_size(); + + if (root == NULL) + return 0; + else + return root->count_children(); + } + + /// \copydoc boost::heap::priority_queue::max_size + size_type max_size(void) const + { + return allocator_type::max_size(); + } + + /// \copydoc boost::heap::priority_queue::clear + void clear(void) + { + if (empty()) + return; + + root->template clear_subtree(*this); + root->~node(); + allocator_type::deallocate(root, 1); + + root = NULL; + size_holder::set_size(0); + } + + /// \copydoc boost::heap::priority_queue::get_allocator + allocator_type get_allocator(void) const + { + return *this; + } + + /// \copydoc boost::heap::priority_queue::swap + void swap(skew_heap & rhs) + { + super_t::swap(rhs); + std::swap(root, rhs.root); + } + + /// \copydoc boost::heap::priority_queue::top + const_reference top(void) const + { + BOOST_ASSERT(!empty()); + + return super_t::get_value(root->value); + } + + /** + * \b Effects: Removes the top element from the priority queue. + * + * \b Complexity: Logarithmic (amortized). + * + * */ + void pop(void) + { + BOOST_ASSERT(!empty()); + + node_pointer top = root; + + root = merge_children(root); + size_holder::decrement(); + + if (root) + BOOST_HEAP_ASSERT(root->get_parent() == NULL); + else + BOOST_HEAP_ASSERT(size_holder::get_size() == 0); + + top->~node(); + allocator_type::deallocate(top, 1); + sanity_check(); + } + + /// \copydoc boost::heap::priority_queue::begin + iterator begin(void) const + { + return iterator(root, super_t::value_comp()); + } + + /// \copydoc boost::heap::priority_queue::end + iterator end(void) const + { + return iterator(); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_begin + ordered_iterator ordered_begin(void) const + { + return ordered_iterator(root, super_t::value_comp()); + } + + /// \copydoc boost::heap::fibonacci_heap::ordered_begin + ordered_iterator ordered_end(void) const + { + return ordered_iterator(0, super_t::value_comp()); + } + + /** + * \b Effects: Merge all elements from rhs into this + * + * \b Complexity: Logarithmic (amortized). + * + * */ + void merge(skew_heap & rhs) + { + if (rhs.empty()) + return; + + merge_node(rhs.root); + + size_holder::add(rhs.get_size()); + rhs.set_size(0); + rhs.root = NULL; + sanity_check(); + + super_t::set_stability_count(std::max(super_t::get_stability_count(), + rhs.get_stability_count())); + rhs.set_stability_count(0); + } + + /// \copydoc boost::heap::priority_queue::value_comp + value_compare const & value_comp(void) const + { + return super_t::value_comp(); + } + + /// \copydoc boost::heap::priority_queue::operator<(HeapType const & rhs) const + template + bool operator<(HeapType const & rhs) const + { + return detail::heap_compare(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator>(HeapType const & rhs) const + template + bool operator>(HeapType const & rhs) const + { + return detail::heap_compare(rhs, *this); + } + + /// \copydoc boost::heap::priority_queue::operator>=(HeapType const & rhs) const + template + bool operator>=(HeapType const & rhs) const + { + return !operator<(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator<=(HeapType const & rhs) const + template + bool operator<=(HeapType const & rhs) const + { + return !operator>(rhs); + } + + /// \copydoc boost::heap::priority_queue::operator==(HeapType const & rhs) const + template + bool operator==(HeapType const & rhs) const + { + return detail::heap_equality(*this, rhs); + } + + /// \copydoc boost::heap::priority_queue::operator!=(HeapType const & rhs) const + template + bool operator!=(HeapType const & rhs) const + { + return !(*this == rhs); + } + + + /// \copydoc boost::heap::d_ary_heap::s_handle_from_iterator + static handle_type s_handle_from_iterator(iterator const & it) + { + node * ptr = const_cast(it.get_node()); + return handle_type(ptr); + } + + /** + * \b Effects: Removes the element handled by \c handle from the priority_queue. + * + * \b Complexity: Logarithmic (amortized). + * */ + void erase (handle_type object) + { + BOOST_STATIC_ASSERT(is_mutable); + node_pointer this_node = object.node_; + + unlink_node(this_node); + size_holder::decrement(); + + sanity_check(); + this_node->~node(); + allocator_type::deallocate(this_node, 1); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic (amortized). + * + * */ + void update (handle_type handle, const_reference v) + { + BOOST_STATIC_ASSERT(is_mutable); + if (super_t::operator()(super_t::get_value(handle.node_->value), v)) + increase(handle, v); + else + decrease(handle, v); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic (amortized). + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void update (handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + node_pointer this_node = handle.node_; + + if (this_node->get_parent()) { + if (super_t::operator()(super_t::get_value(this_node->get_parent()->value), + super_t::get_value(this_node->value))) + increase(handle); + else + decrease(handle); + } + else + decrease(handle); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic (amortized). + * + * \b Note: The new value is expected to be greater than the current one + * */ + void increase (handle_type handle, const_reference v) + { + BOOST_STATIC_ASSERT(is_mutable); + handle.node_->value = super_t::make_node(v); + increase(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic (amortized). + * + * \b Note: If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void increase (handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + node_pointer this_node = handle.node_; + + if (this_node == root) + return; + + node_pointer parent = this_node->get_parent(); + + if (this_node == parent->children[0]) + parent->children[0] = NULL; + else + parent->children[1] = NULL; + + this_node->set_parent(NULL); + merge_node(this_node); + } + + /** + * \b Effects: Assigns \c v to the element handled by \c handle & updates the priority queue. + * + * \b Complexity: Logarithmic (amortized). + * + * \b Note: The new value is expected to be less than the current one + * */ + void decrease (handle_type handle, const_reference v) + { + BOOST_STATIC_ASSERT(is_mutable); + handle.node_->value = super_t::make_node(v); + decrease(handle); + } + + /** + * \b Effects: Updates the heap after the element handled by \c handle has been changed. + * + * \b Complexity: Logarithmic (amortized). + * + * \b Note: The new value is expected to be less than the current one. If this is not called, after a handle has been updated, the behavior of the data structure is undefined! + * */ + void decrease (handle_type handle) + { + BOOST_STATIC_ASSERT(is_mutable); + node_pointer this_node = handle.node_; + + unlink_node(this_node); + this_node->children.assign(0); + this_node->set_parent(NULL); + merge_node(this_node); + } + +private: +#if !defined(BOOST_DOXYGEN_INVOKED) + struct push_void + { + static void push(skew_heap * self, const_reference v) + { + self->push_internal(v); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + static void emplace(skew_heap * self, Args&&... args) + { + self->emplace_internal(std::forward(args)...); + } +#endif + }; + + struct push_handle + { + static handle_type push(skew_heap * self, const_reference v) + { + return handle_type(self->push_internal(v)); + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + static handle_type emplace(skew_heap * self, Args&&... args) + { + return handle_type(self->emplace_internal(std::forward(args)...)); + } +#endif + }; + + node_pointer push_internal(const_reference v) + { + size_holder::increment(); + + node_pointer n = super_t::allocate(1); + new(n) node(super_t::make_node(v)); + + merge_node(n); + return n; + } + +#if defined(BOOST_HAS_RVALUE_REFS) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + template + node_pointer emplace_internal(Args&&... args) + { + size_holder::increment(); + + node_pointer n = super_t::allocate(1); + new(n) node(super_t::make_node(std::forward(args)...)); + + merge_node(n); + return n; + } +#endif + + void unlink_node(node_pointer node) + { + node_pointer parent = node->get_parent(); + node_pointer merged_children = merge_children(node); + + if (parent) { + if (node == parent->children[0]) + parent->children[0] = merged_children; + else + parent->children[1] = merged_children; + } + else + root = merged_children; + } + + void clone_tree(skew_heap const & rhs) + { + BOOST_HEAP_ASSERT(root == NULL); + if (rhs.empty()) + return; + + root = allocator_type::allocate(1); + + new(root) node(*rhs.root, static_cast(*this), NULL); + } + + void merge_node(node_pointer other) + { + BOOST_HEAP_ASSERT(other); + if (root != NULL) + root = merge_nodes(root, other, NULL); + else + root = other; + } + + node_pointer merge_nodes(node_pointer node1, node_pointer node2, node_pointer new_parent) + { + if (node1 == NULL) { + if (node2) + node2->set_parent(new_parent); + return node2; + } + if (node2 == NULL) { + node1->set_parent(new_parent); + return node1; + } + + node_pointer merged = merge_nodes_recursive(node1, node2, new_parent); + return merged; + } + + node_pointer merge_children(node_pointer node) + { + node_pointer parent = node->get_parent(); + node_pointer merged_children = merge_nodes(node->children[0], node->children[1], parent); + + return merged_children; + } + + node_pointer merge_nodes_recursive(node_pointer node1, node_pointer node2, node_pointer new_parent) + { + if (super_t::operator()(node1->value, node2->value)) + std::swap(node1, node2); + + node * parent = node1; + node * child = node2; + + if (parent->children[1]) { + node * merged = merge_nodes(parent->children[1], child, parent); + parent->children[1] = merged; + merged->set_parent(parent); + } else { + parent->children[1] = child; + child->set_parent(parent); + } + + + std::swap(parent->children[0], parent->children[1]); + parent->set_parent(new_parent); + return parent; + } + + void sanity_check(void) + { +#ifdef BOOST_HEAP_SANITYCHECKS + if (root) + BOOST_HEAP_ASSERT( root->template is_heap(super_t::value_comp()) ); + + if (constant_time_size) { + size_type stored_size = size_holder::get_size(); + + size_type counted_size; + if (root == NULL) + counted_size = 0; + else + counted_size = root->count_children(); + + BOOST_HEAP_ASSERT(counted_size == stored_size); + } +#endif + } + + node_pointer root; +#endif +}; + +} /* namespace heap */ +} /* namespace boost */ + +#undef BOOST_HEAP_ASSERT +#endif /* BOOST_HEAP_SKEW_HEAP_HPP */ diff --git a/3party/boost/boost/icl/associative_interval_container.hpp b/3party/boost/boost/icl/associative_interval_container.hpp index f238a0fff0..f59717fcd4 100644 --- a/3party/boost/boost/icl/associative_interval_container.hpp +++ b/3party/boost/boost/icl/associative_interval_container.hpp @@ -8,6 +8,7 @@ Copyright (c) 2010-2010: Joachim Faulhaber #ifndef BOOST_ICL_ASSOCIATIVE_INTERVAL_CONTAINER_HPP_JOFA_101023 #define BOOST_ICL_ASSOCIATIVE_INTERVAL_CONTAINER_HPP_JOFA_101023 +#include #include #include #include diff --git a/3party/boost/boost/icl/concept/interval.hpp b/3party/boost/boost/icl/concept/interval.hpp index d4ba982cf9..e350cc637d 100644 --- a/3party/boost/boost/icl/concept/interval.hpp +++ b/3party/boost/boost/icl/concept/interval.hpp @@ -547,7 +547,8 @@ template typename boost::enable_if, bool>::type is_empty(const Type& object) { - return domain_less_equal(upper(object), domain_next(lower(object))); + return domain_less_equal(upper(object), lower(object) ) + || domain_less_equal(upper(object), domain_next(lower(object))); } template @@ -557,7 +558,8 @@ is_empty(const Type& object) if(object.bounds() == interval_bounds::closed()) return domain_less(upper(object), lower(object)); else if(object.bounds() == interval_bounds::open()) - return domain_less_equal(upper(object), domain_next(lower(object))); + return domain_less_equal(upper(object), lower(object) ) + || domain_less_equal(upper(object), domain_next(lower(object))); else return domain_less_equal(upper(object), lower(object)); } @@ -607,8 +609,8 @@ namespace non_empty exclusive_less(const Type& left, const Type& right) { BOOST_ASSERT(!(icl::is_empty(left) || icl::is_empty(right))); - return domain_less (left.upper(), right.lower()) - || ( domain_equal(left.upper(), right.lower()) + return domain_less (upper(left), lower(right)) + || ( domain_equal(upper(left), lower(right)) && inner_bounds(left,right) != interval_bounds::open() ); } @@ -661,12 +663,12 @@ contains(const Type& super, const typename interval_traits::domain_type& e { return (is_left_closed(super.bounds()) - ? domain_less_equal(super.lower(), element) - : domain_less(super.lower(), element)) + ? domain_less_equal(lower(super), element) + : domain_less(lower(super), element)) && (is_right_closed(super.bounds()) - ? domain_less_equal(element, super.upper()) - : domain_less(element, super.upper())); + ? domain_less_equal(element, upper(super)) + : domain_less(element, upper(super))); } //- within --------------------------------------------------------------------- @@ -714,8 +716,8 @@ inline typename boost::enable_if, bool>::type exclusive_less(const Type& left, const Type& right) { return icl::is_empty(left) || icl::is_empty(right) - || domain_less(left.upper(), right.lower()) - || ( domain_equal(left.upper(), right.lower()) + || domain_less(upper(left), lower(right)) + || ( domain_equal(upper(left), lower(right)) && inner_bounds(left,right) != interval_bounds::open() ); } @@ -725,7 +727,7 @@ template typename boost::enable_if, bool>::type lower_less(const Type& left, const Type& right) { - return domain_less(left.lower(), right.lower()); + return domain_less(lower(left), lower(right)); } template @@ -740,9 +742,9 @@ typename boost::enable_if, bool>::type lower_less(const Type& left, const Type& right) { if(left_bounds(left,right) == interval_bounds::right_open()) //'[(' == 10 - return domain_less_equal(left.lower(), right.lower()); + return domain_less_equal(lower(left), lower(right)); else - return domain_less(left.lower(), right.lower()); + return domain_less(lower(left), lower(right)); } @@ -751,7 +753,7 @@ template typename boost::enable_if, bool>::type upper_less(const Type& left, const Type& right) { - return domain_less(left.upper(), right.upper()); + return domain_less(upper(left), upper(right)); } template @@ -766,9 +768,9 @@ typename boost::enable_if, bool>::type upper_less(const Type& left, const Type& right) { if(right_bounds(left,right) == interval_bounds::left_open()) - return domain_less_equal(left.upper(), right.upper()); + return domain_less_equal(upper(left), upper(right)); else - return domain_less(left.upper(), right.upper()); + return domain_less(upper(left), upper(right)); } //------------------------------------------------------------------------------ @@ -813,7 +815,7 @@ template typename boost::enable_if, bool>::type lower_equal(const Type& left, const Type& right) { - return domain_equal(left.lower(), right.lower()); + return domain_equal(lower(left), lower(right)); } template @@ -835,7 +837,7 @@ typename boost::enable_if, bool>::type lower_equal(const Type& left, const Type& right) { return (left.bounds().left()==right.bounds().left()) - && domain_equal(left.lower(), right.lower()); + && domain_equal(lower(left), lower(right)); } @@ -844,7 +846,7 @@ template typename boost::enable_if, bool>::type upper_equal(const Type& left, const Type& right) { - return domain_equal(left.upper(), right.upper()); + return domain_equal(upper(left), upper(right)); } template @@ -866,7 +868,7 @@ typename boost::enable_if, bool>::type upper_equal(const Type& left, const Type& right) { return (left.bounds().right()==right.bounds().right()) - && domain_equal(left.upper(), right.upper()); + && domain_equal(upper(left), upper(right)); } //------------------------------------------------------------------------------ @@ -949,7 +951,7 @@ typename boost::enable_if, bool>::type touches(const Type& left, const Type& right) { return is_complementary(inner_bounds(left,right)) - && domain_equal(left.upper(), right.lower()); + && domain_equal(upper(left), lower(right)); } @@ -1402,7 +1404,7 @@ distance(const Type& x1, const Type& x2) if(icl::is_empty(x1) || icl::is_empty(x2)) return icl::identity_element::value(); else if(domain_less(upper(x1), lower(x2))) - return x2.lower() - x1.upper(); + return lower(x2) - upper(x1); else if(domain_less(upper(x2), lower(x1))) return lower(x1) - upper(x2); else diff --git a/3party/boost/boost/icl/concept/interval_associator.hpp b/3party/boost/boost/icl/concept/interval_associator.hpp index cef360769a..24c6c4f043 100644 --- a/3party/boost/boost/icl/concept/interval_associator.hpp +++ b/3party/boost/boost/icl/concept/interval_associator.hpp @@ -325,6 +325,7 @@ operator += (Type& object, const OperandT& operand) } +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op + (T, c P&) T:{S}|{M} P:{e i S}|{b p M} //------------------------------------------------------------------------------ @@ -339,6 +340,26 @@ operator + (Type object, const OperandT& operand) return object += operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator + (const Type& object, const OperandT& operand) +{ + Type temp = object; + return boost::move(temp += operand); +} + +template +typename enable_if, Type>::type +operator + (Type&& object, const OperandT& operand) +{ + return boost::move(object += operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op + (c P&, T) T:{S}|{M} P:{e i S'}|{b p M'} //------------------------------------------------------------------------------ @@ -353,6 +374,26 @@ operator + (const OperandT& operand, Type object) return object += operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator + (const OperandT& operand, const Type& object) +{ + Type temp = object; + return boost::move(temp += operand); +} + +template +typename enable_if, Type>::type +operator + (const OperandT& operand, Type&& object) +{ + return boost::move(object += operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op + (T, c P&) T:{S}|{M} P:{S}|{M} //------------------------------------------------------------------------------ @@ -367,6 +408,38 @@ operator + (Type object, const Type& operand) return object += operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator + (const Type& object, const Type& operand) +{ + Type temp = object; + return boost::move(temp += operand); +} + +template +typename enable_if, Type>::type +operator + (Type&& object, const Type& operand) +{ + return boost::move(object += operand); +} + +template +typename enable_if, Type>::type +operator + (const Type& operand, Type&& object) +{ + return boost::move(object += operand); +} + +template +typename enable_if, Type>::type +operator + (Type&& object, Type&& operand) +{ + return boost::move(object += operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- Addition |=, | @@ -404,6 +477,7 @@ operator |= (Type& object, const OperandT& operand) return object += operand; } +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op | (T, c P&) T:{S}|{M} P:{e i S}|{b p M} //------------------------------------------------------------------------------ @@ -418,6 +492,26 @@ operator | (Type object, const OperandT& operand) return object += operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator | (const Type& object, const OperandT& operand) +{ + Type temp = object; + return boost::move(temp += operand); +} + +template +typename enable_if, Type>::type +operator | (Type&& object, const OperandT& operand) +{ + return boost::move(object += operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op | (T, c P&) T:{S}|{M} P:{S}|{M} //------------------------------------------------------------------------------ @@ -432,6 +526,26 @@ operator | (const OperandT& operand, Type object) return object += operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator | (const OperandT& operand, const Type& object) +{ + Type temp = object; + return boost::move(temp += operand); +} + +template +typename enable_if, Type>::type +operator | (const OperandT& operand, Type&& object) +{ + return boost::move(object += operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op | (T, c P&) T:{S}|{M} P:{S}|{M} //------------------------------------------------------------------------------ @@ -445,6 +559,39 @@ operator | (Type object, const Type& operand) { return object += operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator | (const Type& object, const Type& operand) +{ + Type temp = object; + return boost::move(temp += operand); +} + +template +typename enable_if, Type>::type +operator | (Type&& object, const Type& operand) +{ + return boost::move(object += operand); +} + +template +typename enable_if, Type>::type +operator | (const Type& operand, Type&& object) +{ + return boost::move(object += operand); +} + +template +typename enable_if, Type>::type +operator | (Type&& object, Type&& operand) +{ + return boost::move(object += operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + //============================================================================== //= Insertion @@ -458,7 +605,7 @@ insert(Type& object, const OperandT& operand) { typename Type::iterator prior_ = object.end(); ICL_const_FORALL(typename OperandT, elem_, operand) - insert(object, *elem_); + insert(object, prior_, *elem_); return object; } @@ -560,7 +707,7 @@ operator -= (Type& object, const IntervalSetT& operand) return erase(object, operand); } - +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op - (T, c P&) T:{S}|{M} P:{e i S'}|{e i b p S' M'} //------------------------------------------------------------------------------ @@ -571,6 +718,24 @@ operator - (Type object, const OperandT& operand) return object -= operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator - (const Type& object, const OperandT& operand) +{ + Type temp = object; + return boost::move(temp -= operand); +} + +template +typename enable_if, Type>::type +operator - (Type&& object, const OperandT& operand) +{ + return boost::move(object -= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES //============================================================================== //= Intersection @@ -611,6 +776,7 @@ operator &= (Type& object, const OperandT& operand) return object; } +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op & (T, c P&) T:{S}|{M} P:{e i S'}|{e i b p S' M'} S +typename enable_if, Type>::type +operator & (const Type& object, const OperandT& operand) +{ + Type temp = object; + return boost::move(temp &= operand); +} + +template +typename enable_if, Type>::type +operator & (Type&& object, const OperandT& operand) +{ + return boost::move(object &= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op & (c P&, T) T:{S}|{M} P:{e i S'}|{e i b p S' M'} S +typename enable_if, Type>::type +operator & (const OperandT& operand, const Type& object) +{ + Type temp = object; + return boost::move(temp &= operand); +} + +template +typename enable_if, Type>::type +operator & (const OperandT& operand, Type&& object) +{ + return boost::move(object &= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op & (T, c T&) T:{S M} //------------------------------------------------------------------------------ @@ -641,6 +847,39 @@ operator & (Type object, const Type& operand) return object &= operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator & (const Type& object, const Type& operand) +{ + Type temp = object; + return boost::move(temp &= operand); +} + +template +typename enable_if, Type>::type +operator & (Type&& object, const Type& operand) +{ + return boost::move(object &= operand); +} + +template +typename enable_if, Type>::type +operator & (const Type& operand, Type&& object) +{ + return boost::move(object &= operand); +} + +template +typename enable_if, Type>::type +operator & (Type&& object, Type&& operand) +{ + return boost::move(object &= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + //------------------------------------------------------------------------------ //- intersects //------------------------------------------------------------------------------ @@ -772,6 +1011,7 @@ operator ^= (Type& object, const OperandT& operand) return icl::flip(object, operand); } +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op ^ (T, c P&) T:{S}|{M} P:{e i S'}|{b p M'} S +typename enable_if, Type>::type +operator ^ (const Type& object, const OperandT& operand) +{ + Type temp = object; + return boost::move(temp ^= operand); +} + +template +typename enable_if, Type>::type +operator ^ (Type&& object, const OperandT& operand) +{ + return boost::move(object ^= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op ^ (c P&, T) T:{S}|{M} P:{e i S'}|{b p M'} S +typename enable_if, Type>::type +operator ^ (const OperandT& operand, const Type& object) +{ + Type temp = object; + return boost::move(temp ^= operand); +} + +template +typename enable_if, Type>::type +operator ^ (const OperandT& operand, Type&& object) +{ + return boost::move(object ^= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + +#ifdef BOOST_NO_RVALUE_REFERENCES //------------------------------------------------------------------------------ //- T op ^ (T, c T&) T:{S M} //------------------------------------------------------------------------------ @@ -802,6 +1082,39 @@ operator ^ (typename Type::overloadable_type object, const Type& operand) return object ^= operand; } +#else //BOOST_NO_RVALUE_REFERENCES + +template +typename enable_if, Type>::type +operator ^ (const Type& object, const Type& operand) +{ + Type temp = object; + return boost::move(temp ^= operand); +} + +template +typename enable_if, Type>::type +operator ^ (Type&& object, const Type& operand) +{ + return boost::move(object ^= operand); +} + +template +typename enable_if, Type>::type +operator ^ (const Type& operand, Type&& object) +{ + return boost::move(object ^= operand); +} + +template +typename enable_if, Type>::type +operator ^ (Type&& object, Type&& operand) +{ + return boost::move(object ^= operand); +} + +#endif //BOOST_NO_RVALUE_REFERENCES + //========================================================================== //= Element Iteration //========================================================================== diff --git a/3party/boost/boost/icl/functors.hpp b/3party/boost/boost/icl/functors.hpp index 1b4758fc5a..2401b2b801 100644 --- a/3party/boost/boost/icl/functors.hpp +++ b/3party/boost/boost/icl/functors.hpp @@ -22,14 +22,14 @@ namespace boost{namespace icl template struct identity_based_inplace_combine : public std::binary_function { - static Type identity_element() { return boost::icl::identity_element::value(); } + inline static Type identity_element() { return boost::icl::identity_element::value(); } }; // ------------------------------------------------------------------------ template struct unit_element_based_inplace_combine : public std::binary_function { - static Type identity_element() { return boost::icl::unit_element::value(); } + inline static Type identity_element() { return boost::icl::unit_element::value(); } }; // ------------------------------------------------------------------------ @@ -49,11 +49,13 @@ namespace boost{namespace icl : public identity_based_inplace_combine { typedef inplace_erasure type; + typedef identity_based_inplace_combine base_type; void operator()(Type& object, const Type& operand)const { if(object == operand) - object = Type(); + //identity_element(); //JODO Old gcc-3.4.4 does not compile this + object = base_type::identity_element(); //<-- but this. } }; @@ -112,8 +114,6 @@ namespace boost{namespace icl void operator()(Type& object, const Type& operand)const { object &= ~operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -140,8 +140,6 @@ namespace boost{namespace icl void operator()(Type& object, const Type& operand)const { object ^= operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; // ------------------------------------------------------------------------ @@ -165,8 +163,6 @@ namespace boost{namespace icl void operator()(Type& object, const Type& operand)const { object ^= operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -180,8 +176,6 @@ namespace boost{namespace icl void operator()(Type& object, const Type& operand)const { insert(object,operand); } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -195,8 +189,6 @@ namespace boost{namespace icl void operator()(Type& object, const Type& operand)const { erase(object,operand); } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -204,14 +196,12 @@ namespace boost{namespace icl // ------------------------------------------------------------------------ template struct inplace_star - : public identity_based_inplace_combine + : public identity_based_inplace_combine //JODO unit_element_ { typedef inplace_star type; void operator()(Type& object, const Type& operand)const { object *= operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -219,14 +209,12 @@ namespace boost{namespace icl // ------------------------------------------------------------------------ template struct inplace_slash - : public identity_based_inplace_combine + : public identity_based_inplace_combine //JODO unit_element_ { typedef inplace_slash type; void operator()(Type& object, const Type& operand)const { object /= operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -243,8 +231,6 @@ namespace boost{namespace icl if(object < operand) object = operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -261,8 +247,6 @@ namespace boost{namespace icl if(object > operand) object = operand; } - - static Type identity_element() { return boost::icl::identity_element::value(); } }; template<> @@ -340,6 +324,19 @@ namespace boost{namespace icl struct inverse > { typedef icl::inplace_max type; }; + template + struct inverse > + { typedef icl::inplace_erasure type; }; + + // If a Functor + template + struct inverse + { + typedef typename + remove_reference::type argument_type; + typedef icl::inplace_erasure type; + }; + //-------------------------------------------------------------------------- // Inverse inter_section functor diff --git a/3party/boost/boost/icl/gregorian.hpp b/3party/boost/boost/icl/gregorian.hpp index 883299c610..a101617093 100644 --- a/3party/boost/boost/icl/gregorian.hpp +++ b/3party/boost/boost/icl/gregorian.hpp @@ -77,12 +77,12 @@ namespace boost{namespace icl // ------------------------------------------------------------------------ - boost::gregorian::date operator ++(boost::gregorian::date& x) + inline boost::gregorian::date operator ++(boost::gregorian::date& x) { return x += boost::gregorian::date::duration_type::unit(); } - boost::gregorian::date operator --(boost::gregorian::date& x) + inline boost::gregorian::date operator --(boost::gregorian::date& x) { return x -= boost::gregorian::date::duration_type::unit(); } @@ -107,12 +107,12 @@ namespace boost{namespace icl typedef boost::gregorian::date_duration type; }; - boost::gregorian::date_duration operator ++(boost::gregorian::date_duration& x) + inline boost::gregorian::date_duration operator ++(boost::gregorian::date_duration& x) { return x += boost::gregorian::date::duration_type::unit(); } - boost::gregorian::date_duration operator --(boost::gregorian::date_duration& x) + inline boost::gregorian::date_duration operator --(boost::gregorian::date_duration& x) { return x -= boost::gregorian::date::duration_type::unit(); } diff --git a/3party/boost/boost/icl/impl_config.hpp b/3party/boost/boost/icl/impl_config.hpp index 5176360d0e..1f244d2390 100644 --- a/3party/boost/boost/icl/impl_config.hpp +++ b/3party/boost/boost/icl/impl_config.hpp @@ -1,6 +1,6 @@ /*-----------------------------------------------------------------------------+ Author: Joachim Faulhaber -Copyright (c) 2009-2009: Joachim Faulhaber +Copyright (c) 2009-2011: Joachim Faulhaber +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENCE.txt or copy at @@ -10,36 +10,37 @@ Copyright (c) 2009-2009: Joachim Faulhaber #define BOOST_ICL_IMPL_CONFIG_HPP_JOFA_091225 /*-----------------------------------------------------------------------------+ -You can choose an implementation for the basic set and map classes. -Select at most ONE of the following defines +| You can choose an implementation for the basic set and map classes. | +| Select at most ONE of the following defines to change the default | +-----------------------------------------------------------------------------*/ -//#define ICL_USE_STD_IMPLEMENTATION -//#define ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION -//#define ICL_USE_BOOST_MOVE_IMPLEMENTATION +//#define ICL_USE_STD_IMPLEMENTATION // Default +//#define ICL_USE_BOOST_MOVE_IMPLEMENTATION // Boost.Container +// ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION // No longer available /*-----------------------------------------------------------------------------+ -NO define or ICL_USE_STD_IMPLEMENTATION: Choose std::set and std::map as - implementing containers (default). - -ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: Choose set and map implementations - from boost::interprocess. - -ICL_USE_BOOST_MOVE_IMPLEMENTATION: Move aware containers from boost::container - (NEW) are used. Currently (January 2010) this is only experimental. - boost::move from the boost::sandbox has to be used. This is depreciated for - production code, as long as move aware containers are not officially - accepted into boost. +| NO define or ICL_USE_STD_IMPLEMENTATION: Choose std::set and std::map from | +| your local std implementation as implementing containers (DEFAULT). | +| Whether move semantics is available depends on the version of your local | +| STL. | +| | +| ICL_USE_BOOST_MOVE_IMPLEMENTATION: | +| Use move aware containers from boost::container. | +| | +| NOTE: ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: This define has been | +| available until boost version 1.48.0 and is no longer supported. | +-----------------------------------------------------------------------------*/ -#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION) -#define ICL_IMPL_SPACE boost::interprocess -#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) -#define ICL_IMPL_SPACE boost::container +#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) +# define ICL_IMPL_SPACE boost::container +#elif defined(ICL_USE_STD_IMPLEMENTATION) +# define ICL_IMPL_SPACE std #else -#define ICL_IMPL_SPACE std +# define ICL_IMPL_SPACE std #endif +#include + #endif // BOOST_ICL_IMPL_CONFIG_HPP_JOFA_091225 diff --git a/3party/boost/boost/icl/interval_base_map.hpp b/3party/boost/boost/icl/interval_base_map.hpp index 1baf58c7ca..9f265a67cd 100644 --- a/3party/boost/boost/icl/interval_base_map.hpp +++ b/3party/boost/boost/icl/interval_base_map.hpp @@ -1,5 +1,5 @@ /*-----------------------------------------------------------------------------+ -Copyright (c) 2007-2010: Joachim Faulhaber +Copyright (c) 2007-2012: Joachim Faulhaber Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. @@ -193,6 +193,7 @@ public: BOOST_STATIC_CONSTANT(int, fineness = 0); public: + //========================================================================== //= Construct, copy, destruct //========================================================================== @@ -214,13 +215,37 @@ public: BOOST_CONCEPT_ASSERT((EqualComparableConcept)); } - /** Assignment operator */ + /** Copy assignment operator */ interval_base_map& operator = (const interval_base_map& src) { this->_map = src._map; return *this; } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /** Move constructor */ + interval_base_map(interval_base_map&& src): _map(boost::move(src._map)) + { + BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept)); + BOOST_CONCEPT_ASSERT((LessThanComparableConcept)); + BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept)); + BOOST_CONCEPT_ASSERT((EqualComparableConcept)); + } + + /** Move assignment operator */ + interval_base_map& operator = (interval_base_map&& src) + { + this->_map = boost::move(src._map); + return *this; + } + + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES + /** swap the content of containers */ void swap(interval_base_map& object) { _map.swap(object._map); } diff --git a/3party/boost/boost/icl/interval_base_set.hpp b/3party/boost/boost/icl/interval_base_set.hpp index 0c9bb96b4a..b5bd4d5cbf 100644 --- a/3party/boost/boost/icl/interval_base_set.hpp +++ b/3party/boost/boost/icl/interval_base_set.hpp @@ -1,5 +1,5 @@ /*-----------------------------------------------------------------------------+ -Copyright (c) 2007-2009: Joachim Faulhaber +Copyright (c) 2007-2011: Joachim Faulhaber Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. @@ -11,12 +11,12 @@ Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin #include -#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION) -#include -#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) -#include -#else -#include +#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) +# include +#elif defined(ICL_USE_STD_IMPLEMENTATION) +# include +#else // Default for implementing containers +# include #endif #include @@ -162,7 +162,11 @@ public: interval_base_set(){} /** Copy constructor */ - interval_base_set(const interval_base_set& src): _set(src._set){} + interval_base_set(const interval_base_set& src): _set(src._set) + { + BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept)); + BOOST_CONCEPT_ASSERT((LessThanComparableConcept)); + } /** Assignment operator */ interval_base_set& operator = (const interval_base_set& src) @@ -171,6 +175,28 @@ public: return *this; } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /** Move constructor */ + interval_base_set(interval_base_set&& src): _set(boost::move(src._set)) + { + BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept)); + BOOST_CONCEPT_ASSERT((LessThanComparableConcept)); + } + + /** Move assignment operator */ + interval_base_set& operator = (interval_base_set&& src) + { + this->_set = boost::move(src._set); + return *this; + } + + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES + /** swap the content of containers */ void swap(interval_base_set& operand) { _set.swap(operand._set); } diff --git a/3party/boost/boost/icl/interval_map.hpp b/3party/boost/boost/icl/interval_map.hpp index 9e3b9bcc17..f743b3d53c 100644 --- a/3party/boost/boost/icl/interval_map.hpp +++ b/3party/boost/boost/icl/interval_map.hpp @@ -1,5 +1,5 @@ /*-----------------------------------------------------------------------------+ -Copyright (c) 2008-2009: Joachim Faulhaber +Copyright (c) 2008-2012: Joachim Faulhaber +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENCE.txt or copy at @@ -72,12 +72,13 @@ public: //========================================================================== //= Construct, copy, destruct //========================================================================== + /// Default constructor for the empty object interval_map(): base_type() {} + /// Copy constructor interval_map(const interval_map& src): base_type(src) {} - /// Copy constructor for base_type template explicit interval_map @@ -91,6 +92,7 @@ public: explicit interval_map(const value_type& value_pair): base_type() { this->add(value_pair); } + /// Assignment operator template interval_map& operator = @@ -106,12 +108,31 @@ public: typedef interval_base_map base_map_type; this->clear(); - // Can be implemented via _map.insert: Interval joining not necessary. iterator prior_ = this->_map.end(); ICL_const_FORALL(typename base_map_type, it_, src) prior_ = this->add(prior_, *it_); } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /// Move constructor + interval_map(interval_map&& src) + : base_type(boost::move(src)) + {} + + /// Move assignment operator + interval_map& operator = (interval_map&& src) + { + base_type::operator=(boost::move(src)); + return *this; + } + + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES + private: // Private functions that shall be accessible by the baseclass: friend class diff --git a/3party/boost/boost/icl/interval_set.hpp b/3party/boost/boost/icl/interval_set.hpp index 383c1ab516..890e29efa1 100644 --- a/3party/boost/boost/icl/interval_set.hpp +++ b/3party/boost/boost/icl/interval_set.hpp @@ -93,6 +93,7 @@ public: //========================================================================== /// Default constructor for the empty object interval_set(): base_type() {} + /// Copy constructor interval_set(const interval_set& src): base_type(src) {} @@ -107,6 +108,7 @@ public: /// Constructor for a single element explicit interval_set(const domain_type& value): base_type() { this->add(interval_type(value)); } + /// Constructor for a single interval explicit interval_set(const interval_type& itv): base_type() { @@ -135,6 +137,24 @@ public: prior_ = this->add(prior_, *it_); } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /// Move constructor + interval_set(interval_set&& src) + : base_type(boost::move(src)) + {} + + /// Move assignment operator + interval_set& operator = (interval_set&& src) + { + base_type::operator=(boost::move(src)); + return *this; + } + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES private: // Private functions that shall be accessible by the baseclass: diff --git a/3party/boost/boost/icl/map.hpp b/3party/boost/boost/icl/map.hpp index d5f16206a4..1aa37d6ec6 100644 --- a/3party/boost/boost/icl/map.hpp +++ b/3party/boost/boost/icl/map.hpp @@ -1,5 +1,5 @@ /*-----------------------------------------------------------------------------+ -Copyright (c) 2007-2010: Joachim Faulhaber +Copyright (c) 2007-2011: Joachim Faulhaber +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENCE.txt or copy at @@ -10,17 +10,15 @@ Copyright (c) 2007-2010: Joachim Faulhaber #include -#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION) -#include -#include -#include //FLAS -#include //FLAS -#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) -#include -#include -#else -#include -#include +#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) +# include +# include +#elif defined(ICL_USE_STD_IMPLEMENTATION) +# include +# include +#else // Default for implementing containers +# include +# include #endif #include @@ -194,7 +192,34 @@ public: insert(key_value_pair); } - map& operator=(const map& src) { base_type::operator=(src); return *this; } + map& operator = (const map& src) + { + base_type::operator=(src); + return *this; + } + +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + map(map&& src) + : base_type(boost::move(src)) + { + BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept)); + BOOST_CONCEPT_ASSERT((LessThanComparableConcept)); + BOOST_CONCEPT_ASSERT((DefaultConstructibleConcept)); + BOOST_CONCEPT_ASSERT((EqualComparableConcept)); + } + + map& operator = (map&& src) + { + base_type::operator=(src); + return *this; + } + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES + void swap(map& src) { base_type::swap(src); } //========================================================================== @@ -310,6 +335,14 @@ public: return base_type::insert(prior, value_pair); } + template + iterator insert(Iterator first, Iterator last) + { + iterator prior = end(), it = first; + while(it != last) + prior = this->insert(prior, *it++); + } + /** With key_value_pair = (k,v) set value \c v for key \c k */ map& set(const element_type& key_value_pair) { diff --git a/3party/boost/boost/icl/ptime.hpp b/3party/boost/boost/icl/ptime.hpp index 455963f199..42c2235ec2 100644 --- a/3party/boost/boost/icl/ptime.hpp +++ b/3party/boost/boost/icl/ptime.hpp @@ -76,12 +76,12 @@ namespace boost{namespace icl }; // ------------------------------------------------------------------------ - boost::posix_time::ptime operator ++(boost::posix_time::ptime& x) + inline boost::posix_time::ptime operator ++(boost::posix_time::ptime& x) { return x += boost::posix_time::ptime::time_duration_type::unit(); } - boost::posix_time::ptime operator --(boost::posix_time::ptime& x) + inline boost::posix_time::ptime operator --(boost::posix_time::ptime& x) { return x -= boost::posix_time::ptime::time_duration_type::unit(); } @@ -106,12 +106,12 @@ namespace boost{namespace icl typedef boost::posix_time::time_duration type; }; - boost::posix_time::time_duration operator ++(boost::posix_time::time_duration& x) + inline boost::posix_time::time_duration operator ++(boost::posix_time::time_duration& x) { return x += boost::posix_time::ptime::time_duration_type::unit(); } - boost::posix_time::time_duration operator --(boost::posix_time::time_duration& x) + inline boost::posix_time::time_duration operator --(boost::posix_time::time_duration& x) { return x -= boost::posix_time::ptime::time_duration_type::unit(); } diff --git a/3party/boost/boost/icl/separate_interval_set.hpp b/3party/boost/boost/icl/separate_interval_set.hpp index 866c3a697d..2292bd75be 100644 --- a/3party/boost/boost/icl/separate_interval_set.hpp +++ b/3party/boost/boost/icl/separate_interval_set.hpp @@ -82,7 +82,6 @@ public: /// const_iterator for iteration over intervals typedef typename ImplSetT::const_iterator const_iterator; - enum { fineness = 2 }; public: @@ -124,6 +123,24 @@ public: this->_set.insert(src.begin(), src.end()); } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /// Move constructor + separate_interval_set(separate_interval_set&& src) + : base_type(boost::move(src)) + {} + + /// Move assignment operator + separate_interval_set& operator = (separate_interval_set&& src) + { + base_type::operator=(boost::move(src)); + return *this; + } + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES private: // Private functions that shall be accessible by the baseclass: diff --git a/3party/boost/boost/icl/set.hpp b/3party/boost/boost/icl/set.hpp index 9c03df58a5..90e655f0d7 100644 --- a/3party/boost/boost/icl/set.hpp +++ b/3party/boost/boost/icl/set.hpp @@ -1,5 +1,5 @@ /*-----------------------------------------------------------------------------+ -Copyright (c) 2007-2010: Joachim Faulhaber +Copyright (c) 2007-2011: Joachim Faulhaber +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENCE.txt or copy at @@ -10,12 +10,12 @@ Copyright (c) 2007-2010: Joachim Faulhaber #include -#if defined(ICL_USE_BOOST_INTERPROCESS_IMPLEMENTATION) -#include -#elif defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) -#include +#if defined(ICL_USE_BOOST_MOVE_IMPLEMENTATION) +# include +#elif defined(ICL_USE_STD_IMPLEMENTATION) +# include #else -#include +# include #endif #include diff --git a/3party/boost/boost/icl/split_interval_map.hpp b/3party/boost/boost/icl/split_interval_map.hpp index c3e340f7a9..762ab5cc18 100644 --- a/3party/boost/boost/icl/split_interval_map.hpp +++ b/3party/boost/boost/icl/split_interval_map.hpp @@ -1,5 +1,5 @@ /*-----------------------------------------------------------------------------+ -Copyright (c) 2007-2009: Joachim Faulhaber +Copyright (c) 2007-2012: Joachim Faulhaber Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin +------------------------------------------------------------------------------+ Distributed under the Boost Software License, Version 1.0. @@ -68,6 +68,7 @@ public: //========================================================================== /// Default constructor for the empty object split_interval_map(): base_type() {} + /// Copy constructor split_interval_map(const split_interval_map& src): base_type(src) {} @@ -77,7 +78,7 @@ public: explicit split_interval_map(const value_type& value_pair): base_type() { this->add(value_pair); } - /// Assignment operator + /// Copy assignment operator template split_interval_map& operator = (const interval_base_map_map.insert(src.begin(), src.end()); } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /// Move constructor + split_interval_map(split_interval_map&& src) + : base_type(boost::move(src)) + {} + + /// Move assignment operator + split_interval_map& operator = (split_interval_map&& src) + { + base_type::operator=(boost::move(src)); + return *this; + } + + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES + private: // Private functions that shall be accessible by the baseclass: friend class diff --git a/3party/boost/boost/icl/split_interval_set.hpp b/3party/boost/boost/icl/split_interval_set.hpp index 6ede88ffb2..452a521fa4 100644 --- a/3party/boost/boost/icl/split_interval_set.hpp +++ b/3party/boost/boost/icl/split_interval_set.hpp @@ -118,6 +118,25 @@ public: this->_set.insert(src.begin(), src.end()); } +# ifndef BOOST_NO_RVALUE_REFERENCES + //========================================================================== + //= Move semantics + //========================================================================== + + /// Move constructor + split_interval_set(split_interval_set&& src) + : base_type(boost::move(src)) + {} + + /// Move assignment operator + split_interval_set& operator = (split_interval_set&& src) + { + base_type::operator=(boost::move(src)); + return *this; + } + //========================================================================== +# endif // BOOST_NO_RVALUE_REFERENCES + private: // Private functions that shall be accessible by the baseclass: diff --git a/3party/boost/boost/icl/type_traits/is_discrete.hpp b/3party/boost/boost/icl/type_traits/is_discrete.hpp index 094b1f7686..380bb19b7d 100644 --- a/3party/boost/boost/icl/type_traits/is_discrete.hpp +++ b/3party/boost/boost/icl/type_traits/is_discrete.hpp @@ -50,7 +50,6 @@ namespace boost{ namespace icl < has_rep_type , is_discrete::type> - //CL , is_non_floating_point::type> > > >::value diff --git a/3party/boost/boost/icl/type_traits/is_numeric.hpp b/3party/boost/boost/icl/type_traits/is_numeric.hpp index e0b987025f..ff7f550744 100644 --- a/3party/boost/boost/icl/type_traits/is_numeric.hpp +++ b/3party/boost/boost/icl/type_traits/is_numeric.hpp @@ -10,6 +10,7 @@ Copyright (c) 2010-2010: Joachim Faulhaber #include #include +#include #include #include #include diff --git a/3party/boost/boost/integer.hpp b/3party/boost/boost/integer.hpp index fc0b3983b9..35a1e10988 100644 --- a/3party/boost/boost/integer.hpp +++ b/3party/boost/boost/integer.hpp @@ -20,6 +20,7 @@ #include // for boost::::boost::integer_traits #include // for ::std::numeric_limits #include // for boost::int64_t and BOOST_NO_INTEGRAL_INT64_T +#include // // We simply cannot include this header on gcc without getting copious warnings of the kind: @@ -51,6 +52,7 @@ namespace boost // convert category to type template< int Category > struct int_least_helper {}; // default is empty + template< int Category > struct uint_least_helper {}; // default is empty // specializatons: 1=long, 2=int, 3=short, 4=signed char, // 6=unsigned long, 7=unsigned int, 8=unsigned short, 9=unsigned char @@ -65,14 +67,14 @@ namespace boost template<> struct int_least_helper<4> { typedef short least; }; template<> struct int_least_helper<5> { typedef signed char least; }; #ifdef BOOST_HAS_LONG_LONG - template<> struct int_least_helper<6> { typedef boost::ulong_long_type least; }; + template<> struct uint_least_helper<1> { typedef boost::ulong_long_type least; }; #elif defined(BOOST_HAS_MS_INT64) - template<> struct int_least_helper<6> { typedef unsigned __int64 least; }; + template<> struct uint_least_helper<1> { typedef unsigned __int64 least; }; #endif - template<> struct int_least_helper<7> { typedef unsigned long least; }; - template<> struct int_least_helper<8> { typedef unsigned int least; }; - template<> struct int_least_helper<9> { typedef unsigned short least; }; - template<> struct int_least_helper<10> { typedef unsigned char least; }; + template<> struct uint_least_helper<2> { typedef unsigned long least; }; + template<> struct uint_least_helper<3> { typedef unsigned int least; }; + template<> struct uint_least_helper<4> { typedef unsigned short least; }; + template<> struct uint_least_helper<5> { typedef unsigned char least; }; template struct exact_signed_base_helper{}; @@ -111,10 +113,12 @@ namespace boost template< int Bits > // bits (including sign) required struct int_t : public detail::exact_signed_base_helper { + BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::intmax_t) * CHAR_BIT), + "No suitable signed integer type with the requested number of bits is available."); typedef typename detail::int_least_helper < #ifdef BOOST_HAS_LONG_LONG - (Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) + + (Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) + #else 1 + #endif @@ -130,6 +134,8 @@ namespace boost template< int Bits > // bits required struct uint_t : public detail::exact_unsigned_base_helper { + BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::uintmax_t) * CHAR_BIT), + "No suitable unsigned integer type with the requested number of bits is available."); #if (defined(__BORLANDC__) || defined(__CODEGEAR__)) && defined(BOOST_NO_INTEGRAL_INT64_T) // It's really not clear why this workaround should be needed... shrug I guess! JM BOOST_STATIC_CONSTANT(int, s = @@ -140,11 +146,10 @@ namespace boost (Bits <= ::std::numeric_limits::digits)); typedef typename detail::int_least_helper< ::boost::uint_t::s>::least least; #else - typedef typename detail::int_least_helper + typedef typename detail::uint_least_helper < - 5 + #ifdef BOOST_HAS_LONG_LONG - (Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) + + (Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) + #else 1 + #endif @@ -217,7 +222,7 @@ namespace boost // It's really not clear why this workaround should be needed... shrug I guess! JM #if defined(BOOST_NO_INTEGRAL_INT64_T) BOOST_STATIC_CONSTANT(unsigned, which = - 6 + + 1 + (MaxValue <= ::boost::integer_traits::const_max) + (MaxValue <= ::boost::integer_traits::const_max) + (MaxValue <= ::boost::integer_traits::const_max) + @@ -225,18 +230,17 @@ namespace boost typedef typename detail::int_least_helper< ::boost::uint_value_t::which>::least least; #else // BOOST_NO_INTEGRAL_INT64_T BOOST_STATIC_CONSTANT(unsigned, which = - 5 + + 1 + (MaxValue <= ::boost::integer_traits::const_max) + (MaxValue <= ::boost::integer_traits::const_max) + (MaxValue <= ::boost::integer_traits::const_max) + (MaxValue <= ::boost::integer_traits::const_max) + (MaxValue <= ::boost::integer_traits::const_max)); - typedef typename detail::int_least_helper< ::boost::uint_value_t::which>::least least; + typedef typename detail::uint_least_helper< ::boost::uint_value_t::which>::least least; #endif // BOOST_NO_INTEGRAL_INT64_T #else - typedef typename detail::int_least_helper + typedef typename detail::uint_least_helper < - 5 + #if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG) (MaxValue <= ::boost::integer_traits::const_max) + #else diff --git a/3party/boost/boost/integer_traits.hpp b/3party/boost/boost/integer_traits.hpp index 774d058875..e504cd12e3 100644 --- a/3party/boost/boost/integer_traits.hpp +++ b/3party/boost/boost/integer_traits.hpp @@ -5,7 +5,7 @@ * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * - * $Id: integer_traits.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $ + * $Id: integer_traits.hpp 79771 2012-07-27 18:15:55Z jewillco $ * * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers */ diff --git a/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp index 05043dacc5..a85202b4ee 100644 --- a/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include @@ -28,21 +28,21 @@ #include #include #include -#include +#include #include #include #include #include //!\file -//!Describes adaptive_pool pooled shared memory STL compatible allocator +//!Describes adaptive_pool pooled shared memory STL compatible allocator namespace boost { namespace interprocess { /// @cond -namespace detail{ +namespace ipcdetail{ template < unsigned int Version , class T @@ -71,7 +71,7 @@ class adaptive_pool_base template struct node_pool { - typedef detail::shared_adaptive_node_pool + typedef ipcdetail::shared_adaptive_node_pool < SegmentManager, sizeof_value::value, NodesPerBlock, MaxFreeBlocks, OverheadPercent> type; static type *get(void *p) @@ -83,27 +83,29 @@ class adaptive_pool_base public: //------- - typedef typename boost:: - pointer_to_other::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; typedef boost::interprocess::version_type version; - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; - //!Obtains adaptive_pool_base from + //!Obtains adaptive_pool_base from //!adaptive_pool_base template struct rebind - { + { typedef adaptive_pool_base other; }; @@ -120,15 +122,15 @@ class adaptive_pool_base //!Constructor from a segment manager. If not present, constructs a node //!pool. Increments the reference count of the associated node pool. //!Can throw boost::interprocess::bad_alloc - adaptive_pool_base(segment_manager *segment_mngr) - : mp_node_pool(detail::get_or_create_node_pool::type>(segment_mngr)) { } + adaptive_pool_base(segment_manager *segment_mngr) + : mp_node_pool(ipcdetail::get_or_create_node_pool::type>(segment_mngr)) { } - //!Copy constructor from other adaptive_pool_base. Increments the reference + //!Copy constructor from other adaptive_pool_base. Increments the reference //!count of the associated node pool. Never throws - adaptive_pool_base(const adaptive_pool_base &other) - : mp_node_pool(other.get_node_pool()) - { - node_pool<0>::get(detail::get_pointer(mp_node_pool))->inc_ref_count(); + adaptive_pool_base(const adaptive_pool_base &other) + : mp_node_pool(other.get_node_pool()) + { + node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->inc_ref_count(); } //!Assignment from other adaptive_pool_base @@ -145,27 +147,27 @@ class adaptive_pool_base template adaptive_pool_base (const adaptive_pool_base &other) - : mp_node_pool(detail::get_or_create_node_pool::type>(other.get_segment_manager())) { } + : mp_node_pool(ipcdetail::get_or_create_node_pool::type>(other.get_segment_manager())) { } //!Destructor, removes node_pool_t from memory //!if its reference count reaches to zero. Never throws - ~adaptive_pool_base() - { detail::destroy_node_pool_if_last_link(node_pool<0>::get(detail::get_pointer(mp_node_pool))); } + ~adaptive_pool_base() + { ipcdetail::destroy_node_pool_if_last_link(node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))); } //!Returns a pointer to the node pool. //!Never throws void* get_node_pool() const - { return detail::get_pointer(mp_node_pool); } + { return ipcdetail::to_raw_pointer(mp_node_pool); } //!Returns the segment manager. //!Never throws segment_manager* get_segment_manager()const - { return node_pool<0>::get(detail::get_pointer(mp_node_pool))->get_segment_manager(); } + { return node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->get_segment_manager(); } //!Swaps allocators. Does not throw. If each allocator is placed in a //!different memory segment, the result is undefined. friend void swap(self_t &alloc1, self_t &alloc2) - { detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); } + { ipcdetail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); } /// @cond private: @@ -176,14 +178,14 @@ class adaptive_pool_base //!Equality test for same type //!of adaptive_pool_base template inline -bool operator==(const adaptive_pool_base &alloc1, +bool operator==(const adaptive_pool_base &alloc1, const adaptive_pool_base &alloc2) { return alloc1.get_node_pool() == alloc2.get_node_pool(); } //!Inequality test for same type //!of adaptive_pool_base template inline -bool operator!=(const adaptive_pool_base &alloc1, +bool operator!=(const adaptive_pool_base &alloc1, const adaptive_pool_base &alloc2) { return alloc1.get_node_pool() != alloc2.get_node_pool(); } @@ -204,16 +206,16 @@ class adaptive_pool_v1 > { public: - typedef detail::adaptive_pool_base + typedef ipcdetail::adaptive_pool_base < 1, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t; template struct rebind - { + { typedef adaptive_pool_v1 other; }; - adaptive_pool_v1(SegmentManager *segment_mngr) + adaptive_pool_v1(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -224,17 +226,17 @@ class adaptive_pool_v1 {} }; -} //namespace detail{ +} //namespace ipcdetail{ /// @endcond -//!An STL node allocator that uses a segment manager as memory +//!An STL node allocator that uses a segment manager as memory //!source. The internal pointer type will of the same type (raw, smart) as //!"typename SegmentManager::void_pointer" type. This allows //!placing the allocator in shared memory, memory mapped-files, etc... //! -//!This node allocator shares a segregated storage between all instances -//!of adaptive_pool with equal sizeof(T) placed in the same segment +//!This node allocator shares a segregated storage between all instances +//!of adaptive_pool with equal sizeof(T) placed in the same segment //!group. NodesPerBlock is the number of nodes allocated at once when the allocator //!needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks //!that the adaptive node pool will hold. The rest of the totally free blocks will be @@ -250,7 +252,7 @@ template < class T > class adaptive_pool /// @cond - : public detail::adaptive_pool_base + : public ipcdetail::adaptive_pool_base < 2 , T , SegmentManager @@ -262,18 +264,18 @@ class adaptive_pool { #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED - typedef detail::adaptive_pool_base + typedef ipcdetail::adaptive_pool_base < 2, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t; public: typedef boost::interprocess::version_type version; template struct rebind - { + { typedef adaptive_pool other; }; - adaptive_pool(SegmentManager *segment_mngr) + adaptive_pool(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -290,18 +292,18 @@ class adaptive_pool typedef implementation_defined::pointer pointer; typedef implementation_defined::const_pointer const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; - //!Obtains adaptive_pool from + //!Obtains adaptive_pool from //!adaptive_pool template struct rebind - { + { typedef adaptive_pool other; }; @@ -312,7 +314,7 @@ class adaptive_pool adaptive_pool& operator= (const adaptive_pool&); - //!Not assignable from + //!Not assignable from //!other adaptive_pool //adaptive_pool& operator=(const adaptive_pool&); @@ -322,7 +324,7 @@ class adaptive_pool //!Can throw boost::interprocess::bad_alloc adaptive_pool(segment_manager *segment_mngr); - //!Copy constructor from other adaptive_pool. Increments the reference + //!Copy constructor from other adaptive_pool. Increments the reference //!count of the associated node pool. Never throws adaptive_pool(const adaptive_pool &other); @@ -349,7 +351,7 @@ class adaptive_pool //!Never throws size_type max_size() const; - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0); @@ -372,15 +374,15 @@ class adaptive_pool //!Returns address of non mutable object. //!Never throws const_pointer address(const_reference value) const; - - //!Copy construct an object. +/* + //!Copy construct an object. //!Throws if T's copy constructor throws void construct(const pointer &ptr, const_reference v); //!Destroys object. Throws if object's //!destructor throws void destroy(const pointer &ptr); - +*/ //!Returns maximum the number of objects the previously allocated memory //!pointed by p can hold. This size only works for memory allocated with //!allocate, allocation_command and allocate_many. @@ -388,7 +390,7 @@ class adaptive_pool std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0); @@ -398,7 +400,7 @@ class adaptive_pool //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements); + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements); //!Allocates n_elements elements, each one of size elem_sizes[i]in a //!contiguous block @@ -424,7 +426,7 @@ class adaptive_pool //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements); + multiallocation_chain allocate_individual(size_type num_elements); //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated @@ -446,13 +448,13 @@ class adaptive_pool //!Equality test for same type //!of adaptive_pool template inline -bool operator==(const adaptive_pool &alloc1, +bool operator==(const adaptive_pool &alloc1, const adaptive_pool &alloc2); //!Inequality test for same type //!of adaptive_pool template inline -bool operator!=(const adaptive_pool &alloc1, +bool operator!=(const adaptive_pool &alloc1, const adaptive_pool &alloc2); #endif diff --git a/3party/boost/boost/interprocess/allocators/allocator.hpp b/3party/boost/boost/interprocess/allocators/allocator.hpp index 2c86f57351..38e8c6901a 100644 --- a/3party/boost/boost/interprocess/allocators/allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/allocator.hpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,11 +18,11 @@ #include #include -#include +#include #include #include -#include +#include #include #include #include @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -44,12 +45,12 @@ namespace boost { namespace interprocess { -//!An STL compatible allocator that uses a segment manager as +//!An STL compatible allocator that uses a segment manager as //!memory source. The internal pointer type will of the same type (raw, smart) as //!"typename SegmentManager::void_pointer" type. This allows //!placing the allocator in shared memory, memory mapped-files, etc... template -class allocator +class allocator { public: //Segment manager @@ -66,13 +67,14 @@ class allocator typedef typename segment_manager::void_pointer aux_pointer_t; //Typedef to const void pointer - typedef typename - boost::pointer_to_other - ::type cvoid_ptr; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type cvoid_ptr; //Pointer to the allocator - typedef typename boost::pointer_to_other - ::type alloc_ptr_t; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type alloc_ptr_t; //Not assignable from related allocator template @@ -87,23 +89,25 @@ class allocator public: typedef T value_type; - typedef typename boost::pointer_to_other - ::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; - typedef typename detail::add_reference + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; typedef boost::interprocess::version_type version; /// @cond //Experimental. Don't use. - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; /// @endcond @@ -111,32 +115,32 @@ class allocator //!objects of type T2 template struct rebind - { + { typedef allocator other; }; //!Returns the segment manager. //!Never throws segment_manager* get_segment_manager()const - { return detail::get_pointer(mp_mngr); } + { return ipcdetail::to_raw_pointer(mp_mngr); } //!Constructor from the segment manager. //!Never throws - allocator(segment_manager *segment_mngr) + allocator(segment_manager *segment_mngr) : mp_mngr(segment_mngr) { } //!Constructor from other allocator. //!Never throws - allocator(const allocator &other) + allocator(const allocator &other) : mp_mngr(other.get_segment_manager()){ } //!Constructor from related allocator. //!Never throws template - allocator(const allocator &other) + allocator(const allocator &other) : mp_mngr(other.get_segment_manager()){} - //!Allocates memory for an array of count elements. + //!Allocates memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_ptr hint = 0) { @@ -149,7 +153,7 @@ class allocator //!Deallocates memory previously allocated. //!Never throws void deallocate(const pointer &ptr, size_type) - { mp_mngr->deallocate((void*)detail::get_pointer(ptr)); } + { mp_mngr->deallocate((void*)ipcdetail::to_raw_pointer(ptr)); } //!Returns the number of elements that could be allocated. //!Never throws @@ -159,24 +163,24 @@ class allocator //!Swap segment manager. Does not throw. If each allocator is placed in //!different memory segments, the result is undefined. friend void swap(self_t &alloc1, self_t &alloc2) - { detail::do_swap(alloc1.mp_mngr, alloc2.mp_mngr); } + { ipcdetail::do_swap(alloc1.mp_mngr, alloc2.mp_mngr); } //!Returns maximum the number of objects the previously allocated memory //!pointed by p can hold. This size only works for memory allocated with //!allocate, allocation_command and allocate_many. size_type size(const pointer &p) const - { - return (size_type)mp_mngr->size(detail::get_pointer(p))/sizeof(T); + { + return (size_type)mp_mngr->size(ipcdetail::to_raw_pointer(p))/sizeof(T); } std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0) { return mp_mngr->allocation_command - (command, limit_size, preferred_size, received_size, detail::get_pointer(reuse)); + (command, limit_size, preferred_size, received_size, ipcdetail::to_raw_pointer(reuse)); } //!Allocates many elements of size elem_size in a contiguous block @@ -186,7 +190,7 @@ class allocator //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) multiallocation_chain allocate_many - (size_type elem_size, std::size_t num_elements) + (size_type elem_size, size_type num_elements) { return multiallocation_chain(mp_mngr->allocate_many(sizeof(T)*elem_size, num_elements)); } @@ -224,7 +228,7 @@ class allocator //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). multiallocation_chain allocate_individual - (std::size_t num_elements) + (size_type num_elements) { return this->allocate_many(1, num_elements); } //!Deallocates memory previously allocated with allocate_one(). @@ -240,7 +244,7 @@ class allocator //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). void deallocate_individual(multiallocation_chain chain) - { return this->deallocate_many(boost::interprocess::move(chain)); } + { return this->deallocate_many(boost::move(chain)); } //!Returns address of mutable object. //!Never throws @@ -252,33 +256,31 @@ class allocator const_pointer address(const_reference value) const { return const_pointer(boost::addressof(value)); } - //!Copy construct an object - //!Throws if T's copy constructor throws - void construct(const pointer &ptr, const_reference v) - { new((void*)detail::get_pointer(ptr)) value_type(v); } - - //!Default construct an object. - //!Throws if T's default constructor throws - void construct(const pointer &ptr) - { new((void*)detail::get_pointer(ptr)) value_type; } + //!Constructs an object + //!Throws if T's constructor throws + //!For backwards compatibility with libraries using C++03 allocators + template + void construct(const pointer &ptr, BOOST_FWD_REF(P) p) + { ::new((void*)ipcdetail::to_raw_pointer(ptr)) value_type(::boost::forward

(p)); } //!Destroys object. Throws if object's //!destructor throws void destroy(const pointer &ptr) { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); } + }; //!Equality test for same type //!of allocator template inline -bool operator==(const allocator &alloc1, +bool operator==(const allocator &alloc1, const allocator &alloc2) { return alloc1.get_segment_manager() == alloc2.get_segment_manager(); } //!Inequality test for same type //!of allocator template inline -bool operator!=(const allocator &alloc1, +bool operator!=(const allocator &alloc1, const allocator &alloc2) { return alloc1.get_segment_manager() != alloc2.get_segment_manager(); } @@ -293,7 +295,7 @@ template struct has_trivial_destructor > { - enum { value = true }; + static const bool value = true; }; /// @endcond diff --git a/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp index 0f650bf54f..98af033fe6 100644 --- a/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -28,14 +28,14 @@ #include //!\file -//!Describes cached_adaptive_pool pooled shared memory STL compatible allocator +//!Describes cached_adaptive_pool pooled shared memory STL compatible allocator namespace boost { namespace interprocess { /// @cond -namespace detail { +namespace ipcdetail { template < class T , class SegmentManager @@ -44,9 +44,9 @@ template < class T , unsigned char OverheadPercent = 5 > class cached_adaptive_pool_v1 - : public detail::cached_allocator_impl + : public ipcdetail::cached_allocator_impl < T - , detail::shared_adaptive_node_pool + , ipcdetail::shared_adaptive_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -56,9 +56,9 @@ class cached_adaptive_pool_v1 , 1> { public: - typedef detail::cached_allocator_impl + typedef ipcdetail::cached_allocator_impl < T - , detail::shared_adaptive_node_pool + , ipcdetail::shared_adaptive_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -69,13 +69,15 @@ class cached_adaptive_pool_v1 template struct rebind - { + { typedef cached_adaptive_pool_v1 other; }; + typedef typename base_t::size_type size_type; + cached_adaptive_pool_v1(SegmentManager *segment_mngr, - std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) + size_type max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) : base_t(segment_mngr, max_cached_nodes) {} @@ -87,16 +89,16 @@ class cached_adaptive_pool_v1 {} }; -} //namespace detail{ +} //namespace ipcdetail{ /// @endcond -//!An STL node allocator that uses a segment manager as memory +//!An STL node allocator that uses a segment manager as memory //!source. The internal pointer type will of the same type (raw, smart) as //!"typename SegmentManager::void_pointer" type. This allows //!placing the allocator in shared memory, memory mapped-files, etc... //! -//!This node allocator shares a segregated storage between all instances of +//!This node allocator shares a segregated storage between all instances of //!cached_adaptive_pool with equal sizeof(T) placed in the same //!memory segment. But also caches some nodes privately to //!avoid some synchronization overhead. @@ -116,9 +118,9 @@ template < class T > class cached_adaptive_pool /// @cond - : public detail::cached_allocator_impl + : public ipcdetail::cached_allocator_impl < T - , detail::shared_adaptive_node_pool + , ipcdetail::shared_adaptive_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -131,9 +133,9 @@ class cached_adaptive_pool #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED public: - typedef detail::cached_allocator_impl + typedef ipcdetail::cached_allocator_impl < T - , detail::shared_adaptive_node_pool + , ipcdetail::shared_adaptive_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -147,13 +149,13 @@ class cached_adaptive_pool template struct rebind - { + { typedef cached_adaptive_pool other; }; cached_adaptive_pool(SegmentManager *segment_mngr, - std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) + std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) : base_t(segment_mngr, max_cached_nodes) {} @@ -170,18 +172,18 @@ class cached_adaptive_pool typedef implementation_defined::pointer pointer; typedef implementation_defined::const_pointer const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; - //!Obtains cached_adaptive_pool from + //!Obtains cached_adaptive_pool from //!cached_adaptive_pool template struct rebind - { + { typedef cached_adaptive_pool other; }; @@ -192,7 +194,7 @@ class cached_adaptive_pool cached_adaptive_pool& operator= (const cached_adaptive_pool&); - //!Not assignable from + //!Not assignable from //!other cached_adaptive_pool cached_adaptive_pool& operator=(const cached_adaptive_pool&); @@ -202,7 +204,7 @@ class cached_adaptive_pool //!Can throw boost::interprocess::bad_alloc cached_adaptive_pool(segment_manager *segment_mngr); - //!Copy constructor from other cached_adaptive_pool. Increments the reference + //!Copy constructor from other cached_adaptive_pool. Increments the reference //!count of the associated node pool. Never throws cached_adaptive_pool(const cached_adaptive_pool &other); @@ -229,7 +231,7 @@ class cached_adaptive_pool //!Never throws size_type max_size() const; - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0); @@ -253,7 +255,7 @@ class cached_adaptive_pool //!Never throws const_pointer address(const_reference value) const; - //!Copy construct an object. + //!Copy construct an object. //!Throws if T's copy constructor throws void construct(const pointer &ptr, const_reference v); @@ -268,7 +270,7 @@ class cached_adaptive_pool std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0); @@ -278,7 +280,7 @@ class cached_adaptive_pool //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements); + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements); //!Allocates n_elements elements, each one of size elem_sizes[i]in a //!contiguous block @@ -304,7 +306,7 @@ class cached_adaptive_pool //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements); + multiallocation_chain allocate_individual(size_type num_elements); //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated @@ -320,11 +322,11 @@ class cached_adaptive_pool void deallocate_individual(multiallocation_chain chain); //!Sets the new max cached nodes value. This can provoke deallocations //!if "newmax" is less than current cached nodes. Never throws - void set_max_cached_nodes(std::size_t newmax); + void set_max_cached_nodes(size_type newmax); //!Returns the max cached nodes parameter. //!Never throws - std::size_t get_max_cached_nodes() const; + size_type get_max_cached_nodes() const; #endif }; @@ -333,13 +335,13 @@ class cached_adaptive_pool //!Equality test for same type //!of cached_adaptive_pool template inline -bool operator==(const cached_adaptive_pool &alloc1, +bool operator==(const cached_adaptive_pool &alloc1, const cached_adaptive_pool &alloc2); //!Inequality test for same type //!of cached_adaptive_pool template inline -bool operator!=(const cached_adaptive_pool &alloc1, +bool operator!=(const cached_adaptive_pool &alloc1, const cached_adaptive_pool &alloc2); #endif diff --git a/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp b/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp index 0dda9e212c..b0ad0e4ebc 100644 --- a/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -28,7 +28,7 @@ #include //!\file -//!Describes cached_cached_node_allocator pooled shared memory STL compatible allocator +//!Describes cached_cached_node_allocator pooled shared memory STL compatible allocator namespace boost { namespace interprocess { @@ -36,16 +36,16 @@ namespace interprocess { /// @cond -namespace detail { +namespace ipcdetail { template < class T , class SegmentManager , std::size_t NodesPerBlock = 64 > class cached_node_allocator_v1 - : public detail::cached_allocator_impl + : public ipcdetail::cached_allocator_impl < T - , detail::shared_node_pool + , ipcdetail::shared_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -53,9 +53,9 @@ class cached_node_allocator_v1 , 1> { public: - typedef detail::cached_allocator_impl + typedef ipcdetail::cached_allocator_impl < T - , detail::shared_node_pool + , ipcdetail::shared_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -64,13 +64,15 @@ class cached_node_allocator_v1 template struct rebind - { + { typedef cached_node_allocator_v1 other; }; + typedef typename base_t::size_type size_type; + cached_node_allocator_v1(SegmentManager *segment_mngr, - std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) + size_type max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) : base_t(segment_mngr, max_cached_nodes) {} @@ -82,7 +84,7 @@ class cached_node_allocator_v1 {} }; -} //namespace detail{ +} //namespace ipcdetail{ /// @endcond @@ -92,9 +94,9 @@ template < class T > class cached_node_allocator /// @cond - : public detail::cached_allocator_impl + : public ipcdetail::cached_allocator_impl < T - , detail::shared_node_pool + , ipcdetail::shared_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -105,9 +107,9 @@ class cached_node_allocator #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED public: - typedef detail::cached_allocator_impl + typedef ipcdetail::cached_allocator_impl < T - , detail::shared_node_pool + , ipcdetail::shared_node_pool < SegmentManager , sizeof_value::value , NodesPerBlock @@ -116,15 +118,16 @@ class cached_node_allocator public: typedef boost::interprocess::version_type version; + typedef typename base_t::size_type size_type; template struct rebind - { + { typedef cached_node_allocator other; }; cached_node_allocator(SegmentManager *segment_mngr, - std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) + size_type max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES) : base_t(segment_mngr, max_cached_nodes) {} @@ -141,18 +144,18 @@ class cached_node_allocator typedef implementation_defined::pointer pointer; typedef implementation_defined::const_pointer const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename SegmentManager::size_type size_type; + typedef typename SegmentManager::difference_type difference_type; - //!Obtains cached_node_allocator from + //!Obtains cached_node_allocator from //!cached_node_allocator template struct rebind - { + { typedef cached_node_allocator other; }; @@ -163,7 +166,7 @@ class cached_node_allocator cached_node_allocator& operator= (const cached_node_allocator&); - //!Not assignable from + //!Not assignable from //!other cached_node_allocator cached_node_allocator& operator=(const cached_node_allocator&); @@ -173,7 +176,7 @@ class cached_node_allocator //!Can throw boost::interprocess::bad_alloc cached_node_allocator(segment_manager *segment_mngr); - //!Copy constructor from other cached_node_allocator. Increments the reference + //!Copy constructor from other cached_node_allocator. Increments the reference //!count of the associated node pool. Never throws cached_node_allocator(const cached_node_allocator &other); @@ -200,7 +203,7 @@ class cached_node_allocator //!Never throws size_type max_size() const; - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0); @@ -224,7 +227,7 @@ class cached_node_allocator //!Never throws const_pointer address(const_reference value) const; - //!Default construct an object. + //!Default construct an object. //!Throws if T's default constructor throws void construct(const pointer &ptr, const_reference v); @@ -239,7 +242,7 @@ class cached_node_allocator std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0); @@ -249,7 +252,7 @@ class cached_node_allocator //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements); + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements); //!Allocates n_elements elements, each one of size elem_sizes[i]in a //!contiguous block @@ -275,7 +278,7 @@ class cached_node_allocator //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements); + multiallocation_chain allocate_individual(size_type num_elements); //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated @@ -291,11 +294,11 @@ class cached_node_allocator void deallocate_individual(multiallocation_chain it); //!Sets the new max cached nodes value. This can provoke deallocations //!if "newmax" is less than current cached nodes. Never throws - void set_max_cached_nodes(std::size_t newmax); + void set_max_cached_nodes(size_type newmax); //!Returns the max cached nodes parameter. //!Never throws - std::size_t get_max_cached_nodes() const; + size_type get_max_cached_nodes() const; #endif }; @@ -304,13 +307,13 @@ class cached_node_allocator //!Equality test for same type //!of cached_node_allocator template inline -bool operator==(const cached_node_allocator &alloc1, +bool operator==(const cached_node_allocator &alloc1, const cached_node_allocator &alloc2); //!Inequality test for same type //!of cached_node_allocator template inline -bool operator!=(const cached_node_allocator &alloc1, +bool operator!=(const cached_node_allocator &alloc1, const cached_node_allocator &alloc2); #endif diff --git a/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp b/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp index 99cee8aef3..abe183146f 100644 --- a/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -17,7 +17,6 @@ #include #include -#include #include #include #include @@ -28,7 +27,7 @@ #include #include #include -#include +#include #include //!\file @@ -36,7 +35,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { template< class SegmentManager , std::size_t NodeSize @@ -45,10 +44,10 @@ template< class SegmentManager , unsigned char OverheadPercent > class private_adaptive_node_pool - : public boost::container::containers_detail::private_adaptive_node_pool_impl + : public boost::container::container_detail::private_adaptive_node_pool_impl { - typedef boost::container::containers_detail::private_adaptive_node_pool_impl + typedef boost::container::container_detail::private_adaptive_node_pool_impl base_t; //Non-copyable private_adaptive_node_pool(); @@ -56,12 +55,13 @@ class private_adaptive_node_pool private_adaptive_node_pool &operator=(const private_adaptive_node_pool &); public: - typedef SegmentManager segment_manager; + typedef SegmentManager segment_manager; + typedef typename base_t::size_type size_type; - static const std::size_t nodes_per_block = NodesPerBlock; + static const size_type nodes_per_block = NodesPerBlock; //Deprecated, use node_per_block - static const std::size_t nodes_per_chunk = NodesPerBlock; + static const size_type nodes_per_chunk = NodesPerBlock; //!Constructor from a segment manager. Never throws private_adaptive_node_pool(segment_manager *segment_mngr) @@ -74,7 +74,7 @@ class private_adaptive_node_pool }; //!Pooled shared memory allocator using adaptive pool. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template< class SegmentManager @@ -83,13 +83,13 @@ template< class SegmentManager , std::size_t MaxFreeBlocks , unsigned char OverheadPercent > -class shared_adaptive_node_pool - : public detail::shared_pool_impl +class shared_adaptive_node_pool + : public ipcdetail::shared_pool_impl < private_adaptive_node_pool > { - typedef detail::shared_pool_impl + typedef ipcdetail::shared_pool_impl < private_adaptive_node_pool > base_t; @@ -99,7 +99,7 @@ class shared_adaptive_node_pool {} }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp b/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp index 6dbe33d4a4..ba14d3f64d 100644 --- a/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp @@ -14,25 +14,24 @@ #include #include -#include +#include #include -#include //get_pointer -#include //std::pair +#include //to_raw_pointer #include //boost::addressof #include //BOOST_ASSERT -#include #include //bad_alloc #include //scoped_lock #include //boost::interprocess::allocation_type -#include +#include #include #include -#include //std::swap -#include - +#include #include #include +#include //std::swap +#include //std::pair +#include namespace boost { namespace interprocess { @@ -67,14 +66,14 @@ struct sizeof_value static const std::size_t value = sizeof(void*); }; -namespace detail { +namespace ipcdetail { //!Object function that creates the node allocator if it is not created and //!increments reference count if it is already created template struct get_or_create_node_pool_func { - + //!This connects or constructs the unique instance of node_pool_t //!Can throw boost::interprocess::bad_alloc void operator()() @@ -91,7 +90,7 @@ struct get_or_create_node_pool_func //!object parameters get_or_create_node_pool_func(typename NodePool::segment_manager *mngr) : mp_segment_manager(mngr){} - + NodePool *mp_node_pool; typename NodePool::segment_manager *mp_segment_manager; }; @@ -99,18 +98,18 @@ struct get_or_create_node_pool_func template inline NodePool *get_or_create_node_pool(typename NodePool::segment_manager *mgnr) { - detail::get_or_create_node_pool_func func(mgnr); + ipcdetail::get_or_create_node_pool_func func(mgnr); mgnr->atomic_func(func); return func.mp_node_pool; } -//!Object function that decrements the reference count. If the count -//!reaches to zero destroys the node allocator from memory. +//!Object function that decrements the reference count. If the count +//!reaches to zero destroys the node allocator from memory. //!Never throws template struct destroy_if_last_link_func { - //!Decrements reference count and destroys the object if there is no + //!Decrements reference count and destroys the object if there is no //!more attached allocators. Never throws void operator()() { @@ -118,19 +117,19 @@ struct destroy_if_last_link_func if(mp_node_pool->dec_ref_count() != 0) return; //Last link, let's destroy the segment_manager - mp_node_pool->get_segment_manager()->template destroy(boost::interprocess::unique_instance); - } + mp_node_pool->get_segment_manager()->template destroy(boost::interprocess::unique_instance); + } //!Constructor. Initializes function //!object parameters - destroy_if_last_link_func(NodePool *pool) + destroy_if_last_link_func(NodePool *pool) : mp_node_pool(pool) {} NodePool *mp_node_pool; }; -//!Destruction function, initializes and executes destruction function +//!Destruction function, initializes and executes destruction function //!object. Never throws template inline void destroy_node_pool_if_last_link(NodePool *pool) @@ -147,17 +146,19 @@ class cache_impl { typedef typename NodePool::segment_manager:: void_pointer void_pointer; - typedef typename pointer_to_other - ::type node_pool_ptr; - typedef typename NodePool::multiallocation_chain multiallocation_chain; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type node_pool_ptr; + typedef typename NodePool::multiallocation_chain multiallocation_chain; + typedef typename NodePool::segment_manager::size_type size_type; node_pool_ptr mp_node_pool; multiallocation_chain m_cached_nodes; - std::size_t m_max_cached_nodes; + size_type m_max_cached_nodes; public: typedef typename NodePool::segment_manager segment_manager; - cache_impl(segment_manager *segment_mngr, std::size_t max_cached_nodes) + cache_impl(segment_manager *segment_mngr, size_type max_cached_nodes) : mp_node_pool(get_or_create_node_pool(segment_mngr)) , m_max_cached_nodes(max_cached_nodes) {} @@ -172,16 +173,16 @@ class cache_impl ~cache_impl() { this->deallocate_all_cached_nodes(); - detail::destroy_node_pool_if_last_link(detail::get_pointer(mp_node_pool)); + ipcdetail::destroy_node_pool_if_last_link(ipcdetail::to_raw_pointer(mp_node_pool)); } NodePool *get_node_pool() const - { return detail::get_pointer(mp_node_pool); } + { return ipcdetail::to_raw_pointer(mp_node_pool); } segment_manager *get_segment_manager() const { return mp_node_pool->get_segment_manager(); } - std::size_t get_max_cached_nodes() const + size_type get_max_cached_nodes() const { return m_max_cached_nodes; } void *cached_allocation() @@ -190,19 +191,19 @@ class cache_impl if(m_cached_nodes.empty()){ m_cached_nodes = mp_node_pool->allocate_nodes(m_max_cached_nodes/2); } - void *ret = detail::get_pointer(m_cached_nodes.front()); + void *ret = ipcdetail::to_raw_pointer(m_cached_nodes.front()); m_cached_nodes.pop_front(); return ret; } - multiallocation_chain cached_allocation(std::size_t n) + multiallocation_chain cached_allocation(size_type n) { multiallocation_chain chain; - std::size_t count = n, allocated(0); + size_type count = n, allocated(0); BOOST_TRY{ //If don't have any cached node, we have to get a new list of free nodes from the pool while(!m_cached_nodes.empty() && count--){ - void *ret = detail::get_pointer(m_cached_nodes.front()); + void *ret = ipcdetail::to_raw_pointer(m_cached_nodes.front()); m_cached_nodes.pop_front(); chain.push_back(ret); ++allocated; @@ -212,10 +213,10 @@ class cache_impl multiallocation_chain chain2(mp_node_pool->allocate_nodes(n - allocated)); chain.splice_after(chain.last(), chain2, chain2.before_begin(), chain2.last(), n - allocated); } - return boost::interprocess::move(chain); + return boost::move(chain); } BOOST_CATCH(...){ - this->cached_deallocation(boost::interprocess::move(chain)); + this->cached_deallocation(boost::move(chain)); BOOST_RETHROW } BOOST_CATCH_END @@ -226,7 +227,7 @@ class cache_impl //Check if cache is full if(m_cached_nodes.size() >= m_max_cached_nodes){ //This only occurs if this allocator deallocate memory allocated - //with other equal allocator. Since the cache is full, and more + //with other equal allocator. Since the cache is full, and more //deallocations are probably coming, we'll make some room in cache //in a single, efficient multi node deallocation. this->priv_deallocate_n_nodes(m_cached_nodes.size() - m_max_cached_nodes/2); @@ -241,7 +242,7 @@ class cache_impl //Check if cache is full if(m_cached_nodes.size() >= m_max_cached_nodes){ //This only occurs if this allocator deallocate memory allocated - //with other equal allocator. Since the cache is full, and more + //with other equal allocator. Since the cache is full, and more //deallocations are probably coming, we'll make some room in cache //in a single, efficient multi node deallocation. this->priv_deallocate_n_nodes(m_cached_nodes.size() - m_max_cached_nodes/2); @@ -250,7 +251,7 @@ class cache_impl //!Sets the new max cached nodes value. This can provoke deallocations //!if "newmax" is less than current cached nodes. Never throws - void set_max_cached_nodes(std::size_t newmax) + void set_max_cached_nodes(size_type newmax) { m_max_cached_nodes = newmax; this->priv_deallocate_remaining_nodes(); @@ -261,7 +262,7 @@ class cache_impl void deallocate_all_cached_nodes() { if(m_cached_nodes.empty()) return; - mp_node_pool->deallocate_nodes(boost::interprocess::move(m_cached_nodes)); + mp_node_pool->deallocate_nodes(boost::move(m_cached_nodes)); } private: @@ -275,13 +276,13 @@ class cache_impl } //!Frees n cached nodes at once. Never throws - void priv_deallocate_n_nodes(std::size_t n) + void priv_deallocate_n_nodes(size_type n) { //This only occurs if this allocator deallocate memory allocated - //with other equal allocator. Since the cache is full, and more + //with other equal allocator. Since the cache is full, and more //deallocations are probably coming, we'll make some room in cache //in a single, efficient multi node deallocation. - std::size_t count(n); + size_type count(n); typename multiallocation_chain::iterator it(m_cached_nodes.before_begin()); while(count--){ ++it; @@ -289,16 +290,16 @@ class cache_impl multiallocation_chain chain; chain.splice_after(chain.before_begin(), m_cached_nodes, m_cached_nodes.before_begin(), it, n); //Deallocate all new linked list at once - mp_node_pool->deallocate_nodes(boost::interprocess::move(chain)); + mp_node_pool->deallocate_nodes(boost::move(chain)); } public: void swap(cache_impl &other) { - detail::do_swap(mp_node_pool, other.mp_node_pool); - m_cached_nodes.swap(other.m_cached_nodes); - detail::do_swap(m_max_cached_nodes, other.m_max_cached_nodes); - } + ipcdetail::do_swap(mp_node_pool, other.mp_node_pool); + m_cached_nodes.swap(other.m_cached_nodes); + ipcdetail::do_swap(m_max_cached_nodes, other.m_max_cached_nodes); + } }; template @@ -312,18 +313,20 @@ class array_allocation_impl typedef typename SegmentManager::void_pointer void_pointer; public: - typedef typename boost:: - pointer_to_other::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef typename SegmentManager::size_type size_type; + typedef typename SegmentManager::difference_type difference_type; + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; @@ -332,18 +335,18 @@ class array_allocation_impl //!pointed by p can hold. This size only works for memory allocated with //!allocate, allocation_command and allocate_many. size_type size(const pointer &p) const - { - return (size_type)this->derived()->get_segment_manager()->size(detail::get_pointer(p))/sizeof(T); + { + return (size_type)this->derived()->get_segment_manager()->size(ipcdetail::to_raw_pointer(p))/sizeof(T); } std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0) { return this->derived()->get_segment_manager()->allocation_command - (command, limit_size, preferred_size, received_size, detail::get_pointer(reuse)); + (command, limit_size, preferred_size, received_size, ipcdetail::to_raw_pointer(reuse)); } //!Allocates many elements of size elem_size in a contiguous block @@ -352,7 +355,7 @@ class array_allocation_impl //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements) + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements) { return this->derived()->get_segment_manager()->allocate_many(sizeof(T)*elem_size, num_elements); } @@ -372,7 +375,7 @@ class array_allocation_impl //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) void deallocate_many(multiallocation_chain chain) - { return this->derived()->get_segment_manager()->deallocate_many(boost::interprocess::move(chain)); } + { return this->derived()->get_segment_manager()->deallocate_many(boost::move(chain)); } //!Returns the number of elements that could be //!allocated. Never throws @@ -389,15 +392,12 @@ class array_allocation_impl const_pointer address(const_reference value) const { return const_pointer(boost::addressof(value)); } - //!Default construct an object. - //!Throws if T's default constructor throws - void construct(const pointer &ptr) - { new((void*)detail::get_pointer(ptr)) value_type; } - - //!Copy construct an object - //!Throws if T's copy constructor throws - void construct(const pointer &ptr, const_reference v) - { new((void*)detail::get_pointer(ptr)) value_type(v); } + //!Constructs an object + //!Throws if T's constructor throws + //!For backwards compatibility with libraries using C++03 allocators + template + void construct(const pointer &ptr, BOOST_FWD_REF(P) p) + { ::new((void*)ipcdetail::to_raw_pointer(ptr)) value_type(::boost::forward

(p)); } //!Destroys object. Throws if object's //!destructor throws @@ -419,22 +419,25 @@ class node_pool_allocation_impl { return static_cast(this); } typedef typename SegmentManager::void_pointer void_pointer; - typedef typename boost:: - pointer_to_other::type cvoid_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type cvoid_pointer; public: - typedef typename boost:: - pointer_to_other::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef typename SegmentManager::size_type size_type; + typedef typename SegmentManager::difference_type difference_type; + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; @@ -447,7 +450,7 @@ class node_pool_allocation_impl }; public: - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0) { @@ -471,9 +474,9 @@ class node_pool_allocation_impl typedef typename node_pool<0>::type node_pool_t; node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool()); if(Version == 1 && count == 1) - pool->deallocate_node(detail::get_pointer(ptr)); + pool->deallocate_node(ipcdetail::to_raw_pointer(ptr)); else - pool->get_segment_manager()->deallocate((void*)detail::get_pointer(ptr)); + pool->get_segment_manager()->deallocate((void*)ipcdetail::to_raw_pointer(ptr)); } //!Allocates just one object. Memory allocated with this function @@ -492,7 +495,7 @@ class node_pool_allocation_impl //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements) + multiallocation_chain allocate_individual(size_type num_elements) { typedef typename node_pool<0>::type node_pool_t; node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool()); @@ -506,7 +509,7 @@ class node_pool_allocation_impl { typedef typename node_pool<0>::type node_pool_t; node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool()); - pool->deallocate_node(detail::get_pointer(p)); + pool->deallocate_node(ipcdetail::to_raw_pointer(p)); } //!Allocates many elements of size == 1 in a contiguous block @@ -547,17 +550,18 @@ class cached_allocator_impl typedef NodePool node_pool_t; typedef typename NodePool::segment_manager segment_manager; typedef typename segment_manager::void_pointer void_pointer; - typedef typename boost:: - pointer_to_other::type cvoid_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type cvoid_pointer; typedef typename base_t::pointer pointer; typedef typename base_t::size_type size_type; typedef typename base_t::multiallocation_chain multiallocation_chain; typedef typename base_t::value_type value_type; public: - enum { DEFAULT_MAX_CACHED_NODES = 64 }; + static const std::size_t DEFAULT_MAX_CACHED_NODES = 64; - cached_allocator_impl(segment_manager *segment_mngr, std::size_t max_cached_nodes) + cached_allocator_impl(segment_manager *segment_mngr, size_type max_cached_nodes) : m_cache(segment_mngr, max_cached_nodes) {} @@ -587,15 +591,15 @@ class cached_allocator_impl //!Sets the new max cached nodes value. This can provoke deallocations //!if "newmax" is less than current cached nodes. Never throws - void set_max_cached_nodes(std::size_t newmax) + void set_max_cached_nodes(size_type newmax) { m_cache.set_max_cached_nodes(newmax); } //!Returns the max cached nodes parameter. //!Never throws - std::size_t get_max_cached_nodes() const + size_type get_max_cached_nodes() const { return m_cache.get_max_cached_nodes(); } - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0) { @@ -608,7 +612,7 @@ class cached_allocator_impl } else{ ret = this->get_segment_manager()->allocate(sizeof(T)*count); - } + } return pointer(static_cast(ret)); } @@ -617,10 +621,10 @@ class cached_allocator_impl { (void)count; if(Version == 1 && count == 1){ - m_cache.cached_deallocation(detail::get_pointer(ptr)); + m_cache.cached_deallocation(ipcdetail::to_raw_pointer(ptr)); } else{ - this->get_segment_manager()->deallocate((void*)detail::get_pointer(ptr)); + this->get_segment_manager()->deallocate((void*)ipcdetail::to_raw_pointer(ptr)); } } @@ -636,14 +640,14 @@ class cached_allocator_impl //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements) + multiallocation_chain allocate_individual(size_type num_elements) { return multiallocation_chain(this->m_cache.cached_allocation(num_elements)); } //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated //!with other functions different from allocate_one(). Never throws void deallocate_one(const pointer &p) - { this->m_cache.cached_deallocation(detail::get_pointer(p)); } + { this->m_cache.cached_deallocation(ipcdetail::to_raw_pointer(p)); } //!Allocates many elements of size == 1 in a contiguous block //!of memory. The minimum number to be allocated is min_elements, @@ -655,7 +659,7 @@ class cached_allocator_impl { typename node_pool_t::multiallocation_chain mem (chain.extract_multiallocation_chain()); - m_cache.cached_deallocation(boost::interprocess::move(mem)); + m_cache.cached_deallocation(boost::move(mem)); } //!Deallocates all free blocks of the pool @@ -682,20 +686,20 @@ class cached_allocator_impl //!Equality test for same type of //!cached_allocator_impl template inline -bool operator==(const cached_allocator_impl &alloc1, +bool operator==(const cached_allocator_impl &alloc1, const cached_allocator_impl &alloc2) { return alloc1.get_node_pool() == alloc2.get_node_pool(); } //!Inequality test for same type of //!cached_allocator_impl template inline -bool operator!=(const cached_allocator_impl &alloc1, +bool operator!=(const cached_allocator_impl &alloc1, const cached_allocator_impl &alloc2) { return alloc1.get_node_pool() != alloc2.get_node_pool(); } //!Pooled shared memory allocator using adaptive pool. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template @@ -708,6 +712,8 @@ class shared_pool_impl segment_manager segment_manager; typedef typename private_node_allocator_t:: multiallocation_chain multiallocation_chain; + typedef typename private_node_allocator_t:: + size_type size_type; private: typedef typename segment_manager::mutex_family::mutex_type mutex_type; @@ -730,7 +736,7 @@ class shared_pool_impl //----------------------- return private_node_allocator_t::allocate_node(); } - + //!Deallocates an array pointed by ptr. Never throws void deallocate_node(void *ptr) { @@ -742,7 +748,7 @@ class shared_pool_impl /* //!Allocates a singly linked list of n nodes ending in null pointer. //!can throw boost::interprocess::bad_alloc - void allocate_nodes(multiallocation_chain &nodes, std::size_t n) + void allocate_nodes(multiallocation_chain &nodes, size_type n) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -750,9 +756,9 @@ class shared_pool_impl return private_node_allocator_t::allocate_nodes(nodes, n); } */ - //!Allocates n nodes. + //!Allocates n nodes. //!Can throw boost::interprocess::bad_alloc - multiallocation_chain allocate_nodes(const std::size_t n) + multiallocation_chain allocate_nodes(const size_type n) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -761,7 +767,7 @@ class shared_pool_impl } //!Deallocates a linked list of nodes ending in null pointer. Never throws - void deallocate_nodes(multiallocation_chain &nodes, std::size_t num) + void deallocate_nodes(multiallocation_chain &nodes, size_type num) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -775,7 +781,7 @@ class shared_pool_impl //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - private_node_allocator_t::deallocate_nodes(boost::interprocess::move(chain)); + private_node_allocator_t::deallocate_nodes(boost::move(chain)); } //!Deallocates all the free blocks of memory. Never throws @@ -799,7 +805,7 @@ class shared_pool_impl } //!Increments internal reference count and returns new count. Never throws - std::size_t inc_ref_count() + size_type inc_ref_count() { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -808,7 +814,7 @@ class shared_pool_impl } //!Decrements internal reference count and returns new count. Never throws - std::size_t dec_ref_count() + size_type dec_ref_count() { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -840,14 +846,14 @@ class shared_pool_impl //!the mutex type to allow EBO when using null_mutex struct header_t : mutex_type { - std::size_t m_usecount; //Number of attached allocators + size_type m_usecount; //Number of attached allocators header_t() : m_usecount(0) {} } m_header; }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp b/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp index c7a3cd95ff..562b64863b 100644 --- a/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -20,11 +20,10 @@ #include #include -#include #include #include -#include +#include #include @@ -33,21 +32,21 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { //!Pooled shared memory allocator using single segregated storage. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template< class SegmentManager, std::size_t NodeSize, std::size_t NodesPerBlock > class private_node_pool //Inherit from the implementation to avoid template bloat - : public boost::container::containers_detail:: + : public boost::container::container_detail:: private_node_pool_impl { - typedef boost::container::containers_detail::private_node_pool_impl + typedef boost::container::container_detail::private_node_pool_impl base_t; //Non-copyable private_node_pool(); @@ -55,11 +54,12 @@ class private_node_pool private_node_pool &operator=(const private_node_pool &); public: - typedef SegmentManager segment_manager; + typedef SegmentManager segment_manager; + typedef typename base_t::size_type size_type; - static const std::size_t nodes_per_block = NodesPerBlock; + static const size_type nodes_per_block = NodesPerBlock; //Deprecated, use nodes_per_block - static const std::size_t nodes_per_chunk = NodesPerBlock; + static const size_type nodes_per_chunk = NodesPerBlock; //!Constructor from a segment manager. Never throws private_node_pool(segment_manager *segment_mngr) @@ -73,24 +73,24 @@ class private_node_pool //!Pooled shared memory allocator using single segregated storage. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time //!Pooled shared memory allocator using adaptive pool. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template< class SegmentManager , std::size_t NodeSize , std::size_t NodesPerBlock > -class shared_node_pool - : public detail::shared_pool_impl +class shared_node_pool + : public ipcdetail::shared_pool_impl < private_node_pool > { - typedef detail::shared_pool_impl + typedef ipcdetail::shared_pool_impl < private_node_pool > base_t; @@ -100,7 +100,7 @@ class shared_node_pool {} }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp b/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp index bd7d51ed9c..da7e4668e8 100644 --- a/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-2011. 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) // @@ -22,7 +22,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { template @@ -41,7 +41,7 @@ struct node_slist , bi::base_hook >::type node_slist_t; }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/allocators/node_allocator.hpp b/3party/boost/boost/interprocess/allocators/node_allocator.hpp index 1d80c9e27e..2c1fe566a3 100644 --- a/3party/boost/boost/interprocess/allocators/node_allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/node_allocator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include @@ -34,14 +34,14 @@ #include //!\file -//!Describes node_allocator pooled shared memory STL compatible allocator +//!Describes node_allocator pooled shared memory STL compatible allocator namespace boost { namespace interprocess { /// @cond -namespace detail{ +namespace ipcdetail{ template < unsigned int Version , class T @@ -68,7 +68,7 @@ class node_allocator_base template struct node_pool { - typedef detail::shared_node_pool + typedef ipcdetail::shared_node_pool < SegmentManager, sizeof_value::value, NodesPerBlock> type; static type *get(void *p) @@ -80,27 +80,29 @@ class node_allocator_base public: //------- - typedef typename boost:: - pointer_to_other::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; typedef boost::interprocess::version_type version; - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; - //!Obtains node_allocator_base from + //!Obtains node_allocator_base from //!node_allocator_base template struct rebind - { + { typedef node_allocator_base other; }; @@ -119,15 +121,15 @@ class node_allocator_base //!Constructor from a segment manager. If not present, constructs a node //!pool. Increments the reference count of the associated node pool. //!Can throw boost::interprocess::bad_alloc - node_allocator_base(segment_manager *segment_mngr) - : mp_node_pool(detail::get_or_create_node_pool::type>(segment_mngr)) { } + node_allocator_base(segment_manager *segment_mngr) + : mp_node_pool(ipcdetail::get_or_create_node_pool::type>(segment_mngr)) { } - //!Copy constructor from other node_allocator_base. Increments the reference + //!Copy constructor from other node_allocator_base. Increments the reference //!count of the associated node pool. Never throws - node_allocator_base(const node_allocator_base &other) - : mp_node_pool(other.get_node_pool()) - { - node_pool<0>::get(detail::get_pointer(mp_node_pool))->inc_ref_count(); + node_allocator_base(const node_allocator_base &other) + : mp_node_pool(other.get_node_pool()) + { + node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->inc_ref_count(); } //!Copy constructor from related node_allocator_base. If not present, constructs @@ -136,7 +138,7 @@ class node_allocator_base template node_allocator_base (const node_allocator_base &other) - : mp_node_pool(detail::get_or_create_node_pool::type>(other.get_segment_manager())) { } + : mp_node_pool(ipcdetail::get_or_create_node_pool::type>(other.get_segment_manager())) { } //!Assignment from other node_allocator_base node_allocator_base& operator=(const node_allocator_base &other) @@ -148,23 +150,23 @@ class node_allocator_base //!Destructor, removes node_pool_t from memory //!if its reference count reaches to zero. Never throws - ~node_allocator_base() - { detail::destroy_node_pool_if_last_link(node_pool<0>::get(detail::get_pointer(mp_node_pool))); } + ~node_allocator_base() + { ipcdetail::destroy_node_pool_if_last_link(node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))); } //!Returns a pointer to the node pool. //!Never throws void* get_node_pool() const - { return detail::get_pointer(mp_node_pool); } + { return ipcdetail::to_raw_pointer(mp_node_pool); } //!Returns the segment manager. //!Never throws segment_manager* get_segment_manager()const - { return node_pool<0>::get(detail::get_pointer(mp_node_pool))->get_segment_manager(); } + { return node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->get_segment_manager(); } //!Swaps allocators. Does not throw. If each allocator is placed in a //!different memory segment, the result is undefined. friend void swap(self_t &alloc1, self_t &alloc2) - { detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); } + { ipcdetail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); } /// @cond private: @@ -175,14 +177,14 @@ class node_allocator_base //!Equality test for same type //!of node_allocator_base template inline -bool operator==(const node_allocator_base &alloc1, +bool operator==(const node_allocator_base &alloc1, const node_allocator_base &alloc2) { return alloc1.get_node_pool() == alloc2.get_node_pool(); } //!Inequality test for same type //!of node_allocator_base template inline -bool operator!=(const node_allocator_base &alloc1, +bool operator!=(const node_allocator_base &alloc1, const node_allocator_base &alloc2) { return alloc1.get_node_pool() != alloc2.get_node_pool(); } @@ -199,16 +201,16 @@ class node_allocator_v1 > { public: - typedef detail::node_allocator_base + typedef ipcdetail::node_allocator_base < 1, T, SegmentManager, NodesPerBlock> base_t; template struct rebind - { + { typedef node_allocator_v1 other; }; - node_allocator_v1(SegmentManager *segment_mngr) + node_allocator_v1(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -219,16 +221,16 @@ class node_allocator_v1 {} }; -} //namespace detail{ +} //namespace ipcdetail{ /// @endcond -//!An STL node allocator that uses a segment manager as memory +//!An STL node allocator that uses a segment manager as memory //!source. The internal pointer type will of the same type (raw, smart) as //!"typename SegmentManager::void_pointer" type. This allows //!placing the allocator in shared memory, memory mapped-files, etc... -//!This node allocator shares a segregated storage between all instances -//!of node_allocator with equal sizeof(T) placed in the same segment +//!This node allocator shares a segregated storage between all instances +//!of node_allocator with equal sizeof(T) placed in the same segment //!group. NodesPerBlock is the number of nodes allocated at once when the allocator //!needs runs out of nodes template < class T @@ -237,7 +239,7 @@ template < class T > class node_allocator /// @cond - : public detail::node_allocator_base + : public ipcdetail::node_allocator_base < 2 , T , SegmentManager @@ -247,18 +249,18 @@ class node_allocator { #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED - typedef detail::node_allocator_base + typedef ipcdetail::node_allocator_base < 2, T, SegmentManager, NodesPerBlock> base_t; public: typedef boost::interprocess::version_type version; template struct rebind - { + { typedef node_allocator other; }; - node_allocator(SegmentManager *segment_mngr) + node_allocator(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -275,18 +277,18 @@ class node_allocator typedef implementation_defined::pointer pointer; typedef implementation_defined::const_pointer const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; - //!Obtains node_allocator from + //!Obtains node_allocator from //!node_allocator template struct rebind - { + { typedef node_allocator other; }; @@ -297,7 +299,7 @@ class node_allocator node_allocator& operator= (const node_allocator&); - //!Not assignable from + //!Not assignable from //!other node_allocator //node_allocator& operator=(const node_allocator&); @@ -307,7 +309,7 @@ class node_allocator //!Can throw boost::interprocess::bad_alloc node_allocator(segment_manager *segment_mngr); - //!Copy constructor from other node_allocator. Increments the reference + //!Copy constructor from other node_allocator. Increments the reference //!count of the associated node pool. Never throws node_allocator(const node_allocator &other); @@ -334,7 +336,7 @@ class node_allocator //!Never throws size_type max_size() const; - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0); @@ -358,7 +360,7 @@ class node_allocator //!Never throws const_pointer address(const_reference value) const; - //!Copy construct an object. + //!Copy construct an object. //!Throws if T's copy constructor throws void construct(const pointer &ptr, const_reference v); @@ -373,7 +375,7 @@ class node_allocator std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0); @@ -383,7 +385,7 @@ class node_allocator //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements); + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements); //!Allocates n_elements elements, each one of size elem_sizes[i]in a //!contiguous block @@ -409,7 +411,7 @@ class node_allocator //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements); + multiallocation_chain allocate_individual(size_type num_elements); //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated @@ -431,13 +433,13 @@ class node_allocator //!Equality test for same type //!of node_allocator template inline -bool operator==(const node_allocator &alloc1, +bool operator==(const node_allocator &alloc1, const node_allocator &alloc2); //!Inequality test for same type //!of node_allocator template inline -bool operator!=(const node_allocator &alloc1, +bool operator!=(const node_allocator &alloc1, const node_allocator &alloc2); #endif diff --git a/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp index c1d25c5e30..febe85c69d 100644 --- a/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,13 +18,13 @@ #include #include -#include +#include #include #include #include #include -#include +#include #include #include #include @@ -33,14 +33,14 @@ #include //!\file -//!Describes private_adaptive_pool_base pooled shared memory STL compatible allocator +//!Describes private_adaptive_pool_base pooled shared memory STL compatible allocator namespace boost { namespace interprocess { /// @cond -namespace detail { +namespace ipcdetail { template < unsigned int Version , class T @@ -68,7 +68,7 @@ class private_adaptive_pool_base typedef private_adaptive_pool_base < Version, T, SegmentManager, NodesPerBlock , MaxFreeBlocks, OverheadPercent> self_t; - typedef detail::private_adaptive_node_pool + typedef ipcdetail::private_adaptive_node_pool ::value , NodesPerBlock @@ -81,26 +81,28 @@ class private_adaptive_pool_base /// @endcond public: - typedef typename boost:: - pointer_to_other::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::size_type difference_type; typedef boost::interprocess::version_type version; - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; //!Obtains node_allocator from other node_allocator template struct rebind - { + { typedef private_adaptive_pool_base other; }; @@ -110,7 +112,7 @@ class private_adaptive_pool_base template struct node_pool { - typedef detail::private_adaptive_node_pool + typedef ipcdetail::private_adaptive_node_pool ::value , NodesPerBlock @@ -152,7 +154,7 @@ class private_adaptive_pool_base {} //!Destructor, frees all used memory. Never throws - ~private_adaptive_pool_base() + ~private_adaptive_pool_base() {} //!Returns the segment manager. Never throws @@ -176,13 +178,13 @@ class private_adaptive_pool_base //!Equality test for same type of private_adaptive_pool_base template inline -bool operator==(const private_adaptive_pool_base &alloc1, +bool operator==(const private_adaptive_pool_base &alloc1, const private_adaptive_pool_base &alloc2) { return &alloc1 == &alloc2; } //!Inequality test for same type of private_adaptive_pool_base template inline -bool operator!=(const private_adaptive_pool_base &alloc1, +bool operator!=(const private_adaptive_pool_base &alloc1, const private_adaptive_pool_base &alloc2) { return &alloc1 != &alloc2; } @@ -203,16 +205,16 @@ class private_adaptive_pool_v1 > { public: - typedef detail::private_adaptive_pool_base + typedef ipcdetail::private_adaptive_pool_base < 1, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t; template struct rebind - { + { typedef private_adaptive_pool_v1 other; }; - private_adaptive_pool_v1(SegmentManager *segment_mngr) + private_adaptive_pool_v1(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -223,11 +225,11 @@ class private_adaptive_pool_v1 {} }; -} //namespace detail { +} //namespace ipcdetail { /// @endcond -//!An STL node allocator that uses a segment manager as memory +//!An STL node allocator that uses a segment manager as memory //!source. The internal pointer type will of the same type (raw, smart) as //!"typename SegmentManager::void_pointer" type. This allows //!placing the allocator in shared memory, memory mapped-files, etc... @@ -248,7 +250,7 @@ template < class T > class private_adaptive_pool /// @cond - : public detail::private_adaptive_pool_base + : public ipcdetail::private_adaptive_pool_base < 2 , T , SegmentManager @@ -260,19 +262,19 @@ class private_adaptive_pool { #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED - typedef detail::private_adaptive_pool_base + typedef ipcdetail::private_adaptive_pool_base < 2, T, SegmentManager, NodesPerBlock, MaxFreeBlocks, OverheadPercent> base_t; public: typedef boost::interprocess::version_type version; template struct rebind - { + { typedef private_adaptive_pool other; }; - private_adaptive_pool(SegmentManager *segment_mngr) + private_adaptive_pool(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -289,18 +291,18 @@ class private_adaptive_pool typedef implementation_defined::pointer pointer; typedef implementation_defined::const_pointer const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; - //!Obtains private_adaptive_pool from + //!Obtains private_adaptive_pool from //!private_adaptive_pool template struct rebind - { + { typedef private_adaptive_pool other; }; @@ -312,7 +314,7 @@ class private_adaptive_pool private_adaptive_pool& operator= (const private_adaptive_pool&); - //!Not assignable from + //!Not assignable from //!other private_adaptive_pool private_adaptive_pool& operator=(const private_adaptive_pool&); @@ -322,7 +324,7 @@ class private_adaptive_pool //!Can throw boost::interprocess::bad_alloc private_adaptive_pool(segment_manager *segment_mngr); - //!Copy constructor from other private_adaptive_pool. Increments the reference + //!Copy constructor from other private_adaptive_pool. Increments the reference //!count of the associated node pool. Never throws private_adaptive_pool(const private_adaptive_pool &other); @@ -349,7 +351,7 @@ class private_adaptive_pool //!Never throws size_type max_size() const; - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0); @@ -373,7 +375,7 @@ class private_adaptive_pool //!Never throws const_pointer address(const_reference value) const; - //!Copy construct an object. + //!Copy construct an object. //!Throws if T's copy constructor throws void construct(const pointer &ptr, const_reference v); @@ -388,7 +390,7 @@ class private_adaptive_pool std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0); @@ -398,7 +400,7 @@ class private_adaptive_pool //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements); + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements); //!Allocates n_elements elements, each one of size elem_sizes[i]in a //!contiguous block @@ -424,7 +426,7 @@ class private_adaptive_pool //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements); + multiallocation_chain allocate_individual(size_type num_elements); //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated @@ -446,13 +448,13 @@ class private_adaptive_pool //!Equality test for same type //!of private_adaptive_pool template inline -bool operator==(const private_adaptive_pool &alloc1, +bool operator==(const private_adaptive_pool &alloc1, const private_adaptive_pool &alloc2); //!Inequality test for same type //!of private_adaptive_pool template inline -bool operator!=(const private_adaptive_pool &alloc1, +bool operator!=(const private_adaptive_pool &alloc1, const private_adaptive_pool &alloc2); #endif diff --git a/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp b/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp index cb2556403a..46b7dd6097 100644 --- a/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,13 +18,13 @@ #include #include -#include +#include #include #include #include #include -#include +#include #include #include #include @@ -33,14 +33,14 @@ #include //!\file -//!Describes private_node_allocator_base pooled shared memory STL compatible allocator +//!Describes private_node_allocator_base pooled shared memory STL compatible allocator namespace boost { namespace interprocess { /// @cond -namespace detail { +namespace ipcdetail { template < unsigned int Version , class T @@ -64,7 +64,7 @@ class private_node_allocator_base private: typedef private_node_allocator_base < Version, T, SegmentManager, NodesPerBlock> self_t; - typedef detail::private_node_pool + typedef ipcdetail::private_node_pool ::value , NodesPerBlock @@ -75,26 +75,29 @@ class private_node_allocator_base /// @endcond public: - typedef typename boost:: - pointer_to_other::type pointer; - typedef typename boost:: - pointer_to_other::type const_pointer; + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manager::difference_type difference_type; typedef boost::interprocess::version_type version; - typedef boost::container::containers_detail::transform_multiallocation_chain + typedef boost::container::container_detail::transform_multiallocation_chain multiallocation_chain; //!Obtains node_allocator from other node_allocator template struct rebind - { + { typedef private_node_allocator_base other; }; @@ -103,7 +106,7 @@ class private_node_allocator_base template struct node_pool { - typedef detail::private_node_pool + typedef ipcdetail::private_node_pool ::value , NodesPerBlock @@ -143,7 +146,7 @@ class private_node_allocator_base {} //!Destructor, frees all used memory. Never throws - ~private_node_allocator_base() + ~private_node_allocator_base() {} //!Returns the segment manager. Never throws @@ -167,13 +170,13 @@ class private_node_allocator_base //!Equality test for same type of private_node_allocator_base template inline -bool operator==(const private_node_allocator_base &alloc1, +bool operator==(const private_node_allocator_base &alloc1, const private_node_allocator_base &alloc2) { return &alloc1 == &alloc2; } //!Inequality test for same type of private_node_allocator_base template inline -bool operator!=(const private_node_allocator_base &alloc1, +bool operator!=(const private_node_allocator_base &alloc1, const private_node_allocator_base &alloc2) { return &alloc1 != &alloc2; } @@ -190,16 +193,16 @@ class private_node_allocator_v1 > { public: - typedef detail::private_node_allocator_base + typedef ipcdetail::private_node_allocator_base < 1, T, SegmentManager, NodesPerBlock> base_t; template struct rebind - { + { typedef private_node_allocator_v1 other; }; - private_node_allocator_v1(SegmentManager *segment_mngr) + private_node_allocator_v1(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -210,15 +213,15 @@ class private_node_allocator_v1 {} }; -} //namespace detail { +} //namespace ipcdetail { /// @endcond -//!An STL node allocator that uses a segment manager as memory +//!An STL node allocator that uses a segment manager as memory //!source. The internal pointer type will of the same type (raw, smart) as //!"typename SegmentManager::void_pointer" type. This allows //!placing the allocator in shared memory, memory mapped-files, etc... -//!This allocator has its own node pool. NodesPerBlock is the number of nodes allocated +//!This allocator has its own node pool. NodesPerBlock is the number of nodes allocated //!at once when the allocator needs runs out of nodes template < class T , class SegmentManager @@ -226,7 +229,7 @@ template < class T > class private_node_allocator /// @cond - : public detail::private_node_allocator_base + : public ipcdetail::private_node_allocator_base < 2 , T , SegmentManager @@ -236,19 +239,19 @@ class private_node_allocator { #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED - typedef detail::private_node_allocator_base + typedef ipcdetail::private_node_allocator_base < 2, T, SegmentManager, NodesPerBlock> base_t; public: typedef boost::interprocess::version_type version; template struct rebind - { + { typedef private_node_allocator other; }; - private_node_allocator(SegmentManager *segment_mngr) + private_node_allocator(SegmentManager *segment_mngr) : base_t(segment_mngr) {} @@ -265,18 +268,18 @@ class private_node_allocator typedef implementation_defined::pointer pointer; typedef implementation_defined::const_pointer const_pointer; typedef T value_type; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef typename segment_manager::size_type size_type; + typedef typename segment_manage::difference_type difference_type; - //!Obtains private_node_allocator from + //!Obtains private_node_allocator from //!private_node_allocator template struct rebind - { + { typedef private_node_allocator other; }; @@ -288,7 +291,7 @@ class private_node_allocator private_node_allocator& operator= (const private_node_allocator&); - //!Not assignable from + //!Not assignable from //!other private_node_allocator private_node_allocator& operator=(const private_node_allocator&); @@ -298,7 +301,7 @@ class private_node_allocator //!Can throw boost::interprocess::bad_alloc private_node_allocator(segment_manager *segment_mngr); - //!Copy constructor from other private_node_allocator. Increments the reference + //!Copy constructor from other private_node_allocator. Increments the reference //!count of the associated node pool. Never throws private_node_allocator(const private_node_allocator &other); @@ -325,7 +328,7 @@ class private_node_allocator //!Never throws size_type max_size() const; - //!Allocate memory for an array of count elements. + //!Allocate memory for an array of count elements. //!Throws boost::interprocess::bad_alloc if there is no enough memory pointer allocate(size_type count, cvoid_pointer hint = 0); @@ -349,7 +352,7 @@ class private_node_allocator //!Never throws const_pointer address(const_reference value) const; - //!Copy construct an object. + //!Copy construct an object. //!Throws if T's copy constructor throws void construct(const pointer &ptr, const_reference v); @@ -364,7 +367,7 @@ class private_node_allocator std::pair allocation_command(boost::interprocess::allocation_type command, - size_type limit_size, + size_type limit_size, size_type preferred_size, size_type &received_size, const pointer &reuse = 0); @@ -374,7 +377,7 @@ class private_node_allocator //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. The elements must be deallocated //!with deallocate(...) - multiallocation_chain allocate_many(size_type elem_size, std::size_t num_elements); + multiallocation_chain allocate_many(size_type elem_size, size_type num_elements); //!Allocates n_elements elements, each one of size elem_sizes[i]in a //!contiguous block @@ -400,7 +403,7 @@ class private_node_allocator //!preferred_elements. The number of actually allocated elements is //!will be assigned to received_size. Memory allocated with this function //!must be deallocated only with deallocate_one(). - multiallocation_chain allocate_individual(std::size_t num_elements); + multiallocation_chain allocate_individual(size_type num_elements); //!Deallocates memory previously allocated with allocate_one(). //!You should never use deallocate_one to deallocate memory allocated @@ -422,13 +425,13 @@ class private_node_allocator //!Equality test for same type //!of private_node_allocator template inline -bool operator==(const private_node_allocator &alloc1, +bool operator==(const private_node_allocator &alloc1, const private_node_allocator &alloc2); //!Inequality test for same type //!of private_node_allocator template inline -bool operator!=(const private_node_allocator &alloc1, +bool operator!=(const private_node_allocator &alloc1, const private_node_allocator &alloc2); #endif diff --git a/3party/boost/boost/interprocess/anonymous_shared_memory.hpp b/3party/boost/boost/interprocess/anonymous_shared_memory.hpp index 71bf2948ae..624f57f9c3 100644 --- a/3party/boost/boost/interprocess/anonymous_shared_memory.hpp +++ b/3party/boost/boost/interprocess/anonymous_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -14,13 +14,13 @@ #include #include #include -#include +#include #include #include #include #if (!defined(BOOST_INTERPROCESS_WINDOWS)) -# include //open, O_CREAT, O_*... +# include //open, O_CREAT, O_*... # include //mmap # include //mode_t, S_IRWXG, S_IRWXO, S_IRWXU, #else @@ -37,18 +37,16 @@ namespace interprocess { /// @cond -namespace detail{ +namespace ipcdetail{ class raw_mapped_region_creator { public: static mapped_region - create_posix_mapped_region(void *address, offset_t offset, std::size_t size) + create_posix_mapped_region(void *address, std::size_t size) { mapped_region region; region.m_base = address; - region.m_offset = offset; - region.m_extra_offset = 0; region.m_size = size; return region; } @@ -92,16 +90,16 @@ anonymous_shared_memory(std::size_t size, void *address = 0) , 0); if(address == MAP_FAILED){ - if(fd != -1) + if(fd != -1) close(fd); error_info err = system_error_code(); throw interprocess_exception(err); } - if(fd != -1) + if(fd != -1) close(fd); - return detail::raw_mapped_region_creator::create_posix_mapped_region(address, 0, size); + return ipcdetail::raw_mapped_region_creator::create_posix_mapped_region(address, size); } #else { diff --git a/3party/boost/boost/interprocess/containers/allocation_type.hpp b/3party/boost/boost/interprocess/containers/allocation_type.hpp index a8de72ab8d..660b6cbdbc 100644 --- a/3party/boost/boost/interprocess/containers/allocation_type.hpp +++ b/3party/boost/boost/interprocess/containers/allocation_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include namespace boost { namespace interprocess { diff --git a/3party/boost/boost/interprocess/containers/container/deque.hpp b/3party/boost/boost/interprocess/containers/container/deque.hpp deleted file mode 100644 index 4631d95a7b..0000000000 --- a/3party/boost/boost/interprocess/containers/container/deque.hpp +++ /dev/null @@ -1,1488 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2006. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DEQUE_HPP -#define BOOST_CONTAINERS_DEQUE_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ADVANCED_INSERT_INT_HPP - -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -namespace boost { -namespace container { -#else -namespace boost { -namespace container { -#endif - -/// @cond -template -class deque; - -template -struct deque_value_traits -{ - typedef T value_type; - typedef A allocator_type; - static const bool trivial_dctr = boost::has_trivial_destructor::value; - static const bool trivial_dctr_after_move = false; - //::boost::has_trivial_destructor_after_move::value || trivial_dctr; - static const bool trivial_copy = has_trivial_copy::value; - static const bool nothrow_copy = has_nothrow_copy::value; - static const bool trivial_assign = has_trivial_assign::value; - static const bool nothrow_assign = has_nothrow_assign::value; - -}; - -// Note: this function is simply a kludge to work around several compilers' -// bugs in handling constant expressions. -inline std::size_t deque_buf_size(std::size_t size) - { return size < 512 ? std::size_t(512 / size) : std::size_t(1); } - -// Deque base class. It has two purposes. First, its constructor -// and destructor allocate (but don't initialize) storage. This makes -// exception safety easier. -template -class deque_base -{ - public: - typedef typename Alloc::value_type val_alloc_val; - typedef typename Alloc::pointer val_alloc_ptr; - typedef typename Alloc::const_pointer val_alloc_cptr; - typedef typename Alloc::reference val_alloc_ref; - typedef typename Alloc::const_reference val_alloc_cref; - typedef typename Alloc::value_type val_alloc_diff; - typedef typename Alloc::template rebind - ::other ptr_alloc_t; - typedef typename ptr_alloc_t::value_type ptr_alloc_val; - typedef typename ptr_alloc_t::pointer ptr_alloc_ptr; - typedef typename ptr_alloc_t::const_pointer ptr_alloc_cptr; - typedef typename ptr_alloc_t::reference ptr_alloc_ref; - typedef typename ptr_alloc_t::const_reference ptr_alloc_cref; - typedef typename Alloc::template - rebind::other allocator_type; - typedef allocator_type stored_allocator_type; - - protected: - - typedef deque_value_traits traits_t; - typedef typename Alloc::template - rebind::other map_allocator_type; - - static std::size_t s_buffer_size() { return deque_buf_size(sizeof(T)); } - - val_alloc_ptr priv_allocate_node() - { return this->alloc().allocate(s_buffer_size()); } - - void priv_deallocate_node(val_alloc_ptr p) - { this->alloc().deallocate(p, s_buffer_size()); } - - ptr_alloc_ptr priv_allocate_map(std::size_t n) - { return this->ptr_alloc().allocate(n); } - - void priv_deallocate_map(ptr_alloc_ptr p, std::size_t n) - { this->ptr_alloc().deallocate(p, n); } - - public: - // Class invariants: - // For any nonsingular iterator i: - // i.node is the address of an element in the map array. The - // contents of i.node is a pointer to the beginning of a node. - // i.first == //(i.node) - // i.last == i.first + node_size - // i.cur is a pointer in the range [i.first, i.last). NOTE: - // the implication of this is that i.cur is always a dereferenceable - // pointer, even if i is a past-the-end iterator. - // Start and Finish are always nonsingular iterators. NOTE: this means - // that an empty deque must have one node, and that a deque - // with N elements, where N is the buffer size, must have two nodes. - // For every node other than start.node and finish.node, every element - // in the node is an initialized object. If start.node == finish.node, - // then [start.cur, finish.cur) are initialized objects, and - // the elements outside that range are uninitialized storage. Otherwise, - // [start.cur, start.last) and [finish.first, finish.cur) are initialized - // objects, and [start.first, start.cur) and [finish.cur, finish.last) - // are uninitialized storage. - // [map, map + map_size) is a valid, non-empty range. - // [start.node, finish.node] is a valid range contained within - // [map, map + map_size). - // A pointer in the range [map, map + map_size) points to an allocated node - // if and only if the pointer is in the range [start.node, finish.node]. - class const_iterator - : public std::iterator - { - public: - static std::size_t s_buffer_size() { return deque_base::s_buffer_size(); } - - typedef std::random_access_iterator_tag iterator_category; - typedef val_alloc_val value_type; - typedef val_alloc_cptr pointer; - typedef val_alloc_cref reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - - typedef ptr_alloc_ptr index_pointer; - typedef const_iterator self_t; - - friend class deque; - friend class deque_base; - - protected: - val_alloc_ptr m_cur; - val_alloc_ptr m_first; - val_alloc_ptr m_last; - index_pointer m_node; - - public: - const_iterator(val_alloc_ptr x, index_pointer y) - : m_cur(x), m_first(*y), - m_last(*y + s_buffer_size()), m_node(y) {} - - const_iterator() : m_cur(0), m_first(0), m_last(0), m_node(0) {} - - const_iterator(const const_iterator& x) - : m_cur(x.m_cur), m_first(x.m_first), - m_last(x.m_last), m_node(x.m_node) {} - - reference operator*() const - { return *this->m_cur; } - - pointer operator->() const - { return this->m_cur; } - - difference_type operator-(const self_t& x) const - { - if(!this->m_cur && !x.m_cur){ - return 0; - } - return difference_type(this->s_buffer_size()) * (this->m_node - x.m_node - 1) + - (this->m_cur - this->m_first) + (x.m_last - x.m_cur); - } - - self_t& operator++() - { - ++this->m_cur; - if (this->m_cur == this->m_last) { - this->priv_set_node(this->m_node + 1); - this->m_cur = this->m_first; - } - return *this; - } - - self_t operator++(int) - { - self_t tmp = *this; - ++*this; - return tmp; - } - - self_t& operator--() - { - if (this->m_cur == this->m_first) { - this->priv_set_node(this->m_node - 1); - this->m_cur = this->m_last; - } - --this->m_cur; - return *this; - } - - self_t operator--(int) - { - self_t tmp = *this; - --*this; - return tmp; - } - - self_t& operator+=(difference_type n) - { - difference_type offset = n + (this->m_cur - this->m_first); - if (offset >= 0 && offset < difference_type(this->s_buffer_size())) - this->m_cur += n; - else { - difference_type node_offset = - offset > 0 ? offset / difference_type(this->s_buffer_size()) - : -difference_type((-offset - 1) / this->s_buffer_size()) - 1; - this->priv_set_node(this->m_node + node_offset); - this->m_cur = this->m_first + - (offset - node_offset * difference_type(this->s_buffer_size())); - } - return *this; - } - - self_t operator+(difference_type n) const - { self_t tmp = *this; return tmp += n; } - - self_t& operator-=(difference_type n) - { return *this += -n; } - - self_t operator-(difference_type n) const - { self_t tmp = *this; return tmp -= n; } - - reference operator[](difference_type n) const - { return *(*this + n); } - - bool operator==(const self_t& x) const - { return this->m_cur == x.m_cur; } - - bool operator!=(const self_t& x) const - { return !(*this == x); } - - bool operator<(const self_t& x) const - { - return (this->m_node == x.m_node) ? - (this->m_cur < x.m_cur) : (this->m_node < x.m_node); - } - - bool operator>(const self_t& x) const - { return x < *this; } - - bool operator<=(const self_t& x) const - { return !(x < *this); } - - bool operator>=(const self_t& x) const - { return !(*this < x); } - - void priv_set_node(index_pointer new_node) - { - this->m_node = new_node; - this->m_first = *new_node; - this->m_last = this->m_first + difference_type(this->s_buffer_size()); - } - - friend const_iterator operator+(std::ptrdiff_t n, const const_iterator& x) - { return x + n; } - }; - - //Deque iterator - class iterator : public const_iterator - { - public: - typedef std::random_access_iterator_tag iterator_category; - typedef val_alloc_val value_type; - typedef val_alloc_ptr pointer; - typedef val_alloc_ref reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef ptr_alloc_ptr index_pointer; - typedef const_iterator self_t; - - friend class deque; - friend class deque_base; - - private: - explicit iterator(const const_iterator& x) : const_iterator(x){} - - public: - //Constructors - iterator(val_alloc_ptr x, index_pointer y) : const_iterator(x, y){} - iterator() : const_iterator(){} - //iterator(const const_iterator &cit) : const_iterator(cit){} - iterator(const iterator& x) : const_iterator(x){} - - //Pointer like operators - reference operator*() const { return *this->m_cur; } - pointer operator->() const { return this->m_cur; } - - reference operator[](difference_type n) const { return *(*this + n); } - - //Increment / Decrement - iterator& operator++() - { this->const_iterator::operator++(); return *this; } - - iterator operator++(int) - { iterator tmp = *this; ++*this; return tmp; } - - iterator& operator--() - { this->const_iterator::operator--(); return *this; } - - iterator operator--(int) - { iterator tmp = *this; --*this; return tmp; } - - // Arithmetic - iterator& operator+=(difference_type off) - { this->const_iterator::operator+=(off); return *this; } - - iterator operator+(difference_type off) const - { return iterator(this->const_iterator::operator+(off)); } - - friend iterator operator+(difference_type off, const iterator& right) - { return iterator(off+static_cast(right)); } - - iterator& operator-=(difference_type off) - { this->const_iterator::operator-=(off); return *this; } - - iterator operator-(difference_type off) const - { return iterator(this->const_iterator::operator-(off)); } - - difference_type operator-(const const_iterator& right) const - { return static_cast(*this) - right; } - }; - - deque_base(const allocator_type& a, std::size_t num_elements) - : members_(a) - { this->priv_initialize_map(num_elements); } - - deque_base(const allocator_type& a) - : members_(a) - {} - - ~deque_base() - { - if (this->members_.m_map) { - this->priv_destroy_nodes(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1); - this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); - } - } - - private: - deque_base(const deque_base&); - - protected: - - void priv_initialize_map(std::size_t num_elements) - { -// if(num_elements){ - std::size_t num_nodes = num_elements / s_buffer_size() + 1; - - this->members_.m_map_size = containers_detail::max_value((std::size_t) InitialMapSize, num_nodes + 2); - this->members_.m_map = this->priv_allocate_map(this->members_.m_map_size); - - ptr_alloc_ptr nstart = this->members_.m_map + (this->members_.m_map_size - num_nodes) / 2; - ptr_alloc_ptr nfinish = nstart + num_nodes; - - BOOST_TRY { - this->priv_create_nodes(nstart, nfinish); - } - BOOST_CATCH(...){ - this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); - this->members_.m_map = 0; - this->members_.m_map_size = 0; - BOOST_RETHROW - } - BOOST_CATCH_END - - this->members_.m_start.priv_set_node(nstart); - this->members_.m_finish.priv_set_node(nfinish - 1); - this->members_.m_start.m_cur = this->members_.m_start.m_first; - this->members_.m_finish.m_cur = this->members_.m_finish.m_first + - num_elements % s_buffer_size(); -// } - } - - void priv_create_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish) - { - ptr_alloc_ptr cur; - BOOST_TRY { - for (cur = nstart; cur < nfinish; ++cur) - *cur = this->priv_allocate_node(); - } - BOOST_CATCH(...){ - this->priv_destroy_nodes(nstart, cur); - BOOST_RETHROW - } - BOOST_CATCH_END - } - - void priv_destroy_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish) - { - for (ptr_alloc_ptr n = nstart; n < nfinish; ++n) - this->priv_deallocate_node(*n); - } - - enum { InitialMapSize = 8 }; - - protected: - struct members_holder - : public ptr_alloc_t - , public allocator_type - { - members_holder(const allocator_type &a) - : map_allocator_type(a), allocator_type(a) - , m_map(0), m_map_size(0) - , m_start(), m_finish(m_start) - {} - - ptr_alloc_ptr m_map; - std::size_t m_map_size; - iterator m_start; - iterator m_finish; - } members_; - - ptr_alloc_t &ptr_alloc() - { return members_; } - - const ptr_alloc_t &ptr_alloc() const - { return members_; } - - allocator_type &alloc() - { return members_; } - - const allocator_type &alloc() const - { return members_; } -}; -/// @endcond - -//! Deque class -//! -template -class deque : protected deque_base -{ - /// @cond - typedef typename containers_detail:: - move_const_ref_type::type insert_const_ref_type; - typedef deque_base Base; - - public: // Basic types - typedef typename Alloc::value_type val_alloc_val; - typedef typename Alloc::pointer val_alloc_ptr; - typedef typename Alloc::const_pointer val_alloc_cptr; - typedef typename Alloc::reference val_alloc_ref; - typedef typename Alloc::const_reference val_alloc_cref; - typedef typename Alloc::template - rebind::other ptr_alloc_t; - typedef typename ptr_alloc_t::value_type ptr_alloc_val; - typedef typename ptr_alloc_t::pointer ptr_alloc_ptr; - typedef typename ptr_alloc_t::const_pointer ptr_alloc_cptr; - typedef typename ptr_alloc_t::reference ptr_alloc_ref; - typedef typename ptr_alloc_t::const_reference ptr_alloc_cref; - /// @endcond - - typedef T value_type; - typedef val_alloc_ptr pointer; - typedef val_alloc_cptr const_pointer; - typedef val_alloc_ref reference; - typedef val_alloc_cref const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - - typedef typename Base::allocator_type allocator_type; - - public: // Iterators - typedef typename Base::iterator iterator; - typedef typename Base::const_iterator const_iterator; - - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; - - /// @cond - private: // Internal typedefs - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(deque) - typedef ptr_alloc_ptr index_pointer; - static std::size_t s_buffer_size() - { return Base::s_buffer_size(); } - typedef containers_detail::advanced_insert_aux_int advanced_insert_aux_int_t; - typedef repeat_iterator r_iterator; - typedef BOOST_CONTAINER_MOVE_NAMESPACE::move_iterator move_it; - - /// @endcond - - allocator_type get_allocator() const { return Base::alloc(); } - - public: // Basic accessors - - iterator begin() - { return this->members_.m_start; } - - iterator end() - { return this->members_.m_finish; } - - const_iterator begin() const - { return this->members_.m_start; } - - const_iterator end() const - { return this->members_.m_finish; } - - reverse_iterator rbegin() - { return reverse_iterator(this->members_.m_finish); } - - reverse_iterator rend() - { return reverse_iterator(this->members_.m_start); } - - const_reverse_iterator rbegin() const - { return const_reverse_iterator(this->members_.m_finish); } - - const_reverse_iterator rend() const - { return const_reverse_iterator(this->members_.m_start); } - - const_iterator cbegin() const - { return this->members_.m_start; } - - const_iterator cend() const - { return this->members_.m_finish; } - - const_reverse_iterator crbegin() const - { return const_reverse_iterator(this->members_.m_finish); } - - const_reverse_iterator crend() const - { return const_reverse_iterator(this->members_.m_start); } - - reference operator[](size_type n) - { return this->members_.m_start[difference_type(n)]; } - - const_reference operator[](size_type n) const - { return this->members_.m_start[difference_type(n)]; } - - void priv_range_check(size_type n) const - { if (n >= this->size()) BOOST_RETHROW std::out_of_range("deque"); } - - reference at(size_type n) - { this->priv_range_check(n); return (*this)[n]; } - - const_reference at(size_type n) const - { this->priv_range_check(n); return (*this)[n]; } - - reference front() { return *this->members_.m_start; } - - reference back() { return *(end()-1); } - - const_reference front() const - { return *this->members_.m_start; } - - const_reference back() const { return *(cend()-1); } - - size_type size() const - { return this->members_.m_finish - this->members_.m_start; } - - size_type max_size() const - { return this->alloc().max_size(); } - - bool empty() const - { return this->members_.m_finish == this->members_.m_start; } - - explicit deque(const allocator_type& a = allocator_type()) - : Base(a) - {} - - deque(const deque& x) - : Base(x.alloc()) - { - if(x.size()){ - this->priv_initialize_map(x.size()); - std::uninitialized_copy(x.begin(), x.end(), this->members_.m_start); - } - } - - deque(BOOST_MOVE_MACRO_RV_REF(deque) mx) - : Base(mx.alloc()) - { this->swap(mx); } - - deque(size_type n, const value_type& value, - const allocator_type& a = allocator_type()) : Base(a, n) - { this->priv_fill_initialize(value); } - - explicit deque(size_type n) : Base(allocator_type(), n) - { this->resize(n); } - - // Check whether it's an integral type. If so, it's not an iterator. - template - deque(InpIt first, InpIt last, const allocator_type& a = allocator_type()) - : Base(a) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - this->priv_initialize_dispatch(first, last, Result()); - } - - ~deque() - { - priv_destroy_range(this->members_.m_start, this->members_.m_finish); - } - - deque& operator= (BOOST_MOVE_MACRO_COPY_ASSIGN_REF(deque) x) - { - const size_type len = size(); - if (&x != this) { - if (len >= x.size()) - this->erase(std::copy(x.begin(), x.end(), this->members_.m_start), this->members_.m_finish); - else { - const_iterator mid = x.begin() + difference_type(len); - std::copy(x.begin(), mid, this->members_.m_start); - this->insert(this->members_.m_finish, mid, x.end()); - } - } - return *this; - } - - deque& operator= (BOOST_MOVE_MACRO_RV_REF(deque) x) - { - this->clear(); - this->swap(x); - return *this; - } - - void swap(deque &x) - { - std::swap(this->members_.m_start, x.members_.m_start); - std::swap(this->members_.m_finish, x.members_.m_finish); - std::swap(this->members_.m_map, x.members_.m_map); - std::swap(this->members_.m_map_size, x.members_.m_map_size); - } - - void assign(size_type n, const T& val) - { this->priv_fill_assign(n, val); } - - template - void assign(InpIt first, InpIt last) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - this->priv_assign_dispatch(first, last, Result()); - } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - void push_back(T &x) { push_back(const_cast(x)); } - - template - void push_back(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return priv_push_back(u); } - #endif - - void push_back(insert_const_ref_type t) - { return priv_push_back(t); } - - void push_back(BOOST_MOVE_MACRO_RV_REF(value_type) t) - { - if(this->priv_push_back_simple_available()){ - new(this->priv_push_back_simple_pos())value_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(t)); - this->priv_push_back_simple_commit(); - } - else{ - this->priv_insert_aux(cend(), move_it(r_iterator(t, 1)), move_it(r_iterator())); - } - } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - void push_front(T &x) { push_front(const_cast(x)); } - - template - void push_front(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return priv_push_front(u); } - #endif - - void push_front(insert_const_ref_type t) - { return priv_push_front(t); } - - void push_front(BOOST_MOVE_MACRO_RV_REF(value_type) t) - { - if(this->priv_push_front_simple_available()){ - new(this->priv_push_front_simple_pos())value_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(t)); - this->priv_push_front_simple_commit(); - } - else{ - this->priv_insert_aux(cbegin(), move_it(r_iterator(t, 1)), move_it(r_iterator())); - } - } - - void pop_back() - { - if (this->members_.m_finish.m_cur != this->members_.m_finish.m_first) { - --this->members_.m_finish.m_cur; - containers_detail::get_pointer(this->members_.m_finish.m_cur)->~value_type(); - } - else - this->priv_pop_back_aux(); - } - - void pop_front() - { - if (this->members_.m_start.m_cur != this->members_.m_start.m_last - 1) { - containers_detail::get_pointer(this->members_.m_start.m_cur)->~value_type(); - ++this->members_.m_start.m_cur; - } - else - this->priv_pop_front_aux(); - } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) - { return this->insert(position, const_cast(x)); } - - template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return this->priv_insert(position, u); } - #endif - - iterator insert(const_iterator position, insert_const_ref_type x) - { return this->priv_insert(position, x); } - - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(value_type) mx) - { - if (position == cbegin()) { - this->push_front(BOOST_CONTAINER_MOVE_NAMESPACE::move(mx)); - return begin(); - } - else if (position == cend()) { - this->push_back(BOOST_CONTAINER_MOVE_NAMESPACE::move(mx)); - return(end()-1); - } - else { - //Just call more general insert(pos, size, value) and return iterator - size_type n = position - begin(); - this->priv_insert_aux(position, move_it(r_iterator(mx, 1)), move_it(r_iterator())); - return iterator(this->begin() + n); - } - } - - void insert(const_iterator pos, size_type n, const value_type& x) - { this->priv_fill_insert(pos, n, x); } - - // Check whether it's an integral type. If so, it's not an iterator. - template - void insert(const_iterator pos, InpIt first, InpIt last) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - this->priv_insert_dispatch(pos, first, last, Result()); - } - - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - template - void emplace_back(Args&&... args) - { - if(this->priv_push_back_simple_available()){ - new(this->priv_push_back_simple_pos())value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->priv_push_back_simple_commit(); - } - else{ - typedef containers_detail::advanced_insert_aux_emplace type; - type &&proxy = type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->priv_insert_aux_impl(this->cend(), 1, proxy); - } - } - - template - void emplace_front(Args&&... args) - { - if(this->priv_push_front_simple_available()){ - new(this->priv_push_front_simple_pos())value_type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->priv_push_front_simple_commit(); - } - else{ - typedef containers_detail::advanced_insert_aux_emplace type; - type &&proxy = type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->priv_insert_aux_impl(this->cbegin(), 1, proxy); - } - } - - template - iterator emplace(const_iterator p, Args&&... args) - { - if(p == this->cbegin()){ - this->emplace_front(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - return this->begin(); - } - else if(p == this->cend()){ - this->emplace_back(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - return (this->end()-1); - } - else{ - size_type n = p - this->cbegin(); - typedef containers_detail::advanced_insert_aux_emplace type; - type &&proxy = type(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->priv_insert_aux_impl(p, 1, proxy); - return iterator(this->begin() + n); - } - } - - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - //0 args - void emplace_back() - { - if(priv_push_front_simple_available()){ - new(priv_push_front_simple_pos())value_type(); - priv_push_front_simple_commit(); - } - else{ - containers_detail::advanced_insert_aux_emplace proxy; - priv_insert_aux_impl(cend(), 1, proxy); - } - } - - void emplace_front() - { - if(priv_push_front_simple_available()){ - new(priv_push_front_simple_pos())value_type(); - priv_push_front_simple_commit(); - } - else{ - containers_detail::advanced_insert_aux_emplace proxy; - priv_insert_aux_impl(cbegin(), 1, proxy); - } - } - - iterator emplace(const_iterator p) - { - if(p == cbegin()){ - emplace_front(); - return begin(); - } - else if(p == cend()){ - emplace_back(); - return (end()-1); - } - else{ - size_type n = p - cbegin(); - containers_detail::advanced_insert_aux_emplace proxy; - priv_insert_aux_impl(p, 1, proxy); - return iterator(this->begin() + n); - } - } - - //advanced_insert_int.hpp includes all necessary preprocessor machinery... - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - if(priv_push_back_simple_available()){ \ - new(priv_push_back_simple_pos())value_type \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - priv_push_back_simple_commit(); \ - } \ - else{ \ - containers_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - \ - proxy(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - priv_insert_aux_impl(cend(), 1, proxy); \ - } \ - } \ - \ - template \ - void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - if(priv_push_front_simple_available()){ \ - new(priv_push_front_simple_pos())value_type \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - priv_push_front_simple_commit(); \ - } \ - else{ \ - containers_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - \ - proxy(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - priv_insert_aux_impl(cbegin(), 1, proxy); \ - } \ - } \ - \ - template \ - iterator emplace(const_iterator p, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - if(p == this->cbegin()){ \ - this->emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - return this->begin(); \ - } \ - else if(p == cend()){ \ - this->emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - return (this->end()-1); \ - } \ - else{ \ - size_type pos_num = p - this->cbegin(); \ - containers_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - \ - proxy(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - this->priv_insert_aux_impl(p, 1, proxy); \ - return iterator(this->begin() + pos_num); \ - } \ - } \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - void resize(size_type new_size, const value_type& x) - { - const size_type len = size(); - if (new_size < len) - this->erase(this->members_.m_start + new_size, this->members_.m_finish); - else - this->insert(this->members_.m_finish, new_size - len, x); - } - - void resize(size_type new_size) - { - const size_type len = size(); - if (new_size < len) - this->erase(this->members_.m_start + new_size, this->members_.m_finish); - else{ - size_type n = new_size - this->size(); - containers_detail::default_construct_aux_proxy proxy(n); - priv_insert_aux_impl(this->cend(), n, proxy); - } - } - - iterator erase(const_iterator pos) - { - const_iterator next = pos; - ++next; - difference_type index = pos - this->members_.m_start; - if (size_type(index) < (this->size() >> 1)) { - BOOST_CONTAINER_MOVE_NAMESPACE::move_backward(begin(), iterator(pos), iterator(next)); - pop_front(); - } - else { - BOOST_CONTAINER_MOVE_NAMESPACE::move(iterator(next), end(), iterator(pos)); - pop_back(); - } - return this->members_.m_start + index; - } - - iterator erase(const_iterator first, const_iterator last) - { - if (first == this->members_.m_start && last == this->members_.m_finish) { - this->clear(); - return this->members_.m_finish; - } - else { - difference_type n = last - first; - difference_type elems_before = first - this->members_.m_start; - if (elems_before < static_cast(this->size() - n) - elems_before) { - BOOST_CONTAINER_MOVE_NAMESPACE::move_backward(begin(), iterator(first), iterator(last)); - iterator new_start = this->members_.m_start + n; - if(!Base::traits_t::trivial_dctr_after_move) - this->priv_destroy_range(this->members_.m_start, new_start); - this->priv_destroy_nodes(new_start.m_node, this->members_.m_start.m_node); - this->members_.m_start = new_start; - } - else { - BOOST_CONTAINER_MOVE_NAMESPACE::move(iterator(last), end(), iterator(first)); - iterator new_finish = this->members_.m_finish - n; - if(!Base::traits_t::trivial_dctr_after_move) - this->priv_destroy_range(new_finish, this->members_.m_finish); - this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1); - this->members_.m_finish = new_finish; - } - return this->members_.m_start + elems_before; - } - } - - void clear() - { - for (index_pointer node = this->members_.m_start.m_node + 1; - node < this->members_.m_finish.m_node; - ++node) { - this->priv_destroy_range(*node, *node + this->s_buffer_size()); - this->priv_deallocate_node(*node); - } - - if (this->members_.m_start.m_node != this->members_.m_finish.m_node) { - this->priv_destroy_range(this->members_.m_start.m_cur, this->members_.m_start.m_last); - this->priv_destroy_range(this->members_.m_finish.m_first, this->members_.m_finish.m_cur); - this->priv_deallocate_node(this->members_.m_finish.m_first); - } - else - this->priv_destroy_range(this->members_.m_start.m_cur, this->members_.m_finish.m_cur); - - this->members_.m_finish = this->members_.m_start; - } - - /// @cond - private: - - iterator priv_insert(const_iterator position, const value_type &x) - { - if (position == cbegin()){ - this->push_front(x); - return begin(); - } - else if (position == cend()){ - this->push_back(x); - return (end()-1); - } - else { - size_type n = position - cbegin(); - this->priv_insert_aux(position, size_type(1), x); - return iterator(this->begin() + n); - } - } - - void priv_push_front(const value_type &t) - { - if(this->priv_push_front_simple_available()){ - new(this->priv_push_front_simple_pos())value_type(t); - this->priv_push_front_simple_commit(); - } - else{ - this->priv_insert_aux(cbegin(), size_type(1), t); - } - } - - void priv_push_back(const value_type &t) - { - if(this->priv_push_back_simple_available()){ - new(this->priv_push_back_simple_pos())value_type(t); - this->priv_push_back_simple_commit(); - } - else{ - this->priv_insert_aux(cend(), size_type(1), t); - } - } - - - bool priv_push_back_simple_available() const - { - return this->members_.m_map && - (this->members_.m_finish.m_cur != (this->members_.m_finish.m_last - 1)); - } - - void *priv_push_back_simple_pos() const - { - return static_cast(containers_detail::get_pointer(this->members_.m_finish.m_cur)); - } - - void priv_push_back_simple_commit() - { - ++this->members_.m_finish.m_cur; - } - - bool priv_push_front_simple_available() const - { - return this->members_.m_map && - (this->members_.m_start.m_cur != this->members_.m_start.m_first); - } - - void *priv_push_front_simple_pos() const - { return static_cast(containers_detail::get_pointer(this->members_.m_start.m_cur) - 1); } - - void priv_push_front_simple_commit() - { --this->members_.m_start.m_cur; } - - template - void priv_insert_aux(const_iterator pos, InpIt first, InpIt last, std::input_iterator_tag) - { - for(;first != last; ++first){ - this->insert(pos, BOOST_CONTAINER_MOVE_NAMESPACE::move(value_type(*first))); - } - } - - template - void priv_insert_aux(const_iterator pos, FwdIt first, FwdIt last, std::forward_iterator_tag) - { this->priv_insert_aux(pos, first, last); } - - // assign(), a generalized assignment member function. Two - // versions: one that takes a count, and one that takes a range. - // The range version is a member template, so we dispatch on whether - // or not the type is an integer. - void priv_fill_assign(size_type n, const T& val) - { - if (n > size()) { - std::fill(begin(), end(), val); - this->insert(cend(), n - size(), val); - } - else { - this->erase(cbegin() + n, cend()); - std::fill(begin(), end(), val); - } - } - - template - void priv_initialize_dispatch(Integer n, Integer x, containers_detail::true_) - { - this->priv_initialize_map(n); - this->priv_fill_initialize(x); - } - - template - void priv_initialize_dispatch(InpIt first, InpIt last, containers_detail::false_) - { - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_range_initialize(first, last, ItCat()); - } - - void priv_destroy_range(iterator p, iterator p2) - { - for(;p != p2; ++p) - containers_detail::get_pointer(&*p)->~value_type(); - } - - void priv_destroy_range(pointer p, pointer p2) - { - for(;p != p2; ++p) - containers_detail::get_pointer(&*p)->~value_type(); - } - - template - void priv_assign_dispatch(Integer n, Integer val, containers_detail::true_) - { this->priv_fill_assign((size_type) n, (value_type)val); } - - template - void priv_assign_dispatch(InpIt first, InpIt last, containers_detail::false_) - { - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_assign_aux(first, last, ItCat()); - } - - template - void priv_assign_aux(InpIt first, InpIt last, std::input_iterator_tag) - { - iterator cur = begin(); - for ( ; first != last && cur != end(); ++cur, ++first) - *cur = *first; - if (first == last) - this->erase(cur, cend()); - else - this->insert(cend(), first, last); - } - - template - void priv_assign_aux(FwdIt first, FwdIt last, std::forward_iterator_tag) - { - size_type len = std::distance(first, last); - if (len > size()) { - FwdIt mid = first; - std::advance(mid, size()); - std::copy(first, mid, begin()); - this->insert(cend(), mid, last); - } - else - this->erase(std::copy(first, last, begin()), cend()); - } - - template - void priv_insert_dispatch(const_iterator pos, Integer n, Integer x, containers_detail::true_) - { this->priv_fill_insert(pos, (size_type) n, (value_type)x); } - - template - void priv_insert_dispatch(const_iterator pos,InpIt first, InpIt last, containers_detail::false_) - { - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_insert_aux(pos, first, last, ItCat()); - } - - void priv_insert_aux(const_iterator pos, size_type n, const value_type& x) - { - typedef constant_iterator c_it; - this->priv_insert_aux(pos, c_it(x, n), c_it()); - } - - //Just forward all operations to priv_insert_aux_impl - template - void priv_insert_aux(const_iterator p, FwdIt first, FwdIt last) - { - containers_detail::advanced_insert_aux_proxy proxy(first, last); - priv_insert_aux_impl(p, (size_type)std::distance(first, last), proxy); - } - - void priv_insert_aux_impl(const_iterator p, size_type n, advanced_insert_aux_int_t &interf) - { - iterator pos(p); - if(!this->members_.m_map){ - this->priv_initialize_map(0); - pos = this->begin(); - } - - const difference_type elemsbefore = pos - this->members_.m_start; - size_type length = this->size(); - if (elemsbefore < static_cast(length / 2)) { - iterator new_start = this->priv_reserve_elements_at_front(n); - iterator old_start = this->members_.m_start; - pos = this->members_.m_start + elemsbefore; - if (elemsbefore >= difference_type(n)) { - iterator start_n = this->members_.m_start + difference_type(n); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(this->members_.m_start, start_n, new_start); - this->members_.m_start = new_start; - BOOST_CONTAINER_MOVE_NAMESPACE::move(start_n, pos, old_start); - interf.copy_all_to(pos - difference_type(n)); - } - else { - difference_type mid_count = (difference_type(n) - elemsbefore); - iterator mid_start = old_start - mid_count; - interf.uninitialized_copy_some_and_update(mid_start, mid_count, true); - this->members_.m_start = mid_start; - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(old_start, pos, new_start); - this->members_.m_start = new_start; - interf.copy_all_to(old_start); - } - } - else { - iterator new_finish = this->priv_reserve_elements_at_back(n); - iterator old_finish = this->members_.m_finish; - const difference_type elemsafter = - difference_type(length) - elemsbefore; - pos = this->members_.m_finish - elemsafter; - if (elemsafter >= difference_type(n)) { - iterator finish_n = this->members_.m_finish - difference_type(n); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(finish_n, this->members_.m_finish, this->members_.m_finish); - this->members_.m_finish = new_finish; - BOOST_CONTAINER_MOVE_NAMESPACE::move_backward(pos, finish_n, old_finish); - interf.copy_all_to(pos); - } - else { - interf.uninitialized_copy_some_and_update(old_finish, elemsafter, false); - this->members_.m_finish += n-elemsafter; - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_move(pos, old_finish, this->members_.m_finish); - this->members_.m_finish = new_finish; - interf.copy_all_to(pos); - } - } - } - - void priv_fill_insert(const_iterator pos, size_type n, const value_type& x) - { - typedef constant_iterator c_it; - this->insert(pos, c_it(x, n), c_it()); - } - - // Precondition: this->members_.m_start and this->members_.m_finish have already been initialized, - // but none of the deque's elements have yet been constructed. - void priv_fill_initialize(const value_type& value) - { - index_pointer cur; - BOOST_TRY { - for (cur = this->members_.m_start.m_node; cur < this->members_.m_finish.m_node; ++cur){ - std::uninitialized_fill(*cur, *cur + this->s_buffer_size(), value); - } - std::uninitialized_fill(this->members_.m_finish.m_first, this->members_.m_finish.m_cur, value); - } - BOOST_CATCH(...){ - this->priv_destroy_range(this->members_.m_start, iterator(*cur, cur)); - BOOST_RETHROW - } - BOOST_CATCH_END - } - - template - void priv_range_initialize(InpIt first, InpIt last, std::input_iterator_tag) - { - this->priv_initialize_map(0); - BOOST_TRY { - for ( ; first != last; ++first) - this->push_back(*first); - } - BOOST_CATCH(...){ - this->clear(); - BOOST_RETHROW - } - BOOST_CATCH_END - } - - template - void priv_range_initialize(FwdIt first, FwdIt last, std::forward_iterator_tag) - { - size_type n = 0; - n = std::distance(first, last); - this->priv_initialize_map(n); - - index_pointer cur_node; - BOOST_TRY { - for (cur_node = this->members_.m_start.m_node; - cur_node < this->members_.m_finish.m_node; - ++cur_node) { - FwdIt mid = first; - std::advance(mid, this->s_buffer_size()); - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(first, mid, *cur_node); - first = mid; - } - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(first, last, this->members_.m_finish.m_first); - } - BOOST_CATCH(...){ - this->priv_destroy_range(this->members_.m_start, iterator(*cur_node, cur_node)); - BOOST_RETHROW - } - BOOST_CATCH_END - } - - // Called only if this->members_.m_finish.m_cur == this->members_.m_finish.m_first. - void priv_pop_back_aux() - { - this->priv_deallocate_node(this->members_.m_finish.m_first); - this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node - 1); - this->members_.m_finish.m_cur = this->members_.m_finish.m_last - 1; - containers_detail::get_pointer(this->members_.m_finish.m_cur)->~value_type(); - } - - // Called only if this->members_.m_start.m_cur == this->members_.m_start.m_last - 1. Note that - // if the deque has at least one element (a precondition for this member - // function), and if this->members_.m_start.m_cur == this->members_.m_start.m_last, then the deque - // must have at least two nodes. - void priv_pop_front_aux() - { - containers_detail::get_pointer(this->members_.m_start.m_cur)->~value_type(); - this->priv_deallocate_node(this->members_.m_start.m_first); - this->members_.m_start.priv_set_node(this->members_.m_start.m_node + 1); - this->members_.m_start.m_cur = this->members_.m_start.m_first; - } - - iterator priv_reserve_elements_at_front(size_type n) - { - size_type vacancies = this->members_.m_start.m_cur - this->members_.m_start.m_first; - if (n > vacancies){ - size_type new_elems = n-vacancies; - size_type new_nodes = (new_elems + this->s_buffer_size() - 1) / - this->s_buffer_size(); - size_type s = (size_type)(this->members_.m_start.m_node - this->members_.m_map); - if (new_nodes > s){ - this->priv_reallocate_map(new_nodes, true); - } - size_type i = 1; - BOOST_TRY { - for (; i <= new_nodes; ++i) - *(this->members_.m_start.m_node - i) = this->priv_allocate_node(); - } - BOOST_CATCH(...) { - for (size_type j = 1; j < i; ++j) - this->priv_deallocate_node(*(this->members_.m_start.m_node - j)); - BOOST_RETHROW - } - BOOST_CATCH_END - } - return this->members_.m_start - difference_type(n); - } - - iterator priv_reserve_elements_at_back(size_type n) - { - size_type vacancies = (this->members_.m_finish.m_last - this->members_.m_finish.m_cur) - 1; - if (n > vacancies){ - size_type new_elems = n - vacancies; - size_type new_nodes = (new_elems + this->s_buffer_size() - 1)/s_buffer_size(); - size_type s = (size_type)(this->members_.m_map_size - (this->members_.m_finish.m_node - this->members_.m_map)); - if (new_nodes + 1 > s){ - this->priv_reallocate_map(new_nodes, false); - } - size_type i; - BOOST_TRY { - for (i = 1; i <= new_nodes; ++i) - *(this->members_.m_finish.m_node + i) = this->priv_allocate_node(); - } - BOOST_CATCH(...) { - for (size_type j = 1; j < i; ++j) - this->priv_deallocate_node(*(this->members_.m_finish.m_node + j)); - BOOST_RETHROW - } - BOOST_CATCH_END - } - return this->members_.m_finish + difference_type(n); - } - - void priv_reallocate_map(size_type nodes_to_add, bool add_at_front) - { - size_type old_num_nodes = this->members_.m_finish.m_node - this->members_.m_start.m_node + 1; - size_type new_num_nodes = old_num_nodes + nodes_to_add; - - index_pointer new_nstart; - if (this->members_.m_map_size > 2 * new_num_nodes) { - new_nstart = this->members_.m_map + (this->members_.m_map_size - new_num_nodes) / 2 - + (add_at_front ? nodes_to_add : 0); - if (new_nstart < this->members_.m_start.m_node) - BOOST_CONTAINER_MOVE_NAMESPACE::move(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart); - else - BOOST_CONTAINER_MOVE_NAMESPACE::move_backward - (this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart + old_num_nodes); - } - else { - size_type new_map_size = - this->members_.m_map_size + containers_detail::max_value(this->members_.m_map_size, nodes_to_add) + 2; - - index_pointer new_map = this->priv_allocate_map(new_map_size); - new_nstart = new_map + (new_map_size - new_num_nodes) / 2 - + (add_at_front ? nodes_to_add : 0); - BOOST_CONTAINER_MOVE_NAMESPACE::move(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart); - this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size); - - this->members_.m_map = new_map; - this->members_.m_map_size = new_map_size; - } - - this->members_.m_start.priv_set_node(new_nstart); - this->members_.m_finish.priv_set_node(new_nstart + old_num_nodes - 1); - } - /// @endcond -}; - -// Nonmember functions. -template -inline bool operator==(const deque& x, - const deque& y) -{ - return x.size() == y.size() && equal(x.begin(), x.end(), y.begin()); -} - -template -inline bool operator<(const deque& x, - const deque& y) -{ - return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); -} - -template -inline bool operator!=(const deque& x, - const deque& y) - { return !(x == y); } - -template -inline bool operator>(const deque& x, - const deque& y) - { return y < x; } - -template -inline bool operator<=(const deque& x, - const deque& y) - { return !(y < x); } - -template -inline bool operator>=(const deque& x, - const deque& y) - { return !(x < y); } - - -template -inline void swap(deque& x, deque& y) -{ x.swap(y); } - -}} - -/// @cond - -namespace boost { -/* -//!has_trivial_destructor_after_move<> == true_type -//!specialization for optimizations -template -struct has_trivial_destructor_after_move > -{ - enum { value = has_trivial_destructor::value }; -}; -*/ -} - -/// @endcond - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif // #ifndef BOOST_CONTAINERS_DEQUE_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/advanced_insert_int.hpp b/3party/boost/boost/interprocess/containers/container/detail/advanced_insert_int.hpp deleted file mode 100644 index bb9126d624..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/advanced_insert_int.hpp +++ /dev/null @@ -1,385 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2008-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_ADVANCED_INSERT_INT_HPP -#define BOOST_CONTAINERS_ADVANCED_INSERT_INT_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include //std::iterator_traits -#include //placement new -#include - -namespace boost { namespace container { namespace containers_detail { - -//This class will be interface for operations dependent on FwdIt types used advanced_insert_aux_impl -template -struct advanced_insert_aux_int -{ - typedef typename std::iterator_traits::difference_type difference_type; - virtual void copy_all_to(Iterator p) = 0; - virtual void uninitialized_copy_all_to(Iterator p) = 0; - virtual void uninitialized_copy_some_and_update(Iterator pos, difference_type division_count, bool first) = 0; - virtual void copy_some_and_update(Iterator pos, difference_type division_count, bool first) = 0; - virtual ~advanced_insert_aux_int() {} -}; - -//This class template will adapt each FwIt types to advanced_insert_aux_int -template -struct advanced_insert_aux_proxy - : public advanced_insert_aux_int -{ - typedef typename advanced_insert_aux_int::difference_type difference_type; - advanced_insert_aux_proxy(FwdIt first, FwdIt last) - : first_(first), last_(last) - {} - - virtual ~advanced_insert_aux_proxy() - {} - - virtual void copy_all_to(Iterator p) - { ::BOOST_CONTAINER_MOVE_NAMESPACE::copy_or_move(first_, last_, p); } - - virtual void uninitialized_copy_all_to(Iterator p) - { ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(first_, last_, p); } - - virtual void uninitialized_copy_some_and_update(Iterator pos, difference_type division_count, bool first_n) - { - FwdIt mid = first_; - std::advance(mid, division_count); - if(first_n){ - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(first_, mid, pos); - first_ = mid; - } - else{ - ::BOOST_CONTAINER_MOVE_NAMESPACE::uninitialized_copy_or_move(mid, last_, pos); - last_ = mid; - } - } - - virtual void copy_some_and_update(Iterator pos, difference_type division_count, bool first_n) - { - FwdIt mid = first_; - std::advance(mid, division_count); - if(first_n){ - ::BOOST_CONTAINER_MOVE_NAMESPACE::copy_or_move(first_, mid, pos); - first_ = mid; - } - else{ - ::BOOST_CONTAINER_MOVE_NAMESPACE::copy_or_move(mid, last_, pos); - last_ = mid; - } - } - - FwdIt first_, last_; -}; - -//This class template will adapt each FwIt types to advanced_insert_aux_int -template -struct default_construct_aux_proxy - : public advanced_insert_aux_int -{ - typedef typename advanced_insert_aux_int::difference_type difference_type; - default_construct_aux_proxy(SizeType count) - : count_(count) - {} - - void uninitialized_copy_impl(Iterator p, const SizeType n) - { - BOOST_ASSERT(n <= count_); - Iterator orig_p = p; - SizeType i = 0; - try{ - for(; i < n; ++i, ++p){ - new(containers_detail::get_pointer(&*p))T(); - } - } - catch(...){ - while(i--){ - containers_detail::get_pointer(&*orig_p++)->~T(); - } - throw; - } - count_ -= n; - } - - virtual ~default_construct_aux_proxy() - {} - - virtual void copy_all_to(Iterator) - { //This should never be called with any count - BOOST_ASSERT(count_ == 0); - } - - virtual void uninitialized_copy_all_to(Iterator p) - { this->uninitialized_copy_impl(p, count_); } - - virtual void uninitialized_copy_some_and_update(Iterator pos, difference_type division_count, bool first_n) - { - SizeType new_count; - if(first_n){ - new_count = division_count; - } - else{ - BOOST_ASSERT(difference_type(count_)>= division_count); - new_count = count_ - division_count; - } - this->uninitialized_copy_impl(pos, new_count); - } - - virtual void copy_some_and_update(Iterator , difference_type division_count, bool first_n) - { - BOOST_ASSERT(count_ == 0); - SizeType new_count; - if(first_n){ - new_count = division_count; - } - else{ - BOOST_ASSERT(difference_type(count_)>= division_count); - new_count = count_ - division_count; - } - //This function should never called with a count different to zero - BOOST_ASSERT(new_count == 0); - (void)new_count; - } - - SizeType count_; -}; - -}}} //namespace boost { namespace container { namespace containers_detail { - -#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - -#include INCLUDE_BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_STORED_REF_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include -//#include //For debugging purposes - -namespace boost { -namespace container { -namespace containers_detail { - -//This class template will adapt each FwIt types to advanced_insert_aux_int -template -struct advanced_insert_aux_emplace - : public advanced_insert_aux_int -{ - typedef typename advanced_insert_aux_int::difference_type difference_type; - typedef typename build_number_seq::type index_tuple_t; - - explicit advanced_insert_aux_emplace(Args&&... args) - : args_(args...) - , used_(false) - {} - - ~advanced_insert_aux_emplace() - {} - - virtual void copy_all_to(Iterator p) - { this->priv_copy_all_to(index_tuple_t(), p); } - - virtual void uninitialized_copy_all_to(Iterator p) - { this->priv_uninitialized_copy_all_to(index_tuple_t(), p); } - - virtual void uninitialized_copy_some_and_update(Iterator p, difference_type division_count, bool first_n) - { this->priv_uninitialized_copy_some_and_update(index_tuple_t(), p, division_count, first_n); } - - virtual void copy_some_and_update(Iterator p, difference_type division_count, bool first_n) - { this->priv_copy_some_and_update(index_tuple_t(), p, division_count, first_n); } - - private: - template - void priv_copy_all_to(const index_tuple&, Iterator p) - { - if(!used_){ - *p = BOOST_CONTAINER_MOVE_NAMESPACE::move(T (::boost::container::containers_detail::stored_ref::forward(get(args_))...)); - used_ = true; - } - } - - template - void priv_uninitialized_copy_all_to(const index_tuple&, Iterator p) - { - if(!used_){ - new(containers_detail::get_pointer(&*p))T(::boost::container::containers_detail::stored_ref::forward(get(args_))...); - used_ = true; - } - } - - template - void priv_uninitialized_copy_some_and_update(const index_tuple&, Iterator p, difference_type division_count, bool first_n) - { - BOOST_ASSERT(division_count <=1); - if((first_n && division_count == 1) || (!first_n && division_count == 0)){ - if(!used_){ - new(containers_detail::get_pointer(&*p))T(::boost::container::containers_detail::stored_ref::forward(get(args_))...); - used_ = true; - } - } - } - - template - void priv_copy_some_and_update(const index_tuple&, Iterator p, difference_type division_count, bool first_n) - { - BOOST_ASSERT(division_count <=1); - if((first_n && division_count == 1) || (!first_n && division_count == 0)){ - if(!used_){ - *p = BOOST_CONTAINER_MOVE_NAMESPACE::move(T(::boost::container::containers_detail::stored_ref::forward(get(args_))...)); - used_ = true; - } - } - } - tuple args_; - bool used_; -}; - -}}} //namespace boost { namespace container { namespace containers_detail { - -#else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP - -namespace boost { -namespace container { -namespace containers_detail { - -//This class template will adapt each FwIt types to advanced_insert_aux_int -template -struct advanced_insert_aux_emplace - : public advanced_insert_aux_int -{ - typedef typename advanced_insert_aux_int::difference_type difference_type; - advanced_insert_aux_emplace() - : used_(false) - {} - - ~advanced_insert_aux_emplace() - {} - - virtual void copy_all_to(Iterator p) - { - if(!used_){ - value_initv; - *p = BOOST_CONTAINER_MOVE_NAMESPACE::move(v.m_t); - used_ = true; - } - } - - virtual void uninitialized_copy_all_to(Iterator p) - { - if(!used_){ - new(containers_detail::get_pointer(&*p))T(); - used_ = true; - } - } - - virtual void uninitialized_copy_some_and_update(Iterator p, difference_type division_count, bool first_n) - { - BOOST_ASSERT(division_count <=1); - if((first_n && division_count == 1) || (!first_n && division_count == 0)){ - if(!used_){ - new(containers_detail::get_pointer(&*p))T(); - used_ = true; - } - } - } - - virtual void copy_some_and_update(Iterator p, difference_type division_count, bool first_n) - { - BOOST_ASSERT(division_count <=1); - if((first_n && division_count == 1) || (!first_n && division_count == 0)){ - if(!used_){ - value_initv; - *p = BOOST_CONTAINER_MOVE_NAMESPACE::move(v.m_t); - used_ = true; - } - } - } - private: - bool used_; -}; - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - struct BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - : public advanced_insert_aux_int \ - { \ - typedef typename advanced_insert_aux_int::difference_type difference_type; \ - \ - BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - ( BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _) ) \ - : used_(false), BOOST_PP_ENUM(n, BOOST_CONTAINERS_AUX_PARAM_INIT, _) {} \ - \ - virtual void copy_all_to(Iterator p) \ - { \ - if(!used_){ \ - T v(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_MEMBER_FORWARD, _)); \ - *p = BOOST_CONTAINER_MOVE_NAMESPACE::move(v); \ - used_ = true; \ - } \ - } \ - \ - virtual void uninitialized_copy_all_to(Iterator p) \ - { \ - if(!used_){ \ - new(containers_detail::get_pointer(&*p))T \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_MEMBER_FORWARD, _)); \ - used_ = true; \ - } \ - } \ - \ - virtual void uninitialized_copy_some_and_update \ - (Iterator p, difference_type division_count, bool first_n) \ - { \ - BOOST_ASSERT(division_count <=1); \ - if((first_n && division_count == 1) || (!first_n && division_count == 0)){ \ - if(!used_){ \ - new(containers_detail::get_pointer(&*p))T \ - (BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_MEMBER_FORWARD, _)); \ - used_ = true; \ - } \ - } \ - } \ - \ - virtual void copy_some_and_update \ - (Iterator p, difference_type division_count, bool first_n) \ - { \ - BOOST_ASSERT(division_count <=1); \ - if((first_n && division_count == 1) || (!first_n && division_count == 0)){ \ - if(!used_){ \ - T v(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_MEMBER_FORWARD, _)); \ - *p = BOOST_CONTAINER_MOVE_NAMESPACE::move(v); \ - used_ = true; \ - } \ - } \ - } \ - \ - bool used_; \ - BOOST_PP_REPEAT(n, BOOST_CONTAINERS_AUX_PARAM_DEFINE, _) \ - }; \ -//! - -#define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) -#include BOOST_PP_LOCAL_ITERATE() - -}}} //namespace boost { namespace container { namespace containers_detail { - -#endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //#ifndef BOOST_CONTAINERS_ADVANCED_INSERT_INT_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/algorithms.hpp b/3party/boost/boost/interprocess/containers/container/detail/algorithms.hpp deleted file mode 100644 index a028a5e250..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/algorithms.hpp +++ /dev/null @@ -1,215 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. -// -// 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DETAIL_ALGORITHMS_HPP -#define BOOST_CONTAINERS_DETAIL_ALGORITHMS_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#include -#include -#include -#include - -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP - - -#include - -namespace boost { -namespace container { - -#if defined(BOOST_NO_RVALUE_REFERENCES) -template -struct has_own_construct_from_it -{ - static const bool value = false; -}; - -namespace containers_detail { - -template -inline void construct_in_place_impl(T* dest, const InpIt &source, containers_detail::true_) -{ - T::construct(dest, *source); -} - -template -inline void construct_in_place_impl(T* dest, const InpIt &source, containers_detail::false_) -{ - new((void*)dest)T(*source); -} - -} //namespace containers_detail { - -template -inline void construct_in_place(T* dest, InpIt source) -{ - typedef containers_detail::bool_::value> boolean_t; - containers_detail::construct_in_place_impl(dest, source, boolean_t()); -} - -#else -template -inline void construct_in_place(T* dest, InpIt source) -{ ::new((void*)dest)T(*source); } -#endif - -template -inline void construct_in_place(T *dest, default_construct_iterator) -{ - ::new((void*)dest)T(); -} - -template -inline void construct_in_place(T *dest, emplace_iterator ei) -{ - ei.construct_in_place(dest); -} - -template -struct optimize_assign -{ - static const bool value = false; -}; - -template -struct optimize_assign -{ - static const bool value = boost::has_trivial_assign::value; -}; - -template -struct optimize_assign - : public optimize_assign -{}; - -template -struct optimize_copy -{ - static const bool value = false; -}; - -template -struct optimize_copy -{ - static const bool value = boost::has_trivial_copy::value; -}; - -template -struct optimize_copy - : public optimize_copy -{}; - -template inline -OutIt copy_n_dispatch(InIt first, typename std::iterator_traits::difference_type length, OutIt dest, containers_detail::bool_) -{ - for (; length--; ++dest, ++first) - *dest = *first; - return dest; -} - -template inline -T *copy_n_dispatch(const T *first, typename std::iterator_traits::difference_type length, T *dest, containers_detail::bool_) -{ - std::size_t size = length*sizeof(T); - return (static_cast(std::memmove(dest, first, size))) + size; -} - -template inline -OutIt copy_n(InIt first, typename std::iterator_traits::difference_type length, OutIt dest) -{ - const bool do_optimized_assign = optimize_assign::value; - return copy_n_dispatch(first, length, dest, containers_detail::bool_()); -} - -template inline -FwdIt uninitialized_copy_n_dispatch - (InIt first, - typename std::iterator_traits::difference_type count, - FwdIt dest, containers_detail::bool_) -{ - typedef typename std::iterator_traits::value_type value_type; - //Save initial destination position - FwdIt dest_init = dest; - typename std::iterator_traits::difference_type new_count = count+1; - - BOOST_TRY{ - //Try to build objects - for (; --new_count; ++dest, ++first){ - construct_in_place(containers_detail::get_pointer(&*dest), first); - } - } - BOOST_CATCH(...){ - //Call destructors - new_count = count - new_count; - for (; new_count--; ++dest_init){ - containers_detail::get_pointer(&*dest_init)->~value_type(); - } - BOOST_RETHROW - } - BOOST_CATCH_END - return dest; -} -template inline -T *uninitialized_copy_n_dispatch(const T *first, typename std::iterator_traits::difference_type length, T *dest, containers_detail::bool_) -{ - std::size_t size = length*sizeof(T); - return (static_cast(std::memmove(dest, first, size))) + size; -} - -template inline -FwdIt uninitialized_copy_n - (InIt first, - typename std::iterator_traits::difference_type count, - FwdIt dest) -{ - const bool do_optimized_copy = optimize_copy::value; - return uninitialized_copy_n_dispatch(first, count, dest, containers_detail::bool_()); -} - -// uninitialized_copy_copy -// Copies [first1, last1) into [result, result + (last1 - first1)), and -// copies [first2, last2) into -// [result + (last1 - first1), result + (last1 - first1) + (last2 - first2)). -template -FwdIt uninitialized_copy_copy - (InpIt1 first1, InpIt1 last1, InpIt2 first2, InpIt2 last2, FwdIt result) -{ - typedef typename std::iterator_traits::value_type value_type; - FwdIt mid = std::uninitialized_copy(first1, last1, result); - BOOST_TRY { - return std::uninitialized_copy(first2, last2, mid); - } - BOOST_CATCH(...){ - for(;result != mid; ++result){ - containers_detail::get_pointer(&*result)->~value_type(); - } - BOOST_RETHROW - } - BOOST_CATCH_END -} - -} //namespace container { -} //namespace boost { - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //#ifndef BOOST_CONTAINERS_DETAIL_ALGORITHMS_HPP - diff --git a/3party/boost/boost/interprocess/containers/container/detail/config_begin.hpp b/3party/boost/boost/interprocess/containers/container/detail/config_begin.hpp deleted file mode 100644 index da16ffa98e..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/config_begin.hpp +++ /dev/null @@ -1,145 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINERS_CONTAINER_DETAIL_CONFIG_INCLUDED -#define BOOST_CONTAINERS_CONTAINER_DETAIL_CONFIG_INCLUDED -#include - -#define BOOST_CONTAINER_IN_INTERPROCESS -#define BOOST_MOVE_IN_INTERPROCESS - -#ifdef BOOST_MOVE_IN_INTERPROCESS - -#define INCLUDE_BOOST_CONTAINER_MOVE_HPP -#define BOOST_CONTAINER_MOVE_NAMESPACE boost::interprocess - -#else - -#define INCLUDE_BOOST_CONTAINER_MOVE_HPP -#define BOOST_CONTAINER_MOVE_NAMESPACE boost - -#endif - -#ifdef BOOST_CONTAINER_IN_INTERPROCESS - -#define INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#define INCLUDE_BOOST_CONTAINER_DEQUE_HPP -#define INCLUDE_BOOST_CONTAINER_FLAT_MAP_HPP -#define INCLUDE_BOOST_CONTAINER_FLAT_SET_HPP -#define INCLUDE_BOOST_CONTAINER_LIST_HPP -#define INCLUDE_BOOST_CONTAINER_MAP_HPP -#define INCLUDE_BOOST_CONTAINER_SET_HPP -#define INCLUDE_BOOST_CONTAINER_SLIST_HPP -#define INCLUDE_BOOST_CONTAINER_STABLE_VECTOR_HPP -#define INCLUDE_BOOST_CONTAINER_STRING_HPP -#define INCLUDE_BOOST_CONTAINER_VECTOR_HPP -//detail -#define INCLUDE_BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ADVANCED_INSERT_INT_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ALLOCATION_TYPE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_DESTROYERS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_FLAT_TREE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_NODE_ALLOC_HOLDER_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_NODE_POOL_IMPL_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_PAIR_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_POOL_COMMON_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATOR_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_TREE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_STORED_REF_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#else //BOOST_CONTAINER_IN_INTERPROCESS - -#define INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#define INCLUDE_BOOST_CONTAINER_DEQUE_HPP -#define INCLUDE_BOOST_CONTAINER_FLAT_MAP_HPP -#define INCLUDE_BOOST_CONTAINER_FLAT_SET_HPP -#define INCLUDE_BOOST_CONTAINER_LIST_HPP -#define INCLUDE_BOOST_CONTAINER_MAP_HPP -#define INCLUDE_BOOST_CONTAINER_SET_HPP -#define INCLUDE_BOOST_CONTAINER_SLIST_HPP -#define INCLUDE_BOOST_CONTAINER_STABLE_VECTOR_HPP -#define INCLUDE_BOOST_CONTAINER_STRING_HPP -#define INCLUDE_BOOST_CONTAINER_VECTOR_HPP -//detail -#define INCLUDE_BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_IMPL_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ADVANCED_INSERT_INT_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ALLOCATION_TYPE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_BEGIN_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_DESTROYERS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_FLAT_TREE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_MATH_FUNCTIONS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_NODE_ALLOC_HOLDER_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_NODE_POOL_IMPL_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_PAIR_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_POOL_COMMON_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_TRANSFORM_ITERATOR_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_TREE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#define INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#endif //BOOST_CONTAINER_IN_INTERPROCESS - -#endif - -#ifdef BOOST_MSVC - #ifndef _CRT_SECURE_NO_DEPRECATE - #define BOOST_CONTAINERS_DETAIL_CRT_SECURE_NO_DEPRECATE - #define _CRT_SECURE_NO_DEPRECATE - #endif - #pragma warning (push) - #pragma warning (disable : 4702) // unreachable code - #pragma warning (disable : 4706) // assignment within conditional expression - #pragma warning (disable : 4127) // conditional expression is constant - #pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned - #pragma warning (disable : 4284) // odd return type for operator-> - #pragma warning (disable : 4244) // possible loss of data - #pragma warning (disable : 4251) // "identifier" : class "type" needs to have dll-interface to be used by clients of class "type2" - #pragma warning (disable : 4267) // conversion from "X" to "Y", possible loss of data - #pragma warning (disable : 4275) // non DLL-interface classkey "identifier" used as base for DLL-interface classkey "identifier" - #pragma warning (disable : 4355) // "this" : used in base member initializer list - #pragma warning (disable : 4503) // "identifier" : decorated name length exceeded, name was truncated - #pragma warning (disable : 4511) // copy constructor could not be generated - #pragma warning (disable : 4512) // assignment operator could not be generated - #pragma warning (disable : 4514) // unreferenced inline removed - #pragma warning (disable : 4521) // Disable "multiple copy constructors specified" - #pragma warning (disable : 4522) // "class" : multiple assignment operators specified - #pragma warning (disable : 4675) // "method" should be declared "static" and have exactly one parameter - #pragma warning (disable : 4710) // function not inlined - #pragma warning (disable : 4711) // function selected for automatic inline expansion - #pragma warning (disable : 4786) // identifier truncated in debug info - #pragma warning (disable : 4996) // "function": was declared deprecated - #pragma warning (disable : 4197) // top-level volatile in cast is ignored - #pragma warning (disable : 4541) // 'typeid' used on polymorphic type 'boost::exception' - // with /GR-; unpredictable behavior may result - #pragma warning (disable : 4673) // throwing '' the following types will not be considered at the catch site - #pragma warning (disable : 4671) // the copy constructor is inaccessible -#endif diff --git a/3party/boost/boost/interprocess/containers/container/detail/destroyers.hpp b/3party/boost/boost/interprocess/containers/container/detail/destroyers.hpp deleted file mode 100644 index 25f80436f9..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/destroyers.hpp +++ /dev/null @@ -1,154 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. -// -// 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DESTROYERS_HPP -#define BOOST_CONTAINERS_DESTROYERS_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP - -namespace boost { -namespace container { -namespace containers_detail { - -//!A deleter for scoped_ptr that deallocates the memory -//!allocated for an array of objects using a STL allocator. -template -struct scoped_array_deallocator -{ - typedef typename Allocator::pointer pointer; - typedef typename Allocator::size_type size_type; - - scoped_array_deallocator(pointer p, Allocator& a, size_type length) - : m_ptr(p), m_alloc(a), m_length(length) {} - - ~scoped_array_deallocator() - { if (m_ptr) m_alloc.deallocate(m_ptr, m_length); } - - void release() - { m_ptr = 0; } - - private: - pointer m_ptr; - Allocator& m_alloc; - size_type m_length; -}; - -template -struct null_scoped_array_deallocator -{ - typedef typename Allocator::pointer pointer; - typedef typename Allocator::size_type size_type; - - null_scoped_array_deallocator(pointer, Allocator&, size_type) - {} - - void release() - {} -}; - - -//!A deleter for scoped_ptr that destroys -//!an object using a STL allocator. -template -struct scoped_destructor_n -{ - typedef typename Allocator::pointer pointer; - typedef typename Allocator::value_type value_type; - typedef typename Allocator::size_type size_type; - - pointer m_p; - size_type m_n; - - scoped_destructor_n(pointer p, size_type n) - : m_p(p), m_n(n) - {} - - void release() - { m_p = 0; } - - void increment_size(size_type inc) - { m_n += inc; } - - ~scoped_destructor_n() - { - if(!m_p) return; - value_type *raw_ptr = containers_detail::get_pointer(m_p); - for(std::size_t i = 0; i < m_n; ++i, ++raw_ptr) - raw_ptr->~value_type(); - } -}; - -//!A deleter for scoped_ptr that destroys -//!an object using a STL allocator. -template -struct null_scoped_destructor_n -{ - typedef typename Allocator::pointer pointer; - typedef typename Allocator::size_type size_type; - - null_scoped_destructor_n(pointer, size_type) - {} - - void increment_size(size_type) - {} - - void release() - {} -}; - -template -class allocator_destroyer -{ - typedef typename A::value_type value_type; - typedef containers_detail::integral_constant::value> alloc_version; - typedef containers_detail::integral_constant allocator_v1; - typedef containers_detail::integral_constant allocator_v2; - - private: - A & a_; - - private: - void priv_deallocate(const typename A::pointer &p, allocator_v1) - { a_.deallocate(p, 1); } - - void priv_deallocate(const typename A::pointer &p, allocator_v2) - { a_.deallocate_one(p); } - - public: - allocator_destroyer(A &a) - : a_(a) - {} - - void operator()(const typename A::pointer &p) - { - containers_detail::get_pointer(p)->~value_type(); - priv_deallocate(p, alloc_version()); - } -}; - - -} //namespace containers_detail { -} //namespace container { -} //namespace boost { - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //#ifndef BOOST_CONTAINERS_DESTROYERS_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/node_alloc_holder.hpp b/3party/boost/boost/interprocess/containers/container/detail/node_alloc_holder.hpp deleted file mode 100644 index 102542f7ac..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/node_alloc_holder.hpp +++ /dev/null @@ -1,501 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DETAIL_NODE_ALLOC_HPP_ -#define BOOST_CONTAINERS_DETAIL_NODE_ALLOC_HPP_ - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#include -#include - -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include - -#include INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_DESTROYERS_HPP - -#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP -#endif - -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP - - -namespace boost { -namespace container { -namespace containers_detail { - -//!A deleter for scoped_ptr that deallocates the memory -//!allocated for an object using a STL allocator. -template -struct scoped_deallocator -{ - typedef typename Allocator::pointer pointer; - typedef containers_detail::integral_constant::value> alloc_version; - typedef containers_detail::integral_constant allocator_v1; - typedef containers_detail::integral_constant allocator_v2; - - private: - void priv_deallocate(allocator_v1) - { m_alloc.deallocate(m_ptr, 1); } - - void priv_deallocate(allocator_v2) - { m_alloc.deallocate_one(m_ptr); } - - BOOST_MOVE_MACRO_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator) - - public: - - pointer m_ptr; - Allocator& m_alloc; - - scoped_deallocator(pointer p, Allocator& a) - : m_ptr(p), m_alloc(a) - {} - - ~scoped_deallocator() - { if (m_ptr)priv_deallocate(alloc_version()); } - - scoped_deallocator(BOOST_MOVE_MACRO_RV_REF(scoped_deallocator) o) - : m_ptr(o.m_ptr), m_alloc(o.m_alloc) - { o.release(); } - - pointer get() const - { return m_ptr; } - - void release() - { m_ptr = 0; } -}; - -template -class allocator_destroyer_and_chain_builder -{ - typedef typename A::value_type value_type; - typedef typename A::multiallocation_chain multiallocation_chain; - - A & a_; - multiallocation_chain &c_; - - public: - allocator_destroyer_and_chain_builder(A &a, multiallocation_chain &c) - : a_(a), c_(c) - {} - - void operator()(const typename A::pointer &p) - { - value_type *vp = containers_detail::get_pointer(p); - vp->~value_type(); - c_.push_front(vp); - } -}; - -template -class allocator_multialloc_chain_node_deallocator -{ - typedef typename A::value_type value_type; - typedef typename A::multiallocation_chain multiallocation_chain; - typedef allocator_destroyer_and_chain_builder chain_builder; - - A & a_; - multiallocation_chain c_; - - public: - allocator_multialloc_chain_node_deallocator(A &a) - : a_(a), c_() - {} - - chain_builder get_chain_builder() - { return chain_builder(a_, c_); } - - ~allocator_multialloc_chain_node_deallocator() - { - if(!c_.empty()) - a_.deallocate_individual(BOOST_CONTAINER_MOVE_NAMESPACE::move(c_)); - } -}; - - -template -struct node_compare - : private ValueCompare -{ - typedef typename ValueCompare::key_type key_type; - typedef typename ValueCompare::value_type value_type; - typedef typename ValueCompare::key_of_value key_of_value; - - node_compare(const ValueCompare &pred) - : ValueCompare(pred) - {} - - ValueCompare &value_comp() - { return static_cast(*this); } - - ValueCompare &value_comp() const - { return static_cast(*this); } - - bool operator()(const Node &a, const Node &b) const - { return ValueCompare::operator()(a.get_data(), b.get_data()); } -}; - -template -struct node_alloc_holder -{ - typedef node_alloc_holder self_t; - typedef typename A::value_type value_type; - typedef typename ICont::value_type Node; - typedef typename A::template rebind::other NodeAlloc; - typedef A ValAlloc; - typedef typename NodeAlloc::pointer NodePtr; - typedef containers_detail::scoped_deallocator Deallocator; - typedef typename NodeAlloc::size_type size_type; - typedef typename NodeAlloc::difference_type difference_type; - typedef containers_detail::integral_constant allocator_v1; - typedef containers_detail::integral_constant allocator_v2; - typedef containers_detail::integral_constant::value> alloc_version; - typedef typename ICont::iterator icont_iterator; - typedef typename ICont::const_iterator icont_citerator; - typedef allocator_destroyer Destroyer; - - private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(node_alloc_holder) - - public: - - node_alloc_holder(const ValAlloc &a) - : members_(a) - {} - - node_alloc_holder(const node_alloc_holder &other) - : members_(other.node_alloc()) - {} - - node_alloc_holder(BOOST_MOVE_MACRO_RV_REF(node_alloc_holder) other) - : members_(BOOST_CONTAINER_MOVE_NAMESPACE::move(other.node_alloc())) - { this->swap(other); } - - node_alloc_holder & operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(node_alloc_holder) other) - { members_.assign(other.node_alloc()); } - - node_alloc_holder & operator=(BOOST_MOVE_MACRO_RV_REF(node_alloc_holder) other) - { members_.assign(other.node_alloc()); } - - template - node_alloc_holder(const ValAlloc &a, const Pred &c) - : members_(a, typename ICont::value_compare(c)) - {} - - template - node_alloc_holder(BOOST_MOVE_MACRO_RV_REF(ValAlloc) a, const Pred &c) - : members_(a, typename ICont::value_compare(c)) - {} - - template - node_alloc_holder(const node_alloc_holder &other, const Pred &c) - : members_(other.node_alloc(), typename ICont::value_compare(c)) - {} - - ~node_alloc_holder() - { this->clear(alloc_version()); } - - size_type max_size() const - { return this->node_alloc().max_size(); } - - NodePtr allocate_one() - { return this->allocate_one(alloc_version()); } - - NodePtr allocate_one(allocator_v1) - { return this->node_alloc().allocate(1); } - - NodePtr allocate_one(allocator_v2) - { return this->node_alloc().allocate_one(); } - - void deallocate_one(NodePtr p) - { return this->deallocate_one(p, alloc_version()); } - - void deallocate_one(NodePtr p, allocator_v1) - { this->node_alloc().deallocate(p, 1); } - - void deallocate_one(NodePtr p, allocator_v2) - { this->node_alloc().deallocate_one(p); } - - template - static void construct(const NodePtr &ptr, - BOOST_MOVE_MACRO_RV_REF_2_TEMPL_ARGS(std::pair, Convertible1, Convertible2) value) - { - typedef typename Node::hook_type hook_type; - typedef typename Node::value_type::first_type first_type; - typedef typename Node::value_type::second_type second_type; - Node *nodeptr = containers_detail::get_pointer(ptr); - - //Hook constructor does not throw - new(static_cast(nodeptr))hook_type(); - //Now construct pair members_holder - value_type *valueptr = &nodeptr->get_data(); - new((void*)&valueptr->first) first_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(value.first)); - BOOST_TRY{ - new((void*)&valueptr->second) second_type(BOOST_CONTAINER_MOVE_NAMESPACE::move(value.second)); - } - BOOST_CATCH(...){ - valueptr->first.~first_type(); - static_cast(nodeptr)->~hook_type(); - BOOST_RETHROW - } - BOOST_CATCH_END - } - - static void destroy(const NodePtr &ptr) - { containers_detail::get_pointer(ptr)->~Node(); } - - Deallocator create_node_and_deallocator() - { - return Deallocator(this->allocate_one(), this->node_alloc()); - } - - #ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - template - static void construct(const NodePtr &ptr, Args &&...args) - { new((void*)containers_detail::get_pointer(ptr)) Node(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); } - - template - NodePtr create_node(Args &&...args) - { - NodePtr p = this->allocate_one(); - Deallocator node_deallocator(p, this->node_alloc()); - self_t::construct(p, BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - node_deallocator.release(); - return (p); - } - - #else //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - static void construct(const NodePtr &ptr) - { new((void*)containers_detail::get_pointer(ptr)) Node(); } - - NodePtr create_node() - { - NodePtr p = this->allocate_one(); - Deallocator node_deallocator(p, this->node_alloc()); - self_t::construct(p); - node_deallocator.release(); - return (p); - } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - void construct(const NodePtr &ptr, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - new((void*)containers_detail::get_pointer(ptr)) \ - Node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - } \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - NodePtr create_node(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - NodePtr p = this->allocate_one(); \ - Deallocator node_deallocator(p, this->node_alloc()); \ - self_t::construct(p, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - node_deallocator.release(); \ - return (p); \ - } \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - template - NodePtr create_node_from_it(It it) - { - NodePtr p = this->allocate_one(); - Deallocator node_deallocator(p, this->node_alloc()); - ::boost::container::construct_in_place(containers_detail::get_pointer(p), it); - node_deallocator.release(); - return (p); - } - - void destroy_node(NodePtr node) - { - self_t::destroy(node); - this->deallocate_one(node); - } - - void swap(node_alloc_holder &x) - { - NodeAlloc& this_alloc = this->node_alloc(); - NodeAlloc& other_alloc = x.node_alloc(); - - if (this_alloc != other_alloc){ - containers_detail::do_swap(this_alloc, other_alloc); - } - - this->icont().swap(x.icont()); - } - - template - FwdIterator allocate_many_and_construct - (FwdIterator beg, difference_type n, Inserter inserter) - { - if(n){ - typedef typename NodeAlloc::multiallocation_chain multiallocation_chain; - - //Try to allocate memory in a single block - multiallocation_chain mem(this->node_alloc().allocate_individual(n)); - int constructed = 0; - Node *p = 0; - BOOST_TRY{ - for(difference_type i = 0; i < n; ++i, ++beg, --constructed){ - p = containers_detail::get_pointer(mem.front()); - mem.pop_front(); - //This can throw - constructed = 0; - boost::container::construct_in_place(p, beg); - ++constructed; - //This can throw in some containers (predicate might throw) - inserter(*p); - } - } - BOOST_CATCH(...){ - if(constructed){ - this->destroy(p); - } - this->node_alloc().deallocate_individual(BOOST_CONTAINER_MOVE_NAMESPACE::move(mem)); - BOOST_RETHROW - } - BOOST_CATCH_END - } - return beg; - } - - void clear(allocator_v1) - { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); } - - void clear(allocator_v2) - { - typename NodeAlloc::multiallocation_chain chain; - allocator_destroyer_and_chain_builder builder(this->node_alloc(), chain); - this->icont().clear_and_dispose(builder); - BOOST_STATIC_ASSERT((::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value == true)); - if(!chain.empty()) - this->node_alloc().deallocate_individual(BOOST_CONTAINER_MOVE_NAMESPACE::move(chain)); - } - - icont_iterator erase_range(icont_iterator first, icont_iterator last, allocator_v1) - { return this->icont().erase_and_dispose(first, last, Destroyer(this->node_alloc())); } - - icont_iterator erase_range(icont_iterator first, icont_iterator last, allocator_v2) - { - allocator_multialloc_chain_node_deallocator chain_holder(this->node_alloc()); - return this->icont().erase_and_dispose(first, last, chain_holder.get_chain_builder()); - } - - template - size_type erase_key(const Key& k, const Comparator &comp, allocator_v1) - { return this->icont().erase_and_dispose(k, comp, Destroyer(this->node_alloc())); } - - template - size_type erase_key(const Key& k, const Comparator &comp, allocator_v2) - { - allocator_multialloc_chain_node_deallocator chain_holder(this->node_alloc()); - return this->icont().erase_and_dispose(k, comp, chain_holder.get_chain_builder()); - } - - protected: - struct cloner - { - cloner(node_alloc_holder &holder) - : m_holder(holder) - {} - - NodePtr operator()(const Node &other) const - { return m_holder.create_node(other.get_data()); } - - node_alloc_holder &m_holder; - }; - - struct destroyer - { - destroyer(node_alloc_holder &holder) - : m_holder(holder) - {} - - void operator()(NodePtr n) const - { m_holder.destroy_node(n); } - - node_alloc_holder &m_holder; - }; - - struct members_holder - : public NodeAlloc - { - private: - members_holder(const members_holder&); - - public: - template - members_holder(const ConvertibleToAlloc &c2alloc) - : NodeAlloc(c2alloc) - {} - - template - members_holder(const ConvertibleToAlloc &c2alloc, const Pred &c) - : NodeAlloc(c2alloc), m_icont(c) - {} - - template - void assign (const ConvertibleToAlloc &c2alloc) - { - NodeAlloc::operator=(c2alloc); - } - - //The intrusive container - ICont m_icont; - } members_; - - ICont &non_const_icont() const - { return const_cast(this->members_.m_icont); } - - ICont &icont() - { return this->members_.m_icont; } - - const ICont &icont() const - { return this->members_.m_icont; } - - NodeAlloc &node_alloc() - { return static_cast(this->members_); } - - const NodeAlloc &node_alloc() const - { return static_cast(this->members_); } -}; - -} //namespace containers_detail { -} //namespace container { -} //namespace boost { - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif // BOOST_CONTAINERS_DETAIL_NODE_ALLOC_HPP_ diff --git a/3party/boost/boost/interprocess/containers/container/detail/pair.hpp b/3party/boost/boost/interprocess/containers/container/detail/pair.hpp deleted file mode 100644 index da705729c4..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/pair.hpp +++ /dev/null @@ -1,212 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. -// -// 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_CONTAINERS_DETAIL_PAIR_HPP -#define BOOST_CONTAINERS_CONTAINERS_DETAIL_PAIR_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP - -#include //std::pair - -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP - -#ifndef BOOST_CONTAINERS_PERFECT_FORWARDING -#include INCLUDE_BOOST_CONTAINER_DETAIL_PREPROCESSOR_HPP -#endif - -namespace boost { -namespace container { -namespace containers_detail { - -template -struct pair -{ - private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(pair) - - public: - typedef T1 first_type; - typedef T2 second_type; - - T1 first; - T2 second; - - //std::pair compatibility - template - pair(const std::pair& p) - : first(p.first), second(p.second) - {} - - //To resolve ambiguity with the variadic constructor of 1 argument - //and the previous constructor - pair(std::pair& x) - : first(x.first), second(x.second) - {} - - template - pair(BOOST_MOVE_MACRO_RV_REF_2_TEMPL_ARGS(std::pair, D, S) p) - : first(BOOST_CONTAINER_MOVE_NAMESPACE::move(p.first)), second(BOOST_CONTAINER_MOVE_NAMESPACE::move(p.second)) - {} - - pair() - : first(), second() - {} - - pair(const pair& x) - : first(x.first), second(x.second) - {} - - //To resolve ambiguity with the variadic constructor of 1 argument - //and the copy constructor - pair(pair& x) - : first(x.first), second(x.second) - {} - - pair(BOOST_MOVE_MACRO_RV_REF(pair) p) - : first(BOOST_CONTAINER_MOVE_NAMESPACE::move(p.first)), second(BOOST_CONTAINER_MOVE_NAMESPACE::move(p.second)) - {} - - template - pair(BOOST_MOVE_MACRO_RV_REF_2_TEMPL_ARGS(pair, D, S) p) - : first(BOOST_CONTAINER_MOVE_NAMESPACE::move(p.first)), second(BOOST_CONTAINER_MOVE_NAMESPACE::move(p.second)) - {} - - #ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - template - pair(U &&u, Args &&... args) - : first(BOOST_CONTAINER_MOVE_NAMESPACE::forward(u)) - , second(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...) - {} - - #else - - template - pair( BOOST_CONTAINERS_PARAM(U, u) - #ifdef BOOST_NO_RVALUE_REFERENCES - , typename containers_detail::disable_if - < containers_detail::is_same > >::type* = 0 - #endif - ) - : first(BOOST_CONTAINER_MOVE_NAMESPACE::forward(const_cast(u))) - {} - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - pair(BOOST_CONTAINERS_PARAM(U, u) \ - ,BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - : first(BOOST_CONTAINER_MOVE_NAMESPACE::forward(const_cast(u))) \ - , second(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)) \ - {} \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - #endif - - pair& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(pair) p) - { - first = p.first; - second = p.second; - return *this; - } - - pair& operator=(BOOST_MOVE_MACRO_RV_REF(pair) p) - { - first = BOOST_CONTAINER_MOVE_NAMESPACE::move(p.first); - second = BOOST_CONTAINER_MOVE_NAMESPACE::move(p.second); - return *this; - } - - pair& operator=(BOOST_MOVE_MACRO_RV_REF_2_TEMPL_ARGS(std::pair, T1, T2) p) - { - first = BOOST_CONTAINER_MOVE_NAMESPACE::move(p.first); - second = BOOST_CONTAINER_MOVE_NAMESPACE::move(p.second); - return *this; - } - - template - pair& operator=(BOOST_MOVE_MACRO_RV_REF_2_TEMPL_ARGS(std::pair, D, S) p) - { - first = BOOST_CONTAINER_MOVE_NAMESPACE::move(p.first); - second = BOOST_CONTAINER_MOVE_NAMESPACE::move(p.second); - return *this; - } - - void swap(pair& p) - { std::swap(*this, p); } -}; - -template -inline bool operator==(const pair& x, const pair& y) -{ return static_cast(x.first == y.first && x.second == y.second); } - -template -inline bool operator< (const pair& x, const pair& y) -{ return static_cast(x.first < y.first || - (!(y.first < x.first) && x.second < y.second)); } - -template -inline bool operator!=(const pair& x, const pair& y) -{ return static_cast(!(x == y)); } - -template -inline bool operator> (const pair& x, const pair& y) -{ return y < x; } - -template -inline bool operator>=(const pair& x, const pair& y) -{ return static_cast(!(x < y)); } - -template -inline bool operator<=(const pair& x, const pair& y) -{ return static_cast(!(y < x)); } - -template -inline pair make_pair(T1 x, T2 y) -{ return pair(x, y); } - -template -inline void swap(pair& x, pair& y) -{ - swap(x.first, y.first); - swap(x.second, y.second); -} - -} //namespace containers_detail { -} //namespace container { - - -//Without this specialization recursive flat_(multi)map instantiation fails -//because is_enum needs to instantiate the recursive pair, leading to a compilation error). -//This breaks the cycle clearly stating that pair is not an enum avoiding any instantiation. -template -struct is_enum; - -template -struct is_enum< ::boost::container::containers_detail::pair > -{ - static const bool value = false; -}; - -} //namespace boost { - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //#ifndef BOOST_CONTAINERS_DETAIL_PAIR_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/preprocessor.hpp b/3party/boost/boost/interprocess/containers/container/detail/preprocessor.hpp deleted file mode 100644 index 2f32aefa85..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/preprocessor.hpp +++ /dev/null @@ -1,141 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2008-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DETAIL_PREPROCESSOR_HPP -#define BOOST_CONTAINERS_DETAIL_PREPROCESSOR_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "config_begin.hpp" - -#ifndef BOOST_NO_RVALUE_REFERENCES -#include INCLUDE_BOOST_CONTAINER_DETAIL_STORED_REF_HPP -#endif - -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING -#error "This file is not needed when perfect forwarding is available" -#endif - -#include -#include -#include -#include -#include - -#define BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS 10 - -//Note: -//We define template parameters as const references to -//be able to bind temporaries. After that we will un-const them. -//This cast is ugly but it is necessary until "perfect forwarding" -//is achieved in C++0x. Meanwhile, if we want to be able to -//bind rvalues with non-const references, we have to be ugly -#ifndef BOOST_NO_RVALUE_REFERENCES - #define BOOST_CONTAINERS_PP_PARAM_LIST(z, n, data) \ - BOOST_PP_CAT(P, n) && BOOST_PP_CAT(p, n) \ - //! -#else - #define BOOST_CONTAINERS_PP_PARAM_LIST(z, n, data) \ - const BOOST_PP_CAT(P, n) & BOOST_PP_CAT(p, n) \ - //! -#endif - -#ifndef BOOST_NO_RVALUE_REFERENCES - #define BOOST_CONTAINERS_PARAM(U, u) \ - U && u \ - //! -#else - #define BOOST_CONTAINERS_PARAM(U, u) \ - const U & u \ - //! -#endif - -#ifndef BOOST_NO_RVALUE_REFERENCES - -#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - -#define BOOST_CONTAINERS_AUX_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (BOOST_CONTAINER_MOVE_NAMESPACE::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ -//! - -#else - -#define BOOST_CONTAINERS_AUX_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (static_cast( BOOST_PP_CAT(p, n) )) \ -//! - -#endif - -#else -#define BOOST_CONTAINERS_AUX_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (const_cast(BOOST_PP_CAT(p, n))) \ -//! -#endif - -#define BOOST_CONTAINERS_AUX_PARAM_INC(z, n, data) \ - BOOST_PP_CAT(++m_p, n) \ -//! - -#ifndef BOOST_NO_RVALUE_REFERENCES - -#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - -#define BOOST_CONTAINERS_AUX_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ -//! - -#else - -#define BOOST_CONTAINERS_AUX_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n); \ -//! - -#endif //defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - - -#else -#define BOOST_CONTAINERS_AUX_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ -//! -#endif - -#define BOOST_CONTAINERS_PP_PARAM_FORWARD(z, n, data) \ -BOOST_CONTAINER_MOVE_NAMESPACE::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ) \ -//! - -#if !defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - -#define BOOST_CONTAINERS_PP_MEMBER_FORWARD(z, n, data) \ -::boost::container::containers_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(m_p, n) ) \ -//! - -#else - -#define BOOST_CONTAINERS_PP_MEMBER_FORWARD(z, n, data) \ -BOOST_CONTAINER_MOVE_NAMESPACE::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(m_p, n) ) \ -//! - -#endif //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - -#define BOOST_CONTAINERS_PP_MEMBER_IT_FORWARD(z, n, data) \ -BOOST_PP_CAT(*m_p, n) \ -//! - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#else -#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING -#error "This file is not needed when perfect forwarding is available" -#endif -#endif //#ifndef BOOST_CONTAINERS_DETAIL_PREPROCESSOR_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/utilities.hpp b/3party/boost/boost/interprocess/containers/container/detail/utilities.hpp deleted file mode 100644 index 6bd5ab51e0..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/utilities.hpp +++ /dev/null @@ -1,148 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DETAIL_UTILITIES_HPP -#define BOOST_CONTAINERS_DETAIL_UTILITIES_HPP - -#include "config_begin.hpp" -#include -#include -#include -#include -#include -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include - -namespace boost { -namespace container { -namespace containers_detail { - -template -const T &max_value(const T &a, const T &b) -{ return a > b ? a : b; } - -template -const T &min_value(const T &a, const T &b) -{ return a < b ? a : b; } - -template -SizeType - get_next_capacity(const SizeType max_size - ,const SizeType capacity - ,const SizeType n) -{ -// if (n > max_size - capacity) -// throw std::length_error("get_next_capacity"); - - const SizeType m3 = max_size/3; - - if (capacity < m3) - return capacity + max_value(3*(capacity+1)/5, n); - - if (capacity < m3*2) - return capacity + max_value((capacity+1)/2, n); - - return max_size; -} - -template -struct smart_ptr_type -{ - typedef typename SmartPtr::value_type value_type; - typedef value_type *pointer; - static pointer get (const SmartPtr &smartptr) - { return smartptr.get();} -}; - -template -struct smart_ptr_type -{ - typedef T value_type; - typedef value_type *pointer; - static pointer get (pointer ptr) - { return ptr;} -}; - -//!Overload for smart pointers to avoid ADL problems with get_pointer -template -inline typename smart_ptr_type::pointer -get_pointer(const Ptr &ptr) -{ return smart_ptr_type::get(ptr); } - -//!To avoid ADL problems with swap -template -inline void do_swap(T& x, T& y) -{ - using std::swap; - swap(x, y); -} - -//Rounds "orig_size" by excess to round_to bytes -inline std::size_t get_rounded_size(std::size_t orig_size, std::size_t round_to) -{ - return ((orig_size-1)/round_to+1)*round_to; -} - -template -struct ct_rounded_size -{ - enum { value = ((OrigSize-1)/RoundTo+1)*RoundTo }; -}; - -template -struct __rw_is_enum -{ -struct _C_no { }; -struct _C_yes { int _C_dummy [2]; }; - -struct _C_indirect { -// prevent classes with user-defined conversions from matching - -// use double to prevent float->int gcc conversion warnings -_C_indirect (double); -}; - -// nested struct gets rid of bogus gcc errors -struct _C_nest { -// supply first argument to prevent HP aCC warnings -static _C_no _C_is (int, ...); -static _C_yes _C_is (int, _C_indirect); - -static _TypeT _C_make_T (); -}; - -enum { -_C_val = sizeof (_C_yes) -== sizeof (_C_nest::_C_is (0, _C_nest::_C_make_T ())) -&& !::boost::is_fundamental<_TypeT>::value -}; - -}; - -template -struct move_const_ref_type - : if_c - < ::boost::is_fundamental::value || ::boost::is_pointer::value || - ::boost::is_member_pointer::value || ::boost::is_enum::value - ,const T & - ,BOOST_MOVE_MACRO_CATCH_CONST_RLVALUE(T) - > -{}; - -} //namespace containers_detail { -} //namespace container { -} //namespace boost { - - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //#ifndef BOOST_CONTAINERS_DETAIL_UTILITIES_HPP diff --git a/3party/boost/boost/interprocess/containers/container/detail/workaround.hpp b/3party/boost/boost/interprocess/containers/container/detail/workaround.hpp deleted file mode 100644 index d16b590e1f..0000000000 --- a/3party/boost/boost/interprocess/containers/container/detail/workaround.hpp +++ /dev/null @@ -1,24 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_DETAIL_WORKAROUND_HPP -#define BOOST_CONTAINERS_DETAIL_WORKAROUND_HPP - -#include "config_begin.hpp" - -#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)\ - && !defined(BOOST_MOVE_MACRO_DISABLE_VARIADIC_TMPL) -#define BOOST_CONTAINERS_PERFECT_FORWARDING - -#endif - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //#ifndef BOOST_CONTAINERS_DETAIL_WORKAROUND_HPP diff --git a/3party/boost/boost/interprocess/containers/container/stable_vector.hpp b/3party/boost/boost/interprocess/containers/container/stable_vector.hpp deleted file mode 100644 index dd8ae47323..0000000000 --- a/3party/boost/boost/interprocess/containers/container/stable_vector.hpp +++ /dev/null @@ -1,1329 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2008-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// -/* Stable vector. - * - * Copyright 2008 Joaquin M Lopez Munoz. - * 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 BOOST_CONTAINER_STABLE_VECTOR_HPP -#define BOOST_CONTAINER_STABLE_VECTOR_HPP - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include -#include -#include -#include -#include INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MULTIALLOCATION_CHAIN_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#include -#include - -#include -#include -#include - -///@cond - -#define STABLE_VECTOR_USE_CONTAINERS_VECTOR - -#if defined (STABLE_VECTOR_USE_CONTAINERS_VECTOR) -#include INCLUDE_BOOST_CONTAINER_VECTOR_HPP -#else -#include -#endif //STABLE_VECTOR_USE_CONTAINERS_VECTOR - -//#define STABLE_VECTOR_ENABLE_INVARIANT_CHECKING - -#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) -#include -#endif - -///@endcond - -namespace boost { -namespace container { - -///@cond - -namespace stable_vector_detail{ - -template -struct smart_ptr_type -{ - typedef typename SmartPtr::value_type value_type; - typedef value_type *pointer; - static pointer get (const SmartPtr &smartptr) - { return smartptr.get();} -}; - -template -struct smart_ptr_type -{ - typedef T value_type; - typedef value_type *pointer; - static pointer get (pointer ptr) - { return ptr;} -}; - -template -inline typename smart_ptr_type::pointer get_pointer(const Ptr &ptr) -{ return smart_ptr_type::get(ptr); } - -template -class clear_on_destroy -{ - public: - clear_on_destroy(C &c) - : c_(c), do_clear_(true) - {} - - void release() - { do_clear_ = false; } - - ~clear_on_destroy() - { - if(do_clear_){ - c_.clear(); - c_.clear_pool(); - } - } - - private: - clear_on_destroy(const clear_on_destroy &); - clear_on_destroy &operator=(const clear_on_destroy &); - C &c_; - bool do_clear_; -}; - -template -struct node_type_base -{/* - node_type_base(VoidPtr p) - : up(p) - {}*/ - node_type_base() - {} - void set_pointer(VoidPtr p) - { up = p; } - - VoidPtr up; -}; - -template -struct node_type - : public node_type_base -{ - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - node_type() - : value() - {} - - template - node_type(Args &&...args) - : value(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...) - {} - - #else //BOOST_CONTAINERS_PERFECT_FORWARDING - - node_type() - : value() - {} - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - node_type(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - : value(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)) \ - {} \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif//BOOST_CONTAINERS_PERFECT_FORWARDING - - void set_pointer(VoidPointer p) - { node_type_base::set_pointer(p); } - - T value; -}; - -template -class iterator - : public std::iterator< std::random_access_iterator_tag - , typename std::iterator_traits::value_type - , typename std::iterator_traits::difference_type - , Pointer - , Reference> -{ - - typedef typename boost::pointer_to_other - ::type void_ptr; - typedef node_type node_type_t; - typedef typename boost::pointer_to_other - ::type node_type_ptr_t; - typedef typename boost::pointer_to_other - ::type void_ptr_ptr; - - friend class iterator::type>; - - public: - typedef std::random_access_iterator_tag iterator_category; - typedef T value_type; - typedef typename std::iterator_traits - ::difference_type difference_type; - typedef Pointer pointer; - typedef Reference reference; - - iterator() - {} - - explicit iterator(node_type_ptr_t pn) - : pn(pn) - {} - - iterator(const iterator::type >& x) - : pn(x.pn) - {} - - private: - static node_type_ptr_t node_ptr_cast(void_ptr p) - { - using boost::get_pointer; - return node_type_ptr_t(static_cast(stable_vector_detail::get_pointer(p))); - } - - static void_ptr_ptr void_ptr_ptr_cast(void_ptr p) - { - using boost::get_pointer; - return void_ptr_ptr(static_cast(stable_vector_detail::get_pointer(p))); - } - - reference dereference() const - { return pn->value; } - bool equal(const iterator& x) const - { return pn==x.pn; } - void increment() - { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+1)); } - void decrement() - { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)-1)); } - void advance(std::ptrdiff_t n) - { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+n)); } - std::ptrdiff_t distance_to(const iterator& x)const - { return void_ptr_ptr_cast(x.pn->up) - void_ptr_ptr_cast(pn->up); } - - public: - //Pointer like operators - reference operator*() const { return this->dereference(); } - pointer operator->() const { return pointer(&this->dereference()); } - - //Increment / Decrement - iterator& operator++() - { this->increment(); return *this; } - - iterator operator++(int) - { iterator tmp(*this); ++*this; return iterator(tmp); } - - iterator& operator--() - { this->decrement(); return *this; } - - iterator operator--(int) - { iterator tmp(*this); --*this; return iterator(tmp); } - - reference operator[](difference_type off) const - { - iterator tmp(*this); - tmp += off; - return *tmp; - } - - iterator& operator+=(difference_type off) - { - pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+off)); - return *this; - } - - iterator operator+(difference_type off) const - { - iterator tmp(*this); - tmp += off; - return tmp; - } - - friend iterator operator+(difference_type off, const iterator& right) - { - iterator tmp(right); - tmp += off; - return tmp; - } - - iterator& operator-=(difference_type off) - { *this += -off; return *this; } - - iterator operator-(difference_type off) const - { - iterator tmp(*this); - tmp -= off; - return tmp; - } - - difference_type operator-(const iterator& right) const - { - void_ptr_ptr p1 = void_ptr_ptr_cast(this->pn->up); - void_ptr_ptr p2 = void_ptr_ptr_cast(right.pn->up); - return p1 - p2; - } - - //Comparison operators - bool operator== (const iterator& r) const - { return pn == r.pn; } - - bool operator!= (const iterator& r) const - { return pn != r.pn; } - - bool operator< (const iterator& r) const - { return void_ptr_ptr_cast(pn->up) < void_ptr_ptr_cast(r.pn->up); } - - bool operator<= (const iterator& r) const - { return void_ptr_ptr_cast(pn->up) <= void_ptr_ptr_cast(r.pn->up); } - - bool operator> (const iterator& r) const - { return void_ptr_ptr_cast(pn->up) > void_ptr_ptr_cast(r.pn->up); } - - bool operator>= (const iterator& r) const - { return void_ptr_ptr_cast(pn->up) >= void_ptr_ptr_cast(r.pn->up); } - - node_type_ptr_t pn; -}; - -template -struct select_multiallocation_chain -{ - typedef typename Allocator::multiallocation_chain type; -}; - -template -struct select_multiallocation_chain -{ - typedef typename Allocator::template - rebind::other::pointer void_ptr; - typedef containers_detail::basic_multiallocation_chain - multialloc_cached_counted; - typedef boost::container::containers_detail::transform_multiallocation_chain - type; -}; - -} //namespace stable_vector_detail - -#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) - -#define STABLE_VECTOR_CHECK_INVARIANT \ -invariant_checker BOOST_JOIN(check_invariant_,__LINE__)(*this); \ -BOOST_JOIN(check_invariant_,__LINE__).touch(); -#else - -#define STABLE_VECTOR_CHECK_INVARIANT - -#endif //#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) - -/// @endcond - -//!Help taken from ( Introducing stable_vector) -//! -//!We present stable_vector, a fully STL-compliant stable container that provides -//!most of the features of std::vector except element contiguity. -//! -//!General properties: stable_vector satisfies all the requirements of a container, -//!a reversible container and a sequence and provides all the optional operations -//!present in std::vector. Like std::vector, iterators are random access. -//!stable_vector does not provide element contiguity; in exchange for this absence, -//!the container is stable, i.e. references and iterators to an element of a stable_vector -//!remain valid as long as the element is not erased, and an iterator that has been -//!assigned the return value of end() always remain valid until the destruction of -//!the associated stable_vector. -//! -//!Operation complexity: The big-O complexities of stable_vector operations match -//!exactly those of std::vector. In general, insertion/deletion is constant time at -//!the end of the sequence and linear elsewhere. Unlike std::vector, stable_vector -//!does not internally perform any value_type destruction, copy or assignment -//!operations other than those exactly corresponding to the insertion of new -//!elements or deletion of stored elements, which can sometimes compensate in terms -//!of performance for the extra burden of doing more pointer manipulation and an -//!additional allocation per element. -//! -//!Exception safety: As stable_vector does not internally copy elements around, some -//!operations provide stronger exception safety guarantees than in std::vector: -template -class stable_vector -{ - ///@cond - typedef typename containers_detail:: - move_const_ref_type::type insert_const_ref_type; - typedef typename Allocator::template - rebind::other::pointer void_ptr; - typedef typename Allocator::template - rebind::other::pointer void_ptr_ptr; - typedef stable_vector_detail::node_type - node_type_t; - typedef typename Allocator::template - rebind::other::pointer node_type_ptr_t; - typedef stable_vector_detail::node_type_base - node_type_base_t; - typedef typename Allocator::template - rebind::other::pointer node_type_base_ptr_t; - typedef - #if defined (STABLE_VECTOR_USE_CONTAINERS_VECTOR) - ::boost::container:: - #else - ::std:: - #endif //STABLE_VECTOR_USE_CONTAINERS_VECTOR - vector::other - > impl_type; - typedef typename impl_type::iterator impl_iterator; - typedef typename impl_type::const_iterator const_impl_iterator; - - typedef ::boost::container::containers_detail:: - integral_constant allocator_v1; - typedef ::boost::container::containers_detail:: - integral_constant allocator_v2; - typedef ::boost::container::containers_detail::integral_constant - ::value> alloc_version; - typedef typename Allocator:: - template rebind::other node_allocator_type; - - node_type_ptr_t allocate_one() - { return this->allocate_one(alloc_version()); } - - node_type_ptr_t allocate_one(allocator_v1) - { return get_al().allocate(1); } - - node_type_ptr_t allocate_one(allocator_v2) - { return get_al().allocate_one(); } - - void deallocate_one(node_type_ptr_t p) - { return this->deallocate_one(p, alloc_version()); } - - void deallocate_one(node_type_ptr_t p, allocator_v1) - { get_al().deallocate(p, 1); } - - void deallocate_one(node_type_ptr_t p, allocator_v2) - { get_al().deallocate_one(p); } - - friend class stable_vector_detail::clear_on_destroy; - ///@endcond - public: - - - // types: - - typedef typename Allocator::reference reference; - typedef typename Allocator::const_reference const_reference; - typedef typename Allocator::pointer pointer; - typedef typename Allocator::const_pointer const_pointer; - typedef stable_vector_detail::iterator - iterator; - typedef stable_vector_detail::iterator - const_iterator; - typedef typename impl_type::size_type size_type; - typedef typename iterator::difference_type difference_type; - typedef T value_type; - typedef Allocator allocator_type; - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; - - ///@cond - private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(stable_vector) - static const size_type ExtraPointers = 3; - typedef typename stable_vector_detail:: - select_multiallocation_chain - < node_allocator_type - , alloc_version::value - >::type multiallocation_chain; - ///@endcond - public: - - // construct/copy/destroy: - explicit stable_vector(const Allocator& al=Allocator()) - : internal_data(al),impl(al) - { - STABLE_VECTOR_CHECK_INVARIANT; - } - - explicit stable_vector(size_type n) - : internal_data(Allocator()),impl(Allocator()) - { - stable_vector_detail::clear_on_destroy cod(*this); - this->resize(n); - STABLE_VECTOR_CHECK_INVARIANT; - cod.release(); - } - - stable_vector(size_type n, const T& t, const Allocator& al=Allocator()) - : internal_data(al),impl(al) - { - stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), n, t); - STABLE_VECTOR_CHECK_INVARIANT; - cod.release(); - } - - template - stable_vector(InputIterator first,InputIterator last,const Allocator& al=Allocator()) - : internal_data(al),impl(al) - { - stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), first, last); - STABLE_VECTOR_CHECK_INVARIANT; - cod.release(); - } - - stable_vector(const stable_vector& x) - : internal_data(x.get_al()),impl(x.get_al()) - { - stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), x.begin(), x.end()); - STABLE_VECTOR_CHECK_INVARIANT; - cod.release(); - } - - stable_vector(BOOST_MOVE_MACRO_RV_REF(stable_vector) x) - : internal_data(x.get_al()),impl(x.get_al()) - { this->swap(x); } - - ~stable_vector() - { - this->clear(); - clear_pool(); - } - - stable_vector& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(stable_vector) x) - { - STABLE_VECTOR_CHECK_INVARIANT; - if (this != &x) { - this->assign(x.begin(), x.end()); - } - return *this; - } - - stable_vector& operator=(BOOST_MOVE_MACRO_RV_REF(stable_vector) x) - { - if (&x != this){ - this->swap(x); - x.clear(); - } - return *this; - } - - template - void assign(InputIterator first,InputIterator last) - { - assign_dispatch(first, last, boost::is_integral()); - } - - void assign(size_type n,const T& t) - { - typedef constant_iterator cvalue_iterator; - return assign_dispatch(cvalue_iterator(t, n), cvalue_iterator(), boost::mpl::false_()); - } - - allocator_type get_allocator()const {return get_al();} - - // iterators: - - iterator begin() - { return (impl.empty()) ? end(): iterator(node_ptr_cast(impl.front())) ; } - - const_iterator begin()const - { return (impl.empty()) ? cend() : const_iterator(node_ptr_cast(impl.front())) ; } - - iterator end() {return iterator(get_end_node());} - const_iterator end()const {return const_iterator(get_end_node());} - - reverse_iterator rbegin() {return reverse_iterator(this->end());} - const_reverse_iterator rbegin()const {return const_reverse_iterator(this->end());} - reverse_iterator rend() {return reverse_iterator(this->begin());} - const_reverse_iterator rend()const {return const_reverse_iterator(this->begin());} - - const_iterator cbegin()const {return this->begin();} - const_iterator cend()const {return this->end();} - const_reverse_iterator crbegin()const{return this->rbegin();} - const_reverse_iterator crend()const {return this->rend();} - - // capacity: - size_type size() const - { return impl.empty() ? 0 : (impl.size() - ExtraPointers); } - - size_type max_size() const - { return impl.max_size() - ExtraPointers; } - - size_type capacity() const - { - if(!impl.capacity()){ - return 0; - } - else{ - const size_type num_nodes = this->impl.size() + this->internal_data.pool_size; - const size_type num_buck = this->impl.capacity(); - return (num_nodes < num_buck) ? num_nodes : num_buck; - } - } - - bool empty() const - { return impl.empty() || impl.size() == ExtraPointers; } - - void resize(size_type n, const T& t) - { - STABLE_VECTOR_CHECK_INVARIANT; - if(n > size()) - this->insert(this->cend(), n - this->size(), t); - else if(n < this->size()) - this->erase(this->cbegin() + n, this->cend()); - } - - void resize(size_type n) - { - typedef default_construct_iterator default_iterator; - STABLE_VECTOR_CHECK_INVARIANT; - if(n > size()) - this->insert(this->cend(), default_iterator(n - this->size()), default_iterator()); - else if(n < this->size()) - this->erase(this->cbegin() + n, this->cend()); - } - - void reserve(size_type n) - { - STABLE_VECTOR_CHECK_INVARIANT; - if(n > this->max_size()) - throw std::bad_alloc(); - - size_type size = this->size(); - size_type old_capacity = this->capacity(); - if(n > old_capacity){ - this->initialize_end_node(n); - const void * old_ptr = &impl[0]; - impl.reserve(n + ExtraPointers); - bool realloced = &impl[0] != old_ptr; - //Fix the pointers for the newly allocated buffer - if(realloced){ - this->align_nodes(impl.begin(), impl.begin()+size+1); - } - //Now fill pool if data is not enough - if((n - size) > this->internal_data.pool_size){ - this->add_to_pool((n - size) - this->internal_data.pool_size); - } - } - } - - // element access: - - reference operator[](size_type n){return value(impl[n]);} - const_reference operator[](size_type n)const{return value(impl[n]);} - - const_reference at(size_type n)const - { - if(n>=size()) - throw std::out_of_range("invalid subscript at stable_vector::at"); - return operator[](n); - } - - reference at(size_type n) - { - if(n>=size()) - throw std::out_of_range("invalid subscript at stable_vector::at"); - return operator[](n); - } - - reference front() - { return value(impl.front()); } - - const_reference front()const - { return value(impl.front()); } - - reference back() - { return value(*(&impl.back() - ExtraPointers)); } - - const_reference back()const - { return value(*(&impl.back() - ExtraPointers)); } - - // modifiers: - - void push_back(insert_const_ref_type x) - { return priv_push_back(x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - void push_back(T &x) { push_back(const_cast(x)); } - - template - void push_back(const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return priv_push_back(u); } - #endif - - void push_back(BOOST_MOVE_MACRO_RV_REF(T) t) - { this->insert(end(), BOOST_CONTAINER_MOVE_NAMESPACE::move(t)); } - - void pop_back() - { this->erase(this->end()-1); } - - iterator insert(const_iterator position, insert_const_ref_type x) - { return this->priv_insert(position, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } - - template - iterator insert(const_iterator position, const U &u, typename containers_detail::enable_if_c::value && !::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value >::type* =0) - { return this->priv_insert(position, u); } - #endif - - iterator insert(const_iterator position, BOOST_MOVE_MACRO_RV_REF(T) x) - { - typedef repeat_iterator repeat_it; - typedef BOOST_CONTAINER_MOVE_NAMESPACE::move_iterator repeat_move_it; - //Just call more general insert(pos, size, value) and return iterator - size_type pos_n = position - cbegin(); - this->insert(position - ,repeat_move_it(repeat_it(x, 1)) - ,repeat_move_it(repeat_it())); - return iterator(this->begin() + pos_n); - } - - void insert(const_iterator position, size_type n, const T& t) - { - STABLE_VECTOR_CHECK_INVARIANT; - this->insert_not_iter(position, n, t); - } - - template - void insert(const_iterator position,InputIterator first, InputIterator last) - { - STABLE_VECTOR_CHECK_INVARIANT; - this->insert_iter(position,first,last, - boost::mpl::not_ >()); - } - - #if defined(BOOST_CONTAINERS_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the end of the vector. - //! - //! Throws: If memory allocation throws or the in-place constructor throws. - //! - //! Complexity: Amortized constant time. - template - void emplace_back(Args &&...args) - { - typedef emplace_functor EmplaceFunctor; - typedef emplace_iterator EmplaceIterator; - EmplaceFunctor &&ef = EmplaceFunctor(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->insert(this->cend(), EmplaceIterator(ef), EmplaceIterator()); - } - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... before position - //! - //! Throws: If memory allocation throws or the in-place constructor throws. - //! - //! Complexity: If position is end(), amortized constant time - //! Linear time otherwise. - template - iterator emplace(const_iterator position, Args && ...args) - { - //Just call more general insert(pos, size, value) and return iterator - size_type pos_n = position - cbegin(); - typedef emplace_functor EmplaceFunctor; - typedef emplace_iterator EmplaceIterator; - EmplaceFunctor &&ef = EmplaceFunctor(BOOST_CONTAINER_MOVE_NAMESPACE::forward(args)...); - this->insert(position, EmplaceIterator(ef), EmplaceIterator()); - return iterator(this->begin() + pos_n); - } - - #else - - void emplace_back() - { - typedef emplace_functor EmplaceFunctor; - typedef emplace_iterator EmplaceIterator; - EmplaceFunctor ef; - this->insert(this->cend(), EmplaceIterator(ef), EmplaceIterator()); - } - - iterator emplace(const_iterator position) - { - typedef emplace_functor EmplaceFunctor; - typedef emplace_iterator EmplaceIterator; - EmplaceFunctor ef; - size_type pos_n = position - this->cbegin(); - this->insert(position, EmplaceIterator(ef), EmplaceIterator()); - return iterator(this->begin() + pos_n); - } - - #define BOOST_PP_LOCAL_MACRO(n) \ - template \ - void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - typedef BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \ - EmplaceFunctor; \ - typedef emplace_iterator EmplaceIterator; \ - EmplaceFunctor ef(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - this->insert(this->cend(), EmplaceIterator(ef), EmplaceIterator()); \ - } \ - \ - template \ - iterator emplace(const_iterator pos, BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_LIST, _)) \ - { \ - typedef BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \ - EmplaceFunctor; \ - typedef emplace_iterator EmplaceIterator; \ - EmplaceFunctor ef(BOOST_PP_ENUM(n, BOOST_CONTAINERS_PP_PARAM_FORWARD, _)); \ - size_type pos_n = pos - this->cbegin(); \ - this->insert(pos, EmplaceIterator(ef), EmplaceIterator()); \ - return iterator(this->begin() + pos_n); \ - } \ - //! - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_CONTAINERS_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif //#ifdef BOOST_CONTAINERS_PERFECT_FORWARDING - - iterator erase(const_iterator position) - { - STABLE_VECTOR_CHECK_INVARIANT; - difference_type d=position-this->cbegin(); - impl_iterator it=impl.begin()+d; - this->delete_node(*it); - impl.erase(it); - this->align_nodes(impl.begin()+d,get_last_align()); - return this->begin()+d; - } - - iterator erase(const_iterator first, const_iterator last) - { return priv_erase(first, last, alloc_version()); } - - void swap(stable_vector & x) - { - STABLE_VECTOR_CHECK_INVARIANT; - this->swap_impl(*this,x); - } - - void clear() - { this->erase(this->cbegin(),this->cend()); } - - /// @cond - private: - - iterator priv_insert(const_iterator position, const value_type &t) - { - typedef constant_iterator cvalue_iterator; - return this->insert_iter(position, cvalue_iterator(t, 1), cvalue_iterator(), std::forward_iterator_tag()); - } - - void priv_push_back(const value_type &t) - { this->insert(end(), t); } - - void clear_pool(allocator_v1) - { - if(!impl.empty() && impl.back()){ - void_ptr &p1 = *(impl.end()-2); - void_ptr &p2 = impl.back(); - - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), p1, p2, this->internal_data.pool_size); - while(!holder.empty()){ - node_type_ptr_t n = holder.front(); - holder.pop_front(); - this->deallocate_one(n); - } - p1 = p2 = 0; - this->internal_data.pool_size = 0; - } - } - - void clear_pool(allocator_v2) - { - - if(!impl.empty() && impl.back()){ - void_ptr &p1 = *(impl.end()-2); - void_ptr &p2 = impl.back(); - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), p1, p2, internal_data.pool_size); - get_al().deallocate_individual(BOOST_CONTAINER_MOVE_NAMESPACE::move(holder)); - p1 = p2 = 0; - this->internal_data.pool_size = 0; - } - } - - void clear_pool() - { - this->clear_pool(alloc_version()); - } - - void add_to_pool(size_type n) - { - this->add_to_pool(n, alloc_version()); - } - - void add_to_pool(size_type n, allocator_v1) - { - size_type remaining = n; - while(remaining--){ - this->put_in_pool(this->allocate_one()); - } - } - - void add_to_pool(size_type n, allocator_v2) - { - void_ptr &p1 = *(impl.end()-2); - void_ptr &p2 = impl.back(); - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), p1, p2, internal_data.pool_size); - BOOST_STATIC_ASSERT((::BOOST_CONTAINER_MOVE_NAMESPACE::is_movable::value == true)); - multiallocation_chain m (get_al().allocate_individual(n)); - holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n); - this->internal_data.pool_size += n; - std::pair data(holder.extract_data()); - p1 = data.first; - p2 = data.second; - } - - void put_in_pool(node_type_ptr_t p) - { - void_ptr &p1 = *(impl.end()-2); - void_ptr &p2 = impl.back(); - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), p1, p2, internal_data.pool_size); - holder.push_front(p); - ++this->internal_data.pool_size; - std::pair ret(holder.extract_data()); - p1 = ret.first; - p2 = ret.second; - } - - node_type_ptr_t get_from_pool() - { - if(!impl.back()){ - return node_type_ptr_t(0); - } - else{ - void_ptr &p1 = *(impl.end()-2); - void_ptr &p2 = impl.back(); - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), p1, p2, internal_data.pool_size); - node_type_ptr_t ret = holder.front(); - holder.pop_front(); - --this->internal_data.pool_size; - if(!internal_data.pool_size){ - p1 = p2 = 0; - } - else{ - std::pair data(holder.extract_data()); - p1 = data.first; - p2 = data.second; - } - return ret; - } - } - - void insert_iter_prolog(size_type n, difference_type d) - { - initialize_end_node(n); - const void* old_ptr = &impl[0]; - //size_type old_capacity = capacity(); - //size_type old_size = size(); - impl.insert(impl.begin()+d, n, 0); - bool realloced = &impl[0] != old_ptr; - //Fix the pointers for the newly allocated buffer - if(realloced){ - align_nodes(impl.begin(), impl.begin()+d); - } - } - - template - void assign_dispatch(InputIterator first, InputIterator last, boost::mpl::false_) - { - STABLE_VECTOR_CHECK_INVARIANT; - iterator first1 = this->begin(); - iterator last1 = this->end(); - for ( ; first1 != last1 && first != last; ++first1, ++first) - *first1 = *first; - if (first == last){ - this->erase(first1, last1); - } - else{ - this->insert(last1, first, last); - } - } - - template - void assign_dispatch(Integer n, Integer t, boost::mpl::true_) - { - typedef constant_iterator cvalue_iterator; - this->assign_dispatch(cvalue_iterator(t, n), cvalue_iterator(), boost::mpl::false_()); - } - - iterator priv_erase(const_iterator first, const_iterator last, allocator_v1) - { - STABLE_VECTOR_CHECK_INVARIANT; - difference_type d1 = first - this->cbegin(), d2 = last - this->cbegin(); - if(d1 != d2){ - impl_iterator it1(impl.begin() + d1), it2(impl.begin() + d2); - for(impl_iterator it = it1; it != it2; ++it) - this->delete_node(*it); - impl.erase(it1, it2); - this->align_nodes(impl.begin() + d1, get_last_align()); - } - return iterator(this->begin() + d1); - } - - impl_iterator get_last_align() - { - return impl.end() - (ExtraPointers - 1); - } - - const_impl_iterator get_last_align() const - { - return impl.cend() - (ExtraPointers - 1); - } - - template - iterator priv_erase(const_iterator first, const_iterator last, AllocatorVersion, - typename boost::container::containers_detail::enable_if_c - - ::value>::type * = 0) - { - STABLE_VECTOR_CHECK_INVARIANT; - return priv_erase(first, last, allocator_v1()); - } - - static node_type_ptr_t node_ptr_cast(void_ptr p) - { - using boost::get_pointer; - return node_type_ptr_t(static_cast(stable_vector_detail::get_pointer(p))); - } - - static node_type_base_ptr_t node_base_ptr_cast(void_ptr p) - { - using boost::get_pointer; - return node_type_base_ptr_t(static_cast(stable_vector_detail::get_pointer(p))); - } - - static value_type& value(void_ptr p) - { - return node_ptr_cast(p)->value; - } - - void initialize_end_node(size_type impl_capacity = 0) - { - if(impl.empty()){ - impl.reserve(impl_capacity + ExtraPointers); - impl.resize (ExtraPointers, void_ptr(0)); - impl[0] = &this->internal_data.end_node; - this->internal_data.end_node.up = &impl[0]; - } - } - - void readjust_end_node() - { - if(!this->impl.empty()){ - void_ptr &end_node_ref = *(this->get_last_align()-1); - end_node_ref = this->get_end_node(); - this->internal_data.end_node.up = &end_node_ref; - } - else{ - this->internal_data.end_node.up = void_ptr(&this->internal_data.end_node.up); - } - } - - node_type_ptr_t get_end_node() const - { - const node_type_base_t* cp = &this->internal_data.end_node; - node_type_base_t* p = const_cast(cp); - return node_ptr_cast(p); - } - - template - void_ptr new_node(void_ptr up, Iter it) - { - node_type_ptr_t p = this->allocate_one(); - try{ - boost::container::construct_in_place(&*p, it); - p->set_pointer(up); - } - catch(...){ - this->deallocate_one(p); - throw; - } - return p; - } - - void delete_node(void_ptr p) - { - node_type_ptr_t n(node_ptr_cast(p)); - n->~node_type_t(); - this->put_in_pool(n); - } - - static void align_nodes(impl_iterator first,impl_iterator last) - { - while(first!=last){ - node_ptr_cast(*first)->up = void_ptr(&*first); - ++first; - } - } - - void insert_not_iter(const_iterator position, size_type n, const T& t) - { - typedef constant_iterator cvalue_iterator; - this->insert_iter(position, cvalue_iterator(t, n), cvalue_iterator(), std::forward_iterator_tag()); - } - - template - void insert_iter(const_iterator position,InputIterator first,InputIterator last, boost::mpl::true_) - { - typedef typename std::iterator_traits::iterator_category category; - this->insert_iter(position, first, last, category()); - } - - template - void insert_iter(const_iterator position,InputIterator first,InputIterator last,std::input_iterator_tag) - { - for(; first!=last; ++first){ - this->insert(position, *first); - } - } - - template - iterator insert_iter(const_iterator position, InputIterator first, InputIterator last, std::forward_iterator_tag) - { - size_type n = (size_type)std::distance(first,last); - difference_type d = position-this->cbegin(); - if(n){ - this->insert_iter_prolog(n, d); - const impl_iterator it(impl.begin() + d); - this->insert_iter_fwd(it, first, last, n); - //Fix the pointers for the newly allocated buffer - this->align_nodes(it + n, get_last_align()); - } - return this->begin() + d; - } - - template - void insert_iter_fwd_alloc(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n, allocator_v1) - { - size_type i=0; - try{ - while(first!=last){ - *(it + i) = this->new_node(void_ptr((void*)(&*(it + i))), first); - ++first; - ++i; - } - } - catch(...){ - impl.erase(it + i, it + n); - this->align_nodes(it + i, get_last_align()); - throw; - } - } - - template - void insert_iter_fwd_alloc(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n, allocator_v2) - { - multiallocation_chain mem(get_al().allocate_individual(n)); - - size_type i = 0; - node_type_ptr_t p = 0; - try{ - while(first != last){ - p = mem.front(); - mem.pop_front(); - //This can throw - boost::container::construct_in_place(&*p, first); - p->set_pointer(void_ptr((void*)(&*(it + i)))); - ++first; - *(it + i) = p; - ++i; - } - } - catch(...){ - get_al().deallocate_one(p); - get_al().deallocate_many(BOOST_CONTAINER_MOVE_NAMESPACE::move(mem)); - impl.erase(it+i, it+n); - this->align_nodes(it+i,get_last_align()); - throw; - } - } - - template - void insert_iter_fwd(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n) - { - size_type i = 0; - node_type_ptr_t p = 0; - try{ - while(first != last){ - p = get_from_pool(); - if(!p){ - insert_iter_fwd_alloc(it+i, first, last, n-i, alloc_version()); - break; - } - //This can throw - boost::container::construct_in_place(&*p, first); - p->set_pointer(void_ptr(&*(it+i))); - ++first; - *(it+i)=p; - ++i; - } - } - catch(...){ - put_in_pool(p); - impl.erase(it+i,it+n); - this->align_nodes(it+i,get_last_align()); - throw; - } - } - - template - void insert_iter(const_iterator position, InputIterator first, InputIterator last, boost::mpl::false_) - { - this->insert_not_iter(position, first, last); - } - - static void swap_impl(stable_vector& x,stable_vector& y) - { - using std::swap; - swap(x.get_al(),y.get_al()); - swap(x.impl,y.impl); - swap(x.internal_data.pool_size, y.internal_data.pool_size); - x.readjust_end_node(); - y.readjust_end_node(); - } - - #if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) - bool invariant()const - { - if(impl.empty()) - return !capacity() && !size(); - if(get_end_node() != *(impl.end() - ExtraPointers)){ - return false; - } - for(const_impl_iterator it=impl.begin(),it_end=get_last_align();it!=it_end;++it){ - if(node_ptr_cast(*it)->up != &*it) - return false; - } - size_type n = capacity()-size(); - const void_ptr &pool_head = impl.back(); - size_type num_pool = 0; - node_type_ptr_t p = node_ptr_cast(pool_head); - while(p){ - ++num_pool; - p = p->up; - } - return n >= num_pool; - } - - class invariant_checker:private boost::noncopyable - { - const stable_vector* p; - public: - invariant_checker(const stable_vector& v):p(&v){} - ~invariant_checker(){BOOST_ASSERT(p->invariant());} - void touch(){} - }; - #endif - - struct ebo_holder - : node_allocator_type - { - ebo_holder(const allocator_type &a) - : node_allocator_type(a), pool_size(0), end_node() - { - end_node.set_pointer(void_ptr(&end_node.up)); - } - size_type pool_size; - node_type_base_t end_node; - } internal_data; - - node_allocator_type &get_al() { return internal_data; } - const node_allocator_type &get_al() const { return internal_data; } - - impl_type impl; - /// @endcond -}; - -template -bool operator==(const stable_vector& x,const stable_vector& y) -{ - return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin()); -} - -template -bool operator< (const stable_vector& x,const stable_vector& y) -{ - return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end()); -} - -template -bool operator!=(const stable_vector& x,const stable_vector& y) -{ - return !(x==y); -} - -template -bool operator> (const stable_vector& x,const stable_vector& y) -{ - return y -bool operator>=(const stable_vector& x,const stable_vector& y) -{ - return !(x -bool operator<=(const stable_vector& x,const stable_vector& y) -{ - return !(x>y); -} - -// specialized algorithms: - -template -void swap(stable_vector& x,stable_vector& y) -{ - x.swap(y); -} - -/// @cond - -#undef STABLE_VECTOR_CHECK_INVARIANT - -/// @endcond - -}} - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif //BOOST_CONTAINER_STABLE_VECTOR_HPP diff --git a/3party/boost/boost/interprocess/containers/container/string.hpp b/3party/boost/boost/interprocess/containers/container/string.hpp deleted file mode 100644 index 53055d0a49..0000000000 --- a/3party/boost/boost/interprocess/containers/container/string.hpp +++ /dev/null @@ -1,2315 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINERS_STRING_HPP -#define BOOST_CONTAINERS_STRING_HPP - -#include "detail/config_begin.hpp" -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP - -#include INCLUDE_BOOST_CONTAINER_DETAIL_WORKAROUND_HPP -#include INCLUDE_BOOST_CONTAINER_CONTAINER_FWD_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_UTILITIES_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ITERATORS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_ALLOCATION_TYPE_HPP -#include INCLUDE_BOOST_CONTAINER_DETAIL_MPL_HPP -#include INCLUDE_BOOST_CONTAINER_MOVE_HPP -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include INCLUDE_BOOST_CONTAINER_DETAIL_TYPE_TRAITS_HPP -#include -#include - -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -namespace boost { -namespace container { -#else -namespace boost { -namespace container { -#endif - -/// @cond -namespace containers_detail { -// ------------------------------------------------------------ -// Class basic_string_base. - -// basic_string_base is a helper class that makes it it easier to write -// an exception-safe version of basic_string. The constructor allocates, -// but does not initialize, a block of memory. The destructor -// deallocates, but does not destroy elements within, a block of -// memory. The destructor assumes that the memory either is the internal buffer, -// or else points to a block of memory that was allocated using _String_base's -// allocator and whose size is this->m_storage. -template -class basic_string_base -{ - basic_string_base(); - BOOST_MOVE_MACRO_MOVABLE_BUT_NOT_COPYABLE(basic_string_base) - - public: - typedef A allocator_type; - //! The stored allocator type - typedef allocator_type stored_allocator_type; - typedef typename A::pointer pointer; - typedef typename A::value_type value_type; - typedef typename A::size_type size_type; - - basic_string_base(const allocator_type& a) - : members_(a) - { init(); } - - basic_string_base(const allocator_type& a, std::size_t n) - : members_(a) - { - this->init(); - this->allocate_initial_block(n); - } - - basic_string_base(BOOST_MOVE_MACRO_RV_REF(basic_string_base) b) - : members_(b.members_) - { - init(); - this->swap(b); - } - - ~basic_string_base() - { - this->deallocate_block(); - if(!this->is_short()){ - static_cast(static_cast(&this->members_.m_repr.r))->~long_t(); - } - } - - private: - - //This is the structure controlling a long string - struct long_t - { - size_type is_short : 1; - size_type length : (sizeof(size_type)*CHAR_BIT - 1); - size_type storage; - pointer start; - - long_t() - {} - - long_t(const long_t &other) - { - this->is_short = other.is_short; - length = other.length; - storage = other.storage; - start = other.start; - } - - long_t &operator =(const long_t &other) - { - this->is_short = other.is_short; - length = other.length; - storage = other.storage; - start = other.start; - return *this; - } - }; - - //This basic type should have the same alignment as long_t -//iG typedef typename type_with_alignment::value>::type -// long_alignment_type; - typedef void *long_alignment_type; - BOOST_STATIC_ASSERT((containers_detail::alignment_of::value % - containers_detail::alignment_of::value) == 0); - - - //This type is the first part of the structure controlling a short string - //The "data" member stores - struct short_header - { - unsigned char is_short : 1; - unsigned char length : (CHAR_BIT - 1); - }; - - //This type has the same alignment and size as long_t but it's POD - //so, unlike long_t, it can be placed in a union - struct long_raw_t - { - long_alignment_type a; - unsigned char b[sizeof(long_t) - sizeof(long_alignment_type)]; - }; - - protected: - static const size_type MinInternalBufferChars = 8; - static const size_type AlignmentOfValueType = - alignment_of::value; - static const size_type ShortDataOffset = - containers_detail::ct_rounded_size::value; - static const size_type ZeroCostInternalBufferChars = - (sizeof(long_t) - ShortDataOffset)/sizeof(value_type); - static const size_type UnalignedFinalInternalBufferChars = - (ZeroCostInternalBufferChars > MinInternalBufferChars) ? - ZeroCostInternalBufferChars : MinInternalBufferChars; - - struct short_t - { - short_header h; - value_type data[UnalignedFinalInternalBufferChars]; - }; - - union repr_t - { - long_raw_t r; - short_t s; - - short_t &short_repr() const - { return *const_cast(&s); } - - long_t &long_repr() const - { return *static_cast(const_cast(static_cast(&r))); } - }; - - struct members_holder - : public A - { - members_holder(const A &a) - : A(a) - {} - - repr_t m_repr; - } members_; - - const A &alloc() const - { return members_; } - - A &alloc() - { return members_; } - - static const size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type); - - private: - - static const size_type MinAllocation = InternalBufferChars*2; - - protected: - bool is_short() const - { return static_cast(this->members_.m_repr.s.h.is_short != 0); } - - void is_short(bool yes) - { - if(yes && !this->is_short()){ - static_cast(static_cast(&this->members_.m_repr.r))->~long_t(); - } - else{ - new(static_cast(&this->members_.m_repr.r))long_t(); - } - this->members_.m_repr.s.h.is_short = yes; - } - - private: - void init() - { - this->members_.m_repr.s.h.is_short = 1; - this->members_.m_repr.s.h.length = 0; - } - - protected: - - typedef containers_detail::integral_constant allocator_v1; - typedef containers_detail::integral_constant allocator_v2; - typedef containers_detail::integral_constant::value> alloc_version; - - std::pair - allocation_command(allocation_type command, - size_type limit_size, - size_type preferred_size, - size_type &received_size, pointer reuse = 0) - { - if(this->is_short() && (command & (expand_fwd | expand_bwd)) ){ - reuse = pointer(0); - command &= ~(expand_fwd | expand_bwd); - } - return this->allocation_command - (command, limit_size, preferred_size, received_size, reuse, alloc_version()); - } - - std::pair - allocation_command(allocation_type command, - size_type limit_size, - size_type preferred_size, - size_type &received_size, - const pointer &reuse, - allocator_v1) - { - (void)limit_size; - (void)reuse; - if(!(command & allocate_new)) - return std::pair(pointer(0), false); - received_size = preferred_size; - return std::make_pair(this->alloc().allocate(received_size), false); - } - - std::pair - allocation_command(allocation_type command, - size_type limit_size, - size_type preferred_size, - size_type &received_size, - pointer reuse, - allocator_v2) - { - return this->alloc().allocation_command(command, limit_size, preferred_size, - received_size, reuse); - } - - size_type next_capacity(size_type additional_objects) const - { return get_next_capacity(this->alloc().max_size(), this->priv_storage(), additional_objects); } - - void deallocate(pointer p, std::size_t n) - { - if (p && (n > InternalBufferChars)) - this->alloc().deallocate(p, n); - } - - void construct(pointer p, const value_type &value = value_type()) - { new((void*)containers_detail::get_pointer(p)) value_type(value); } - - void destroy(pointer p, size_type n) - { - for(; n--; ++p) - containers_detail::get_pointer(p)->~value_type(); - } - - void destroy(pointer p) - { containers_detail::get_pointer(p)->~value_type(); } - - void allocate_initial_block(std::size_t n) - { - if (n <= this->max_size()) { - if(n > InternalBufferChars){ - size_type new_cap = this->next_capacity(n); - pointer p = this->allocation_command(allocate_new, n, new_cap, new_cap).first; - this->is_short(false); - this->priv_addr(p); - this->priv_size(0); - this->priv_storage(new_cap); - } - } - else - throw_length_error(); - } - - void deallocate_block() - { this->deallocate(this->priv_addr(), this->priv_storage()); } - - std::size_t max_size() const - { return this->alloc().max_size() - 1; } - - // Helper functions for exception handling. - void throw_length_error() const - { throw(std::length_error("basic_string")); } - - void throw_out_of_range() const - { throw(std::out_of_range("basic_string")); } - - protected: - size_type priv_capacity() const - { return this->priv_storage() - 1; } - - pointer priv_addr() const - { return this->is_short() ? pointer(&this->members_.m_repr.short_repr().data[0]) : this->members_.m_repr.long_repr().start; } - - void priv_addr(pointer addr) - { this->members_.m_repr.long_repr().start = addr; } - - size_type priv_storage() const - { return this->is_short() ? InternalBufferChars : this->members_.m_repr.long_repr().storage; } - - void priv_storage(size_type storage) - { - if(!this->is_short()) - this->members_.m_repr.long_repr().storage = storage; - } - - size_type priv_size() const - { return this->is_short() ? this->members_.m_repr.short_repr().h.length : this->members_.m_repr.long_repr().length; } - - void priv_size(size_type sz) - { - if(this->is_short()) - this->members_.m_repr.s.h.length = (unsigned char)sz; - else - this->members_.m_repr.long_repr().length = static_cast(sz); - } - - void swap(basic_string_base& other) - { - if(this->is_short()){ - if(other.is_short()){ - std::swap(this->members_.m_repr, other.members_.m_repr); - } - else{ - repr_t copied(this->members_.m_repr); - this->members_.m_repr.long_repr() = other.members_.m_repr.long_repr(); - other.members_.m_repr = copied; - } - } - else{ - if(other.is_short()){ - repr_t copied(other.members_.m_repr); - other.members_.m_repr.long_repr() = this->members_.m_repr.long_repr(); - this->members_.m_repr = copied; - } - else{ - std::swap(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr()); - } - } - - allocator_type & this_al = this->alloc(), &other_al = other.alloc(); - if(this_al != other_al){ - containers_detail::do_swap(this_al, other_al); - } - } -}; - -} //namespace containers_detail { - -/// @endcond - -//! The basic_string class represents a Sequence of characters. It contains all the -//! usual operations of a Sequence, and, additionally, it contains standard string -//! operations such as search and concatenation. -//! -//! The basic_string class is parameterized by character type, and by that type's -//! Character Traits. -//! -//! This class has performance characteristics very much like vector<>, meaning, -//! for example, that it does not perform reference-count or copy-on-write, and that -//! concatenation of two strings is an O(N) operation. -//! -//! Some of basic_string's member functions use an unusual method of specifying positions -//! and ranges. In addition to the conventional method using iterators, many of -//! basic_string's member functions use a single value pos of type size_type to represent a -//! position (in which case the position is begin() + pos, and many of basic_string's -//! member functions use two values, pos and n, to represent a range. In that case pos is -//! the beginning of the range and n is its size. That is, the range is -//! [begin() + pos, begin() + pos + n). -//! -//! Note that the C++ standard does not specify the complexity of basic_string operations. -//! In this implementation, basic_string has performance characteristics very similar to -//! those of vector: access to a single character is O(1), while copy and concatenation -//! are O(N). -//! -//! In this implementation, begin(), -//! end(), rbegin(), rend(), operator[], c_str(), and data() do not invalidate iterators. -//! In this implementation, iterators are only invalidated by member functions that -//! explicitly change the string's contents. -template -class basic_string - : private containers_detail::basic_string_base -{ - /// @cond - private: - BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(basic_string) - typedef containers_detail::basic_string_base base_t; - static const typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars; - - protected: - // A helper class to use a char_traits as a function object. - - template - struct Eq_traits - : public std::binary_function - { - bool operator()(const typename Tr::char_type& x, - const typename Tr::char_type& y) const - { return Tr::eq(x, y); } - }; - - template - struct Not_within_traits - : public std::unary_function - { - typedef const typename Tr::char_type* Pointer; - const Pointer m_first; - const Pointer m_last; - - Not_within_traits(Pointer f, Pointer l) - : m_first(f), m_last(l) {} - - bool operator()(const typename Tr::char_type& x) const - { - return std::find_if(m_first, m_last, - std::bind1st(Eq_traits(), x)) == m_last; - } - }; - /// @endcond - - public: - - //! The allocator type - typedef A allocator_type; - //! The stored allocator type - typedef allocator_type stored_allocator_type; - //! The type of object, CharT, stored in the string - typedef CharT value_type; - //! The second template parameter Traits - typedef Traits traits_type; - //! Pointer to CharT - typedef typename A::pointer pointer; - //! Const pointer to CharT - typedef typename A::const_pointer const_pointer; - //! Reference to CharT - typedef typename A::reference reference; - //! Const reference to CharT - typedef typename A::const_reference const_reference; - //! An unsigned integral type - typedef typename A::size_type size_type; - //! A signed integral type - typedef typename A::difference_type difference_type; - //! Iterator used to iterate through a string. It's a Random Access Iterator - typedef pointer iterator; - //! Const iterator used to iterate through a string. It's a Random Access Iterator - typedef const_pointer const_iterator; - //! Iterator used to iterate backwards through a string - typedef std::reverse_iterator reverse_iterator; - //! Const iterator used to iterate backwards through a string - typedef std::reverse_iterator const_reverse_iterator; - //! The largest possible value of type size_type. That is, size_type(-1). - static const size_type npos; - - /// @cond - private: - typedef constant_iterator cvalue_iterator; - /// @endcond - - public: // Constructor, destructor, assignment. - /// @cond - struct reserve_t {}; - /// @endcond - - basic_string(reserve_t, std::size_t n, - const allocator_type& a = allocator_type()) - : base_t(a, n + 1) - { this->priv_terminate_string(); } - - //! Effects: Constructs a basic_string taking the allocator as parameter. - //! - //! Throws: If allocator_type's copy constructor throws. - explicit basic_string(const allocator_type& a = allocator_type()) - : base_t(a, InternalBufferChars) - { this->priv_terminate_string(); } - - //! Effects: Copy constructs a basic_string. - //! - //! Postcondition: x == *this. - //! - //! Throws: If allocator_type's default constructor or copy constructor throws. - basic_string(const basic_string& s) - : base_t(s.alloc()) - { this->priv_range_initialize(s.begin(), s.end()); } - - //! Effects: Move constructor. Moves mx's resources to *this. - //! - //! Throws: If allocator_type's copy constructor throws. - //! - //! Complexity: Constant. - basic_string(BOOST_MOVE_MACRO_RV_REF(basic_string) s) - : base_t(BOOST_CONTAINER_MOVE_NAMESPACE::move((base_t&)s)) - {} - - //! Effects: Constructs a basic_string taking the allocator as parameter, - //! and is initialized by a specific number of characters of the s string. - basic_string(const basic_string& s, size_type pos, size_type n = npos, - const allocator_type& a = allocator_type()) - : base_t(a) - { - if (pos > s.size()) - this->throw_out_of_range(); - else - this->priv_range_initialize - (s.begin() + pos, s.begin() + pos + containers_detail::min_value(n, s.size() - pos)); - } - - //! Effects: Constructs a basic_string taking the allocator as parameter, - //! and is initialized by a specific number of characters of the s c-string. - basic_string(const CharT* s, size_type n, - const allocator_type& a = allocator_type()) - : base_t(a) - { this->priv_range_initialize(s, s + n); } - - //! Effects: Constructs a basic_string taking the allocator as parameter, - //! and is initialized by the null-terminated s c-string. - basic_string(const CharT* s, - const allocator_type& a = allocator_type()) - : base_t(a) - { this->priv_range_initialize(s, s + Traits::length(s)); } - - //! Effects: Constructs a basic_string taking the allocator as parameter, - //! and is initialized by n copies of c. - basic_string(size_type n, CharT c, - const allocator_type& a = allocator_type()) - : base_t(a) - { - this->priv_range_initialize(cvalue_iterator(c, n), - cvalue_iterator()); - } - - //! Effects: Constructs a basic_string taking the allocator as parameter, - //! and a range of iterators. - template - basic_string(InputIterator f, InputIterator l, - const allocator_type& a = allocator_type()) - : base_t(a) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - this->priv_initialize_dispatch(f, l, Result()); - } - - //! Effects: Destroys the basic_string. All used memory is deallocated. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - ~basic_string() - {} - - //! Effects: Copy constructs a string. - //! - //! Postcondition: x == *this. - //! - //! Complexity: Linear to the elements x contains. - basic_string& operator=(BOOST_MOVE_MACRO_COPY_ASSIGN_REF(basic_string) s) - { - if (&s != this) - this->assign(s.begin(), s.end()); - return *this; - } - - //! Effects: Move constructor. Moves mx's resources to *this. - //! - //! Throws: If allocator_type's copy constructor throws. - //! - //! Complexity: Constant. - basic_string& operator=(BOOST_MOVE_MACRO_RV_REF(basic_string) ms) - { - basic_string &s = ms; - if (&s != this){ - this->swap(s); - } - return *this; - } - - //! Effects: Assignment from a null-terminated c-string. - basic_string& operator=(const CharT* s) - { return this->assign(s, s + Traits::length(s)); } - - //! Effects: Assignment from character. - basic_string& operator=(CharT c) - { return this->assign(static_cast(1), c); } - - //! Effects: Returns an iterator to the first element contained in the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - iterator begin() - { return this->priv_addr(); } - - //! Effects: Returns a const_iterator to the first element contained in the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator begin() const - { return this->priv_addr(); } - - //! Effects: Returns an iterator to the end of the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - iterator end() - { return this->priv_addr() + this->priv_size(); } - - //! Effects: Returns a const_iterator to the end of the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator end() const - { return this->priv_addr() + this->priv_size(); } - - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reverse_iterator rbegin() - { return reverse_iterator(this->priv_addr() + this->priv_size()); } - - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator rbegin() const - { return const_reverse_iterator(this->priv_addr() + this->priv_size()); } - - //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reverse_iterator rend() - { return reverse_iterator(this->priv_addr()); } - - //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator rend() const - { return const_reverse_iterator(this->priv_addr()); } - - //! Effects: Returns a copy of the internal allocator. - //! - //! Throws: If allocator's copy constructor throws. - //! - //! Complexity: Constant. - allocator_type get_allocator() const - { return this->alloc(); } - - //! Effects: Returns the number of the elements contained in the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type size() const - { return this->priv_size(); } - - //! Effects: Returns the number of the elements contained in the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type length() const - { return this->size(); } - - //! Effects: Returns the largest possible size of the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type max_size() const - { return base_t::max_size(); } - - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are copy constructed from x. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type n, CharT c) - { - if (n <= size()) - this->erase(this->begin() + n, this->end()); - else - this->append(n - this->size(), c); - } - - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are default constructed. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type n) - { resize(n, this->priv_null()); } - - //! Effects: If n is less than or equal to capacity(), this call has no - //! effect. Otherwise, it is a request for allocation of additional memory. - //! If the request is successful, then capacity() is greater than or equal to - //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! - //! Throws: If memory allocation allocation throws or T's copy constructor throws. - void reserve(size_type res_arg) - { - if (res_arg > this->max_size()) - this->throw_length_error(); - - if (this->capacity() < res_arg){ - size_type n = containers_detail::max_value(res_arg, this->size()) + 1; - size_type new_cap = this->next_capacity(n); - pointer new_start = this->allocation_command - (allocate_new, n, new_cap, new_cap).first; - size_type new_length = 0; - - new_length += priv_uninitialized_copy - (this->priv_addr(), this->priv_addr() + this->priv_size(), new_start); - this->priv_construct_null(new_start + new_length); - this->deallocate_block(); - this->is_short(false); - this->priv_addr(new_start); - this->priv_size(new_length); - this->priv_storage(new_cap); - } - } - - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const - { return this->priv_capacity(); } - - //! Effects: Erases all the elements of the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Linear to the number of elements in the vector. - void clear() - { - if (!empty()) { - Traits::assign(*this->priv_addr(), this->priv_null()); - this->priv_size(0); - } - } - - //! Effects: Returns true if the vector contains no elements. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - bool empty() const - { return !this->priv_size(); } - - //! Requires: size() < n. - //! - //! Effects: Returns a reference to the nth element - //! from the beginning of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reference operator[](size_type n) - { return *(this->priv_addr() + n); } - - //! Requires: size() < n. - //! - //! Effects: Returns a const reference to the nth element - //! from the beginning of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reference operator[](size_type n) const - { return *(this->priv_addr() + n); } - - //! Requires: size() < n. - //! - //! Effects: Returns a reference to the nth element - //! from the beginning of the container. - //! - //! Throws: std::range_error if n >= size() - //! - //! Complexity: Constant. - reference at(size_type n) { - if (n >= size()) - this->throw_out_of_range(); - return *(this->priv_addr() + n); - } - - //! Requires: size() < n. - //! - //! Effects: Returns a const reference to the nth element - //! from the beginning of the container. - //! - //! Throws: std::range_error if n >= size() - //! - //! Complexity: Constant. - const_reference at(size_type n) const { - if (n >= size()) - this->throw_out_of_range(); - return *(this->priv_addr() + n); - } - - //! Effects: Appends string s to *this. - basic_string& operator+=(const basic_string& s) - { return this->append(s); } - - //! Effects: Appends c-string s to *this. - basic_string& operator+=(const CharT* s) - { return this->append(s); } - - //! Effects: Appends character c to *this. - basic_string& operator+=(CharT c) - { this->push_back(c); return *this; } - - //! Effects: Appends string s to *this. - basic_string& append(const basic_string& s) - { return this->append(s.begin(), s.end()); } - - //! Effects: Appends the range [pos, pos + n) from string s to *this. - basic_string& append(const basic_string& s, size_type pos, size_type n) - { - if (pos > s.size()) - this->throw_out_of_range(); - return this->append(s.begin() + pos, - s.begin() + pos + containers_detail::min_value(n, s.size() - pos)); - } - - //! Effects: Appends the range [s, s + n) from c-string s to *this. - basic_string& append(const CharT* s, size_type n) - { return this->append(s, s + n); } - - //! Effects: Appends the c-string s to *this. - basic_string& append(const CharT* s) - { return this->append(s, s + Traits::length(s)); } - - //! Effects: Appends the n times the character c to *this. - basic_string& append(size_type n, CharT c) - { return this->append(cvalue_iterator(c, n), cvalue_iterator()); } - - //! Effects: Appends the range [first, last) *this. - template - basic_string& append(InputIter first, InputIter last) - { this->insert(this->end(), first, last); return *this; } - - //! Effects: Inserts a copy of c at the end of the vector. - void push_back(CharT c) - { - if (this->priv_size() < this->capacity()){ - this->priv_construct_null(this->priv_addr() + (this->priv_size() + 1)); - Traits::assign(this->priv_addr()[this->priv_size()], c); - this->priv_size(this->priv_size()+1); - } - else{ - //No enough memory, insert a new object at the end - this->append((size_type)1, c); - } - } - - //! Effects: Removes the last element from the vector. - void pop_back() - { - Traits::assign(this->priv_addr()[this->priv_size()-1], this->priv_null()); - this->priv_size(this->priv_size()-1);; - } - - //! Effects: Assigns the value s to *this. - basic_string& assign(const basic_string& s) - { return this->operator=(s); } - - //! Effects: Moves the resources from ms *this. - basic_string& assign(BOOST_MOVE_MACRO_RV_REF(basic_string) ms) - { return this->operator=(ms);} - - //! Effects: Assigns the range [pos, pos + n) from s to *this. - basic_string& assign(const basic_string& s, - size_type pos, size_type n) { - if (pos > s.size()) - this->throw_out_of_range(); - return this->assign(s.begin() + pos, - s.begin() + pos + containers_detail::min_value(n, s.size() - pos)); - } - - //! Effects: Assigns the range [s, s + n) from s to *this. - basic_string& assign(const CharT* s, size_type n) - { return this->assign(s, s + n); } - - //! Effects: Assigns the c-string s to *this. - basic_string& assign(const CharT* s) - { return this->assign(s, s + Traits::length(s)); } - - //! Effects: Assigns the character c n-times to *this. - basic_string& assign(size_type n, CharT c) - { return this->assign(cvalue_iterator(c, n), cvalue_iterator()); } - - //! Effects: Assigns the range [first, last) to *this. - template - basic_string& assign(InputIter first, InputIter last) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - return this->priv_assign_dispatch(first, last, Result()); - } - - //! Effects: Assigns the range [f, l) to *this. - basic_string& assign(const CharT* f, const CharT* l) - { - const std::ptrdiff_t n = l - f; - if (static_cast(n) <= size()) { - Traits::copy(containers_detail::get_pointer(this->priv_addr()), f, n); - this->erase(this->priv_addr() + n, this->priv_addr() + this->priv_size()); - } - else { - Traits::copy(containers_detail::get_pointer(this->priv_addr()), f, this->priv_size()); - this->append(f + this->priv_size(), l); - } - return *this; - } - - //! Effects: Inserts the string s before pos. - basic_string& insert(size_type pos, const basic_string& s) - { - if (pos > size()) - this->throw_out_of_range(); - if (this->size() > this->max_size() - s.size()) - this->throw_length_error(); - this->insert(this->priv_addr() + pos, s.begin(), s.end()); - return *this; - } - - //! Effects: Inserts the range [pos, pos + n) from string s before pos. - basic_string& insert(size_type pos, const basic_string& s, - size_type beg, size_type n) - { - if (pos > this->size() || beg > s.size()) - this->throw_out_of_range(); - size_type len = containers_detail::min_value(n, s.size() - beg); - if (this->size() > this->max_size() - len) - this->throw_length_error(); - const CharT *beg_ptr = containers_detail::get_pointer(s.begin()) + beg; - const CharT *end_ptr = beg_ptr + len; - this->insert(this->priv_addr() + pos, beg_ptr, end_ptr); - return *this; - } - - //! Effects: Inserts the range [s, s + n) before pos. - basic_string& insert(size_type pos, const CharT* s, size_type n) - { - if (pos > this->size()) - this->throw_out_of_range(); - if (this->size() > this->max_size() - n) - this->throw_length_error(); - this->insert(this->priv_addr() + pos, s, s + n); - return *this; - } - - //! Effects: Inserts the c-string s before pos. - basic_string& insert(size_type pos, const CharT* s) - { - if (pos > size()) - this->throw_out_of_range(); - size_type len = Traits::length(s); - if (this->size() > this->max_size() - len) - this->throw_length_error(); - this->insert(this->priv_addr() + pos, s, s + len); - return *this; - } - - //! Effects: Inserts the character c n-times before pos. - basic_string& insert(size_type pos, size_type n, CharT c) - { - if (pos > this->size()) - this->throw_out_of_range(); - if (this->size() > this->max_size() - n) - this->throw_length_error(); - this->insert(this->priv_addr() + pos, n, c); - return *this; - } - - //! Effects: Inserts the character c before position. - iterator insert(iterator position, CharT c) - { - size_type new_offset = position - this->priv_addr() + 1; - this->insert(position, cvalue_iterator(c, 1), - cvalue_iterator()); - return this->priv_addr() + new_offset; - } - - //! Effects: Inserts the character c n-times before position. - void insert(iterator position, std::size_t n, CharT c) - { - this->insert(position, cvalue_iterator(c, n), - cvalue_iterator()); - } - - //! Effects: Inserts the range [first, last) before position. - template - void insert(iterator p, InputIter first, InputIter last) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - this->priv_insert_dispatch(p, first, last, Result()); - } - - //! Effects: Inserts the range [pos, pos + n). - basic_string& erase(size_type pos = 0, size_type n = npos) - { - if (pos > size()) - this->throw_out_of_range(); - erase(this->priv_addr() + pos, this->priv_addr() + pos + containers_detail::min_value(n, size() - pos)); - return *this; - } - - //! Effects: Erases the character pointed by position. - iterator erase(iterator position) - { - // The move includes the terminating null. - Traits::move(containers_detail::get_pointer(position), - containers_detail::get_pointer(position + 1), - this->priv_size() - (position - this->priv_addr())); - this->priv_size(this->priv_size()-1); - return position; - } - - //! Effects: Erases the range [first, last). - iterator erase(iterator first, iterator last) - { - if (first != last) { // The move includes the terminating null. - size_type num_erased = last - first; - Traits::move(containers_detail::get_pointer(first), - containers_detail::get_pointer(last), - (this->priv_size() + 1)-(last - this->priv_addr())); - size_type new_length = this->priv_size() - num_erased; - this->priv_size(new_length); - } - return first; - } - - //! Effects: Replaces a substring of *this with the string s. - basic_string& replace(size_type pos, size_type n, - const basic_string& s) - { - if (pos > size()) - this->throw_out_of_range(); - const size_type len = containers_detail::min_value(n, size() - pos); - if (this->size() - len >= this->max_size() - s.size()) - this->throw_length_error(); - return this->replace(this->priv_addr() + pos, this->priv_addr() + pos + len, - s.begin(), s.end()); - } - - //! Effects: Replaces a substring of *this with a substring of s. - basic_string& replace(size_type pos1, size_type n1, - const basic_string& s, - size_type pos2, size_type n2) - { - if (pos1 > size() || pos2 > s.size()) - this->throw_out_of_range(); - const size_type len1 = containers_detail::min_value(n1, size() - pos1); - const size_type len2 = containers_detail::min_value(n2, s.size() - pos2); - if (this->size() - len1 >= this->max_size() - len2) - this->throw_length_error(); - return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len1, - s.priv_addr() + pos2, s.priv_addr() + pos2 + len2); - } - - //! Effects: Replaces a substring of *this with the first n1 characters of s. - basic_string& replace(size_type pos, size_type n1, - const CharT* s, size_type n2) - { - if (pos > size()) - this->throw_out_of_range(); - const size_type len = containers_detail::min_value(n1, size() - pos); - if (n2 > this->max_size() || size() - len >= this->max_size() - n2) - this->throw_length_error(); - return this->replace(this->priv_addr() + pos, this->priv_addr() + pos + len, - s, s + n2); - } - - //! Effects: Replaces a substring of *this with a null-terminated character array. - basic_string& replace(size_type pos, size_type n1, - const CharT* s) - { - if (pos > size()) - this->throw_out_of_range(); - const size_type len = containers_detail::min_value(n1, size() - pos); - const size_type n2 = Traits::length(s); - if (n2 > this->max_size() || size() - len >= this->max_size() - n2) - this->throw_length_error(); - return this->replace(this->priv_addr() + pos, this->priv_addr() + pos + len, - s, s + Traits::length(s)); - } - - //! Effects: Replaces a substring of *this with n1 copies of c. - basic_string& replace(size_type pos, size_type n1, - size_type n2, CharT c) - { - if (pos > size()) - this->throw_out_of_range(); - const size_type len = containers_detail::min_value(n1, size() - pos); - if (n2 > this->max_size() || size() - len >= this->max_size() - n2) - this->throw_length_error(); - return this->replace(this->priv_addr() + pos, this->priv_addr() + pos + len, n2, c); - } - - //! Effects: Replaces a substring of *this with the string s. - basic_string& replace(iterator first, iterator last, - const basic_string& s) - { return this->replace(first, last, s.begin(), s.end()); } - - //! Effects: Replaces a substring of *this with the first n characters of s. - basic_string& replace(iterator first, iterator last, - const CharT* s, size_type n) - { return this->replace(first, last, s, s + n); } - - //! Effects: Replaces a substring of *this with a null-terminated character array. - basic_string& replace(iterator first, iterator last, - const CharT* s) - { return this->replace(first, last, s, s + Traits::length(s)); } - - //! Effects: Replaces a substring of *this with n copies of c. - basic_string& replace(iterator first, iterator last, - size_type n, CharT c) - { - const size_type len = static_cast(last - first); - if (len >= n) { - Traits::assign(containers_detail::get_pointer(first), n, c); - erase(first + n, last); - } - else { - Traits::assign(containers_detail::get_pointer(first), len, c); - insert(last, n - len, c); - } - return *this; - } - - //! Effects: Replaces a substring of *this with the range [f, l) - template - basic_string& replace(iterator first, iterator last, - InputIter f, InputIter l) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = containers_detail::is_convertible::value; - typedef containers_detail::bool_ Result; - return this->priv_replace_dispatch(first, last, f, l, Result()); - } - - //! Effects: Copies a substring of *this to a buffer. - size_type copy(CharT* s, size_type n, size_type pos = 0) const - { - if (pos > size()) - this->throw_out_of_range(); - const size_type len = containers_detail::min_value(n, size() - pos); - Traits::copy(s, containers_detail::get_pointer(this->priv_addr() + pos), len); - return len; - } - - //! Effects: Swaps the contents of two strings. - void swap(basic_string& x) - { base_t::swap(x); } - - //! Returns: Returns a pointer to a null-terminated array of characters - //! representing the string's contents. For any string s it is guaranteed - //! that the first s.size() characters in the array pointed to by s.c_str() - //! are equal to the character in s, and that s.c_str()[s.size()] is a null - //! character. Note, however, that it not necessarily the first null character. - //! Characters within a string are permitted to be null. - const CharT* c_str() const - { return containers_detail::get_pointer(this->priv_addr()); } - - //! Returns: Returns a pointer to an array of characters, not necessarily - //! null-terminated, representing the string's contents. data() is permitted, - //! but not required, to be identical to c_str(). The first size() characters - //! of that array are guaranteed to be identical to the characters in *this. - //! The return value of data() is never a null pointer, even if size() is zero. - const CharT* data() const - { return containers_detail::get_pointer(this->priv_addr()); } - - //! Effects: Searches for s as a substring of *this, beginning at - //! character pos of *this. - size_type find(const basic_string& s, size_type pos = 0) const - { return find(s.c_str(), pos, s.size()); } - - //! Effects: Searches for a null-terminated character array as a - //! substring of *this, beginning at character pos of *this. - size_type find(const CharT* s, size_type pos = 0) const - { return find(s, pos, Traits::length(s)); } - - //! Effects: Searches for the first n characters of s as a substring - //! of *this, beginning at character pos of *this. - size_type find(const CharT* s, size_type pos, size_type n) const - { - if (pos + n > size()) - return npos; - else { - pointer finish = this->priv_addr() + this->priv_size(); - const const_iterator result = - std::search(containers_detail::get_pointer(this->priv_addr() + pos), - containers_detail::get_pointer(finish), - s, s + n, Eq_traits()); - return result != finish ? result - begin() : npos; - } - } - - //! Effects: Searches for the character c, beginning at character - //! position pos. - size_type find(CharT c, size_type pos = 0) const - { - if (pos >= size()) - return npos; - else { - pointer finish = this->priv_addr() + this->priv_size(); - const const_iterator result = - std::find_if(this->priv_addr() + pos, finish, - std::bind2nd(Eq_traits(), c)); - return result != finish ? result - begin() : npos; - } - } - - //! Effects: Searches backward for s as a substring of *this, - //! beginning at character position min(pos, size()) - size_type rfind(const basic_string& s, size_type pos = npos) const - { return rfind(s.c_str(), pos, s.size()); } - - //! Effects: Searches backward for a null-terminated character array - //! as a substring of *this, beginning at character min(pos, size()) - size_type rfind(const CharT* s, size_type pos = npos) const - { return rfind(s, pos, Traits::length(s)); } - - //! Effects: Searches backward for the first n characters of s as a - //! substring of *this, beginning at character position min(pos, size()). - size_type rfind(const CharT* s, size_type pos, size_type n) const - { - const std::size_t len = size(); - - if (n > len) - return npos; - else if (n == 0) - return containers_detail::min_value(len, pos); - else { - const const_iterator last = begin() + containers_detail::min_value(len - n, pos) + n; - const const_iterator result = find_end(begin(), last, - s, s + n, - Eq_traits()); - return result != last ? result - begin() : npos; - } - } - - //! Effects: Searches backward for a null-terminated character array - //! as a substring of *this, beginning at character min(pos, size()). - size_type rfind(CharT c, size_type pos = npos) const - { - const size_type len = size(); - - if (len < 1) - return npos; - else { - const const_iterator last = begin() + containers_detail::min_value(len - 1, pos) + 1; - const_reverse_iterator rresult = - std::find_if(const_reverse_iterator(last), rend(), - std::bind2nd(Eq_traits(), c)); - return rresult != rend() ? (rresult.base() - 1) - begin() : npos; - } - } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is equal to any character within s. - size_type find_first_of(const basic_string& s, size_type pos = 0) const - { return find_first_of(s.c_str(), pos, s.size()); } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is equal to any character within s. - size_type find_first_of(const CharT* s, size_type pos = 0) const - { return find_first_of(s, pos, Traits::length(s)); } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is equal to any character within the first n characters of s. - size_type find_first_of(const CharT* s, size_type pos, - size_type n) const - { - if (pos >= size()) - return npos; - else { - pointer finish = this->priv_addr() + this->priv_size(); - const_iterator result = std::find_first_of(this->priv_addr() + pos, finish, - s, s + n, - Eq_traits()); - return result != finish ? result - begin() : npos; - } - } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is equal to c. - size_type find_first_of(CharT c, size_type pos = 0) const - { return find(c, pos); } - - //! Effects: Searches backward within *this, beginning at min(pos, size()), - //! for the first character that is equal to any character within s. - size_type find_last_of(const basic_string& s, - size_type pos = npos) const - { return find_last_of(s.c_str(), pos, s.size()); } - - //! Effects: Searches backward *this, beginning at min(pos, size()), for - //! the first character that is equal to any character within s. - size_type find_last_of(const CharT* s, size_type pos = npos) const - { return find_last_of(s, pos, Traits::length(s)); } - - //! Effects: Searches backward within *this, beginning at min(pos, size()), - //! for the first character that is equal to any character within the first n - //! characters of s. - size_type find_last_of(const CharT* s, size_type pos, size_type n) const - { - const size_type len = size(); - - if (len < 1) - return npos; - else { - const const_iterator last = this->priv_addr() + containers_detail::min_value(len - 1, pos) + 1; - const const_reverse_iterator rresult = - std::find_first_of(const_reverse_iterator(last), rend(), - s, s + n, - Eq_traits()); - return rresult != rend() ? (rresult.base() - 1) - this->priv_addr() : npos; - } - } - - //! Effects: Searches backward *this, beginning at min(pos, size()), for - //! the first character that is equal to c. - size_type find_last_of(CharT c, size_type pos = npos) const - { return rfind(c, pos); } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is not equal to any character within s. - size_type find_first_not_of(const basic_string& s, - size_type pos = 0) const - { return find_first_not_of(s.c_str(), pos, s.size()); } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is not equal to any character within s. - size_type find_first_not_of(const CharT* s, size_type pos = 0) const - { return find_first_not_of(s, pos, Traits::length(s)); } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is not equal to any character within the first n - //! characters of s. - size_type find_first_not_of(const CharT* s, size_type pos, - size_type n) const - { - if (pos > size()) - return npos; - else { - pointer finish = this->priv_addr() + this->priv_size(); - const_iterator result = std::find_if(this->priv_addr() + pos, finish, - Not_within_traits(s, s + n)); - return result != finish ? result - this->priv_addr() : npos; - } - } - - //! Effects: Searches within *this, beginning at pos, for the first - //! character that is not equal to c. - size_type find_first_not_of(CharT c, size_type pos = 0) const - { - if (pos > size()) - return npos; - else { - pointer finish = this->priv_addr() + this->priv_size(); - const_iterator result - = std::find_if(this->priv_addr() + pos, finish, - std::not1(std::bind2nd(Eq_traits(), c))); - return result != finish ? result - begin() : npos; - } - } - - //! Effects: Searches backward within *this, beginning at min(pos, size()), - //! for the first character that is not equal to any character within s. - size_type find_last_not_of(const basic_string& s, - size_type pos = npos) const - { return find_last_not_of(s.c_str(), pos, s.size()); } - - //! Effects: Searches backward *this, beginning at min(pos, size()), - //! for the first character that is not equal to any character within s. - size_type find_last_not_of(const CharT* s, size_type pos = npos) const - { return find_last_not_of(s, pos, Traits::length(s)); } - - //! Effects: Searches backward within *this, beginning at min(pos, size()), - //! for the first character that is not equal to any character within the first - //! n characters of s. - size_type find_last_not_of(const CharT* s, size_type pos, size_type n) const - { - const size_type len = size(); - - if (len < 1) - return npos; - else { - const const_iterator last = begin() + containers_detail::min_value(len - 1, pos) + 1; - const const_reverse_iterator rresult = - std::find_if(const_reverse_iterator(last), rend(), - Not_within_traits(s, s + n)); - return rresult != rend() ? (rresult.base() - 1) - begin() : npos; - } - } - - //! Effects: Searches backward *this, beginning at min(pos, size()), - //! for the first character that is not equal to c. - size_type find_last_not_of(CharT c, size_type pos = npos) const - { - const size_type len = size(); - - if (len < 1) - return npos; - else { - const const_iterator last = begin() + containers_detail::min_value(len - 1, pos) + 1; - const_reverse_iterator rresult = - std::find_if(const_reverse_iterator(last), rend(), - std::not1(std::bind2nd(Eq_traits(), c))); - return rresult != rend() ? (rresult.base() - 1) - begin() : npos; - } - } - - //! Effects: Returns a substring of *this. - basic_string substr(size_type pos = 0, size_type n = npos) const - { - if (pos > size()) - this->throw_out_of_range(); - return basic_string(this->priv_addr() + pos, - this->priv_addr() + pos + containers_detail::min_value(n, size() - pos), this->alloc()); - } - - //! Effects: Three-way lexicographical comparison of s and *this. - int compare(const basic_string& s) const - { return s_compare(this->priv_addr(), this->priv_addr() + this->priv_size(), s.priv_addr(), s.priv_addr() + s.priv_size()); } - - //! Effects: Three-way lexicographical comparison of s and a substring - //! of *this. - int compare(size_type pos1, size_type n1, const basic_string& s) const - { - if (pos1 > size()) - this->throw_out_of_range(); - return s_compare(this->priv_addr() + pos1, - this->priv_addr() + pos1 + containers_detail::min_value(n1, size() - pos1), - s.priv_addr(), s.priv_addr() + s.priv_size()); - } - - //! Effects: Three-way lexicographical comparison of a substring of s - //! and a substring of *this. - int compare(size_type pos1, size_type n1, - const basic_string& s, - size_type pos2, size_type n2) const { - if (pos1 > size() || pos2 > s.size()) - this->throw_out_of_range(); - return s_compare(this->priv_addr() + pos1, - this->priv_addr() + pos1 + containers_detail::min_value(n1, size() - pos1), - s.priv_addr() + pos2, - s.priv_addr() + pos2 + containers_detail::min_value(n2, size() - pos2)); - } - - //! Effects: Three-way lexicographical comparison of s and *this. - int compare(const CharT* s) const - { return s_compare(this->priv_addr(), this->priv_addr() + this->priv_size(), s, s + Traits::length(s)); } - - - //! Effects: Three-way lexicographical comparison of the first - //! min(len, traits::length(s) characters of s and a substring of *this. - int compare(size_type pos1, size_type n1, const CharT* s, - size_type n2 = npos) const - { - if (pos1 > size()) - this->throw_out_of_range(); - return s_compare(this->priv_addr() + pos1, - this->priv_addr() + pos1 + containers_detail::min_value(n1, size() - pos1), - s, s + n2); - } - - /// @cond - private: - static int s_compare(const_pointer f1, const_pointer l1, - const_pointer f2, const_pointer l2) - { - const std::ptrdiff_t n1 = l1 - f1; - const std::ptrdiff_t n2 = l2 - f2; - const int cmp = Traits::compare(containers_detail::get_pointer(f1), - containers_detail::get_pointer(f2), - containers_detail::min_value(n1, n2)); - return cmp != 0 ? cmp : (n1 < n2 ? -1 : (n1 > n2 ? 1 : 0)); - } - - void priv_construct_null(pointer p) - { this->construct(p, 0); } - - static CharT priv_null() - { return (CharT) 0; } - - // Helper functions used by constructors. It is a severe error for - // any of them to be called anywhere except from within constructors. - void priv_terminate_string() - { this->priv_construct_null(this->priv_addr() + this->priv_size()); } - - template - void priv_range_initialize(InputIter f, InputIter l, - std::input_iterator_tag) - { - this->allocate_initial_block(InternalBufferChars); - this->priv_construct_null(this->priv_addr() + this->priv_size()); - this->append(f, l); - } - - template - void priv_range_initialize(ForwardIter f, ForwardIter l, - std::forward_iterator_tag) - { - difference_type n = std::distance(f, l); - this->allocate_initial_block(containers_detail::max_value(n+1, InternalBufferChars)); - priv_uninitialized_copy(f, l, this->priv_addr()); - this->priv_size(n); - this->priv_terminate_string(); - } - - template - void priv_range_initialize(InputIter f, InputIter l) - { - typedef typename std::iterator_traits::iterator_category Category; - this->priv_range_initialize(f, l, Category()); - } - - template - void priv_initialize_dispatch(Integer n, Integer x, containers_detail::true_) - { - this->allocate_initial_block(containers_detail::max_value(n+1, InternalBufferChars)); - priv_uninitialized_fill_n(this->priv_addr(), n, x); - this->priv_size(n); - this->priv_terminate_string(); - } - - template - void priv_initialize_dispatch(InputIter f, InputIter l, containers_detail::false_) - { this->priv_range_initialize(f, l); } - - template inline - void priv_uninitialized_fill_n(FwdIt first, Count count, const CharT val) - { - //Save initial position - FwdIt init = first; - - BOOST_TRY{ - //Construct objects - for (; count--; ++first){ - this->construct(first, val); - } - } - BOOST_CATCH(...){ - //Call destructors - for (; init != first; ++init){ - this->destroy(init); - } - BOOST_RETHROW - } - BOOST_CATCH_END - } - - template inline - size_type priv_uninitialized_copy(InpIt first, InpIt last, FwdIt dest) - { - //Save initial destination position - FwdIt dest_init = dest; - size_type constructed = 0; - - BOOST_TRY{ - //Try to build objects - for (; first != last; ++dest, ++first, ++constructed){ - this->construct(dest, *first); - } - } - BOOST_CATCH(...){ - //Call destructors - for (; constructed--; ++dest_init){ - this->destroy(dest_init); - } - BOOST_RETHROW - } - BOOST_CATCH_END - return (constructed); - } - - template - basic_string& priv_assign_dispatch(Integer n, Integer x, containers_detail::true_) - { return this->assign((size_type) n, (CharT) x); } - - template - basic_string& priv_assign_dispatch(InputIter f, InputIter l, - containers_detail::false_) - { - size_type cur = 0; - CharT *ptr = containers_detail::get_pointer(this->priv_addr()); - while (f != l && cur != this->priv_size()) { - Traits::assign(*ptr, *f); - ++f; - ++cur; - ++ptr; - } - if (f == l) - this->erase(this->priv_addr() + cur, this->priv_addr() + this->priv_size()); - else - this->append(f, l); - return *this; - } - - template - void priv_insert(iterator p, InputIter first, InputIter last, std::input_iterator_tag) - { - for ( ; first != last; ++first, ++p) { - p = this->insert(p, *first); - } - } - - template - void priv_insert(iterator position, ForwardIter first, - ForwardIter last, std::forward_iterator_tag) - { - if (first != last) { - size_type n = std::distance(first, last); - size_type remaining = this->capacity() - this->priv_size(); - const size_type old_size = this->size(); - pointer old_start = this->priv_addr(); - bool enough_capacity = false; - std::pair allocation_ret; - size_type new_cap = 0; - - //Check if we have enough capacity - if (remaining >= n){ - enough_capacity = true; - } - else { - //Otherwise expand current buffer or allocate new storage - new_cap = this->next_capacity(n); - allocation_ret = this->allocation_command - (allocate_new | expand_fwd | expand_bwd, old_size + n + 1, - new_cap, new_cap, old_start); - - //Check forward expansion - if(old_start == allocation_ret.first){ - enough_capacity = true; - this->priv_storage(new_cap); - } - } - - //Reuse same buffer - if(enough_capacity){ - const size_type elems_after = - this->priv_size() - (position - this->priv_addr()); - size_type old_length = this->priv_size(); - if (elems_after >= n) { - pointer pointer_past_last = this->priv_addr() + this->priv_size() + 1; - priv_uninitialized_copy(this->priv_addr() + (this->priv_size() - n + 1), - pointer_past_last, pointer_past_last); - - this->priv_size(this->priv_size()+n); - Traits::move(containers_detail::get_pointer(position + n), - containers_detail::get_pointer(position), - (elems_after - n) + 1); - this->priv_copy(first, last, position); - } - else { - ForwardIter mid = first; - std::advance(mid, elems_after + 1); - - priv_uninitialized_copy(mid, last, this->priv_addr() + this->priv_size() + 1); - this->priv_size(this->priv_size() + (n - elems_after)); - priv_uninitialized_copy - (position, this->priv_addr() + old_length + 1, - this->priv_addr() + this->priv_size()); - this->priv_size(this->priv_size() + elems_after); - this->priv_copy(first, mid, position); - } - } - else{ - pointer new_start = allocation_ret.first; - if(!allocation_ret.second){ - //Copy data to new buffer - size_type new_length = 0; - //This can't throw, since characters are POD - new_length += priv_uninitialized_copy - (this->priv_addr(), position, new_start); - new_length += priv_uninitialized_copy - (first, last, new_start + new_length); - new_length += priv_uninitialized_copy - (position, this->priv_addr() + this->priv_size(), - new_start + new_length); - this->priv_construct_null(new_start + new_length); - - this->deallocate_block(); - this->is_short(false); - this->priv_addr(new_start); - this->priv_size(new_length); - this->priv_storage(new_cap); - } - else{ - //value_type is POD, so backwards expansion is much easier - //than with vector - value_type *oldbuf = containers_detail::get_pointer(old_start); - value_type *newbuf = containers_detail::get_pointer(new_start); - value_type *pos = containers_detail::get_pointer(position); - size_type before = pos - oldbuf; - - //First move old data - Traits::move(newbuf, oldbuf, before); - Traits::move(newbuf + before + n, pos, old_size - before); - //Now initialize the new data - priv_uninitialized_copy(first, last, new_start + before); - this->priv_construct_null(new_start + (old_size + n)); - this->is_short(false); - this->priv_addr(new_start); - this->priv_size(old_size + n); - this->priv_storage(new_cap); - } - } - } - } - - template - void priv_insert_dispatch(iterator p, Integer n, Integer x, - containers_detail::true_) - { insert(p, (size_type) n, (CharT) x); } - - template - void priv_insert_dispatch(iterator p, InputIter first, InputIter last, - containers_detail::false_) - { - typedef typename std::iterator_traits::iterator_category Category; - priv_insert(p, first, last, Category()); - } - - template - void priv_copy(InputIterator first, InputIterator last, iterator result) - { - for ( ; first != last; ++first, ++result) - Traits::assign(*result, *first); - } - - void priv_copy(const CharT* first, const CharT* last, CharT* result) - { Traits::copy(result, first, last - first); } - - template - basic_string& priv_replace_dispatch(iterator first, iterator last, - Integer n, Integer x, - containers_detail::true_) - { return this->replace(first, last, (size_type) n, (CharT) x); } - - template - basic_string& priv_replace_dispatch(iterator first, iterator last, - InputIter f, InputIter l, - containers_detail::false_) - { - typedef typename std::iterator_traits::iterator_category Category; - return this->priv_replace(first, last, f, l, Category()); - } - - - template - basic_string& priv_replace(iterator first, iterator last, - InputIter f, InputIter l, std::input_iterator_tag) - { - for ( ; first != last && f != l; ++first, ++f) - Traits::assign(*first, *f); - - if (f == l) - this->erase(first, last); - else - this->insert(last, f, l); - return *this; - } - - template - basic_string& priv_replace(iterator first, iterator last, - ForwardIter f, ForwardIter l, - std::forward_iterator_tag) - { - difference_type n = std::distance(f, l); - const difference_type len = last - first; - if (len >= n) { - this->priv_copy(f, l, first); - this->erase(first + n, last); - } - else { - ForwardIter m = f; - std::advance(m, len); - this->priv_copy(f, m, first); - this->insert(last, m, l); - } - return *this; - } - /// @endcond -}; - -//!Typedef for a basic_string of -//!narrow characters -typedef basic_string - - ,std::allocator > -string; - -//!Typedef for a basic_string of -//!narrow characters -typedef basic_string - - ,std::allocator > -wstring; - -/// @cond - -template -const typename basic_string::size_type -basic_string::npos - = (typename basic_string::size_type) -1; - -/// @endcond - -// ------------------------------------------------------------ -// Non-member functions. - -// Operator+ - -template -inline basic_string -operator+(const basic_string& x, - const basic_string& y) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - str_t result(reserve, x.size() + y.size(), x.alloc()); - result.append(x); - result.append(y); - return result; -} - -template inline -BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) - operator+( - BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , const basic_string& y) -{ - mx += y; - return BOOST_CONTAINER_MOVE_NAMESPACE::move(mx); -} - -template inline -BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) - operator+(const basic_string& x, - BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) -{ - typedef typename basic_string::size_type size_type; - return my.replace(size_type(0), size_type(0), x); -} - -template -inline basic_string -operator+(const CharT* s, const basic_string& y) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - const std::size_t n = Traits::length(s); - str_t result(reserve, n + y.size()); - result.append(s, s + n); - result.append(y); - return result; -} - -template inline -BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+(const CharT* s, - BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) -{ - typedef typename basic_string::size_type size_type; - return BOOST_CONTAINER_MOVE_NAMESPACE::move(my.get().replace(size_type(0), size_type(0), s)); -} - -template -inline basic_string -operator+(CharT c, const basic_string& y) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - str_t result(reserve, 1 + y.size()); - result.push_back(c); - result.append(y); - return result; -} - -template inline -BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+(CharT c, - BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) -{ - typedef typename basic_string::size_type size_type; - return my.replace(size_type(0), size_type(0), &c, &c + 1); -} - -template -inline basic_string -operator+(const basic_string& x, const CharT* s) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - const std::size_t n = Traits::length(s); - str_t result(reserve, x.size() + n, x.alloc()); - result.append(x); - result.append(s, s + n); - return result; -} - -template -BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+(BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , const CharT* s) -{ - mx += s; - return BOOST_CONTAINER_MOVE_NAMESPACE::move(mx); -} - -template -inline basic_string -operator+(const basic_string& x, const CharT c) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - str_t result(reserve, x.size() + 1, x.alloc()); - result.append(x); - result.push_back(c); - return result; -} - -template -BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+( BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , const CharT c) -{ - mx += c; - return BOOST_CONTAINER_MOVE_NAMESPACE::move(mx); -} - -// Operator== and operator!= - -template -inline bool -operator==(const basic_string& x, - const basic_string& y) -{ - return x.size() == y.size() && - Traits::compare(x.data(), y.data(), x.size()) == 0; -} - -template -inline bool -operator==(const CharT* s, const basic_string& y) -{ - std::size_t n = Traits::length(s); - return n == y.size() && Traits::compare(s, y.data(), n) == 0; -} - -template -inline bool -operator==(const basic_string& x, const CharT* s) -{ - std::size_t n = Traits::length(s); - return x.size() == n && Traits::compare(x.data(), s, n) == 0; -} - -template -inline bool -operator!=(const basic_string& x, - const basic_string& y) - { return !(x == y); } - -template -inline bool -operator!=(const CharT* s, const basic_string& y) - { return !(s == y); } - -template -inline bool -operator!=(const basic_string& x, const CharT* s) - { return !(x == s); } - - -// Operator< (and also >, <=, and >=). - -template -inline bool -operator<(const basic_string& x, const basic_string& y) -{ - return x.compare(y) < 0; -// return basic_string -// ::s_compare(x.begin(), x.end(), y.begin(), y.end()) < 0; -} - -template -inline bool -operator<(const CharT* s, const basic_string& y) -{ - return y.compare(s) > 0; -// std::size_t n = Traits::length(s); -// return basic_string -// ::s_compare(s, s + n, y.begin(), y.end()) < 0; -} - -template -inline bool -operator<(const basic_string& x, - const CharT* s) -{ - return x.compare(s) < 0; -// std::size_t n = Traits::length(s); -// return basic_string -// ::s_compare(x.begin(), x.end(), s, s + n) < 0; -} - -template -inline bool -operator>(const basic_string& x, - const basic_string& y) { - return y < x; -} - -template -inline bool -operator>(const CharT* s, const basic_string& y) { - return y < s; -} - -template -inline bool -operator>(const basic_string& x, const CharT* s) -{ - return s < x; -} - -template -inline bool -operator<=(const basic_string& x, - const basic_string& y) -{ - return !(y < x); -} - -template -inline bool -operator<=(const CharT* s, const basic_string& y) - { return !(y < s); } - -template -inline bool -operator<=(const basic_string& x, const CharT* s) - { return !(s < x); } - -template -inline bool -operator>=(const basic_string& x, - const basic_string& y) - { return !(x < y); } - -template -inline bool -operator>=(const CharT* s, const basic_string& y) - { return !(s < y); } - -template -inline bool -operator>=(const basic_string& x, const CharT* s) - { return !(x < s); } - -// Swap. -template -inline void swap(basic_string& x, basic_string& y) -{ x.swap(y); } - -/// @cond -// I/O. -namespace containers_detail { - -template -inline bool -string_fill(std::basic_ostream& os, - std::basic_streambuf* buf, - std::size_t n) -{ - CharT f = os.fill(); - std::size_t i; - bool ok = true; - - for (i = 0; i < n; i++) - ok = ok && !Traits::eq_int_type(buf->sputc(f), Traits::eof()); - return ok; -} - -} //namespace containers_detail { -/// @endcond - -template -std::basic_ostream& -operator<<(std::basic_ostream& os, const basic_string& s) -{ - typename std::basic_ostream::sentry sentry(os); - bool ok = false; - - if (sentry) { - ok = true; - std::size_t n = s.size(); - std::size_t pad_len = 0; - const bool left = (os.flags() & std::ios::left) != 0; - const std::size_t w = os.width(0); - std::basic_streambuf* buf = os.rdbuf(); - - if (w != 0 && n < w) - pad_len = w - n; - - if (!left) - ok = containers_detail::string_fill(os, buf, pad_len); - - ok = ok && - buf->sputn(s.data(), std::streamsize(n)) == std::streamsize(n); - - if (left) - ok = ok && containers_detail::string_fill(os, buf, pad_len); - } - - if (!ok) - os.setstate(std::ios_base::failbit); - - return os; -} - - -template -std::basic_istream& -operator>>(std::basic_istream& is, basic_string& s) -{ - typename std::basic_istream::sentry sentry(is); - - if (sentry) { - std::basic_streambuf* buf = is.rdbuf(); - const std::ctype& ctype = std::use_facet >(is.getloc()); - - s.clear(); - std::size_t n = is.width(0); - if (n == 0) - n = static_cast(-1); - else - s.reserve(n); - - while (n-- > 0) { - typename Traits::int_type c1 = buf->sbumpc(); - - if (Traits::eq_int_type(c1, Traits::eof())) { - is.setstate(std::ios_base::eofbit); - break; - } - else { - CharT c = Traits::to_char_type(c1); - - if (ctype.is(std::ctype::space, c)) { - if (Traits::eq_int_type(buf->sputbackc(c), Traits::eof())) - is.setstate(std::ios_base::failbit); - break; - } - else - s.push_back(c); - } - } - - // If we have read no characters, then set failbit. - if (s.size() == 0) - is.setstate(std::ios_base::failbit); - } - else - is.setstate(std::ios_base::failbit); - - return is; -} - -template -std::basic_istream& -getline(std::istream& is, basic_string& s,CharT delim) -{ - std::size_t nread = 0; - typename std::basic_istream::sentry sentry(is, true); - if (sentry) { - std::basic_streambuf* buf = is.rdbuf(); - s.clear(); - - while (nread < s.max_size()) { - int c1 = buf->sbumpc(); - if (Traits::eq_int_type(c1, Traits::eof())) { - is.setstate(std::ios_base::eofbit); - break; - } - else { - ++nread; - CharT c = Traits::to_char_type(c1); - if (!Traits::eq(c, delim)) - s.push_back(c); - else - break; // Character is extracted but not appended. - } - } - } - if (nread == 0 || nread >= s.max_size()) - is.setstate(std::ios_base::failbit); - - return is; -} - -template -inline std::basic_istream& -getline(std::basic_istream& is, basic_string& s) -{ - return getline(is, s, '\n'); -} - -template -inline std::size_t hash_value(basic_string, A> const& v) -{ - return hash_range(v.begin(), v.end()); -} - -}} - -/// @cond - -namespace boost { -/* -//!has_trivial_destructor_after_move<> == true_type -//!specialization for optimizations -template -struct has_trivial_destructor_after_move > -{ - static const bool value = has_trivial_destructor::value; -}; -*/ -} - -/// @endcond - -#include INCLUDE_BOOST_CONTAINER_DETAIL_CONFIG_END_HPP - -#endif // BOOST_CONTAINERS_STRING_HPP diff --git a/3party/boost/boost/interprocess/containers/containers_fwd.hpp b/3party/boost/boost/interprocess/containers/containers_fwd.hpp index 9afa848b8c..7852bbc853 100644 --- a/3party/boost/boost/interprocess/containers/containers_fwd.hpp +++ b/3party/boost/boost/interprocess/containers/containers_fwd.hpp @@ -22,7 +22,7 @@ ////////////////////////////////////////////////////////////////////////////// #include -#include +#include namespace boost { namespace interprocess { diff --git a/3party/boost/boost/interprocess/containers/deque.hpp b/3party/boost/boost/interprocess/containers/deque.hpp index d6c68b7fdc..30ca43203f 100644 --- a/3party/boost/boost/interprocess/containers/deque.hpp +++ b/3party/boost/boost/interprocess/containers/deque.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/flat_map.hpp b/3party/boost/boost/interprocess/containers/flat_map.hpp index 9aeffcbc76..f18a006c79 100644 --- a/3party/boost/boost/interprocess/containers/flat_map.hpp +++ b/3party/boost/boost/interprocess/containers/flat_map.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/flat_set.hpp b/3party/boost/boost/interprocess/containers/flat_set.hpp index 254da13b9f..1b2bf9b4d3 100644 --- a/3party/boost/boost/interprocess/containers/flat_set.hpp +++ b/3party/boost/boost/interprocess/containers/flat_set.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/list.hpp b/3party/boost/boost/interprocess/containers/list.hpp index ecf91d5353..a75b9759b3 100644 --- a/3party/boost/boost/interprocess/containers/list.hpp +++ b/3party/boost/boost/interprocess/containers/list.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/map.hpp b/3party/boost/boost/interprocess/containers/map.hpp index cee60244ea..2e45ec0630 100644 --- a/3party/boost/boost/interprocess/containers/map.hpp +++ b/3party/boost/boost/interprocess/containers/map.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/pair.hpp b/3party/boost/boost/interprocess/containers/pair.hpp index af1d1bb640..8ba6d047ac 100644 --- a/3party/boost/boost/interprocess/containers/pair.hpp +++ b/3party/boost/boost/interprocess/containers/pair.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,13 +16,14 @@ #endif #include -#include +#include #include namespace boost { namespace interprocess { -using boost::container::containers_detail::pair; +using boost::container::container_detail::pair; +using boost::container::container_detail::piecewise_construct; } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/containers/set.hpp b/3party/boost/boost/interprocess/containers/set.hpp index f6e320d76b..db06afea6d 100644 --- a/3party/boost/boost/interprocess/containers/set.hpp +++ b/3party/boost/boost/interprocess/containers/set.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/slist.hpp b/3party/boost/boost/interprocess/containers/slist.hpp index 9ab28fd5e2..f93379cb7a 100644 --- a/3party/boost/boost/interprocess/containers/slist.hpp +++ b/3party/boost/boost/interprocess/containers/slist.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/stable_vector.hpp b/3party/boost/boost/interprocess/containers/stable_vector.hpp index eac1a4e644..ae09e6b52f 100644 --- a/3party/boost/boost/interprocess/containers/stable_vector.hpp +++ b/3party/boost/boost/interprocess/containers/stable_vector.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/string.hpp b/3party/boost/boost/interprocess/containers/string.hpp index 280c1f8b8a..a11bb904b4 100644 --- a/3party/boost/boost/interprocess/containers/string.hpp +++ b/3party/boost/boost/interprocess/containers/string.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/vector.hpp b/3party/boost/boost/interprocess/containers/vector.hpp index 951779c88c..3a6b411512 100644 --- a/3party/boost/boost/interprocess/containers/vector.hpp +++ b/3party/boost/boost/interprocess/containers/vector.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,7 +16,7 @@ #endif #include -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/containers/version_type.hpp b/3party/boost/boost/interprocess/containers/version_type.hpp index 06f7d91d81..247f800f4a 100644 --- a/3party/boost/boost/interprocess/containers/version_type.hpp +++ b/3party/boost/boost/interprocess/containers/version_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -16,13 +16,13 @@ #endif #include -#include +#include namespace boost { namespace interprocess { -using boost::container::containers_detail::version_type; -using boost::container::containers_detail::version; +using boost::container::container_detail::version_type; +using boost::container::container_detail::version; } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/creation_tags.hpp b/3party/boost/boost/interprocess/creation_tags.hpp index fe483f62fd..374829ac2b 100644 --- a/3party/boost/boost/interprocess/creation_tags.hpp +++ b/3party/boost/boost/interprocess/creation_tags.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -61,12 +61,12 @@ static const open_or_create_t open_or_create = open_or_create_t(); //!be only opened for reading static const open_copy_on_write_t open_copy_on_write = open_copy_on_write_t(); -namespace detail { +namespace ipcdetail { enum create_enum_t { DoCreate, DoOpen, DoOpenOrCreate }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/detail/atomic.hpp b/3party/boost/boost/interprocess/detail/atomic.hpp index 71b7a55f03..aab1533985 100644 --- a/3party/boost/boost/interprocess/detail/atomic.hpp +++ b/3party/boost/boost/interprocess/detail/atomic.hpp @@ -1,7 +1,8 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2011 // (C) Copyright Markus Schoepflin 2007 +// (C) Copyright Bryce Lelbach 2010 // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at @@ -20,7 +21,7 @@ namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ //! Atomically increment an boost::uint32_t by 1 //! "mem": pointer to the object @@ -44,7 +45,7 @@ inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val); inline boost::uint32_t atomic_cas32 (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp); -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ @@ -54,7 +55,7 @@ inline boost::uint32_t atomic_cas32 namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ //! Atomically decrement an boost::uint32_t by 1 //! "mem": pointer to the atomic value @@ -88,7 +89,7 @@ inline boost::uint32_t atomic_cas32 (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) { return winapi::interlocked_compare_exchange(reinterpret_cast(mem), with, cmp); } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ @@ -96,7 +97,7 @@ inline boost::uint32_t atomic_cas32 namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ //! Compare an boost::uint32_t's value with "cmp". //! If they are the same swap the value with "with" @@ -108,22 +109,14 @@ inline boost::uint32_t atomic_cas32 (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) { boost::uint32_t prev = cmp; - asm volatile( "lock\n\t" - "cmpxchg %3,%1" - : "=a" (prev), "=m" (*(mem)) - : "0" (prev), "r" (with) - : "memory", "cc"); - return prev; -/* - boost::uint32_t prev; - - asm volatile ("lock; cmpxchgl %1, %2" - : "=a" (prev) - : "r" (with), "m" (*(mem)), "0"(cmp)); - asm volatile("" : : : "memory"); + // This version by Mans Rullgard of Pathscale + __asm__ __volatile__ ( "lock\n\t" + "cmpxchg %2,%0" + : "+m"(*mem), "+a"(prev) + : "r"(with) + : "cc"); return prev; -*/ } //! Atomically add 'val' to an boost::uint32_t @@ -148,14 +141,6 @@ inline boost::uint32_t atomic_add32 ); return r; -/* - asm volatile( "lock\n\t; xaddl %0,%1" - : "=r"(val), "=m"(*mem) - : "0"(val), "m"(*mem)); - asm volatile("" : : : "memory"); - - return val; -*/ } //! Atomically increment an apr_uint32_t by 1 @@ -180,7 +165,7 @@ inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) { *mem = val; } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ @@ -188,7 +173,7 @@ inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ //! Atomically add 'val' to an boost::uint32_t //! "mem": pointer to the object @@ -198,17 +183,14 @@ inline boost::uint32_t atomic_add32(volatile boost::uint32_t *mem, boost::uint32 { boost::uint32_t prev, temp; - asm volatile ("0:\n\t" // retry local label - "lwarx %0,0,%2\n\t" // load prev and reserve - "add %1,%0,%3\n\t" // temp = prev + val - "stwcx. %1,0,%2\n\t" // conditionally store - "bne- 0b" // start over if we lost - // the reservation - //XXX find a cleaner way to define the temp - //it's not an output - : "=&r" (prev), "=&r" (temp) // output, temp - : "b" (mem), "r" (val) // inputs - : "memory", "cc"); // clobbered + asm volatile ("1:\n\t" + "lwarx %0,0,%2\n\t" + "add %1,%0,%3\n\t" + "stwcx. %1,0,%2\n\t" + "bne- 1b" + : "=&r" (prev), "=&r" (temp) + : "b" (mem), "r" (val) + : "cc", "memory"); return prev; } @@ -223,19 +205,16 @@ inline boost::uint32_t atomic_cas32 { boost::uint32_t prev; - asm volatile ("0:\n\t" // retry local label - "lwarx %0,0,%1\n\t" // load prev and reserve - "cmpw %0,%3\n\t" // does it match cmp? - "bne- 1f\n\t" // ...no, bail out - "stwcx. %2,0,%1\n\t" // ...yes, conditionally - // store with - "bne- 0b\n\t" // start over if we lost - // the reservation - "1:" // exit local label - - : "=&r"(prev) // output - : "b" (mem), "r" (with), "r"(cmp) // inputs - : "memory", "cc"); // clobbered + asm volatile ("1:\n\t" + "lwarx %0,0,%1\n\t" + "cmpw %0,%3\n\t" + "bne- 2f\n\t" + "stwcx. %2,0,%1\n\t" + "bne- 1b\n\t" + "2:" + : "=&r"(prev) + : "b" (mem), "r"(cmp), "r" (with) + : "cc", "memory"); return prev; } @@ -261,57 +240,7 @@ inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) { *mem = val; } -} //namespace detail{ -} //namespace interprocess{ -} //namespace boost{ - -#elif defined(__GNUC__) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) - -namespace boost { -namespace interprocess { -namespace detail{ - -//! Atomically add 'val' to an boost::uint32_t -//! "mem": pointer to the object -//! "val": amount to add -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_add32 - (volatile boost::uint32_t *mem, boost::uint32_t val) -{ return __sync_fetch_and_add(const_cast(mem), val); } - -//! Atomically increment an apr_uint32_t by 1 -//! "mem": pointer to the object -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) -{ return atomic_add32(mem, 1); } - -//! Atomically decrement an boost::uint32_t by 1 -//! "mem": pointer to the atomic value -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) -{ return atomic_add32(mem, (boost::uint32_t)-1); } - -//! Atomically read an boost::uint32_t from memory -inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) -{ return *mem; } - -//! Compare an boost::uint32_t's value with "cmp". -//! If they are the same swap the value with "with" -//! "mem": pointer to the value -//! "with" what to swap it with -//! "cmp": the value to compare it to -//! Returns the old value of *mem -inline boost::uint32_t atomic_cas32 - (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) -{ return __sync_val_compare_and_swap(const_cast(mem), cmp, with); } - -//! Atomically set an boost::uint32_t in memory -//! "mem": pointer to the object -//! "param": val value that the object will assume -inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) -{ *mem = val; } - -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ @@ -321,7 +250,7 @@ inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ //! Atomically add 'val' to an boost::uint32_t //! "mem": pointer to the object @@ -362,7 +291,7 @@ inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) { *mem = val; } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ @@ -373,7 +302,7 @@ inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ //! Atomically decrement a uint32_t by 1 //! "mem": pointer to the atomic value @@ -457,101 +386,151 @@ inline boost::uint32_t atomic_cas32( mem, with, cmp); } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ -#elif defined(__IBMCPP__) && (__IBMCPP__ >= 800) && defined(_AIX) +#elif defined(__IBMCPP__) && (__IBMCPP__ >= 800) && defined(_AIX) -#include +#include -namespace boost { -namespace interprocess { -namespace detail{ +namespace boost { +namespace interprocess { +namespace ipcdetail{ -//first define boost::uint32_t versions of __lwarx and __stwcx to avoid poluting -//all the functions with casts +//first define boost::uint32_t versions of __lwarx and __stwcx to avoid poluting +//all the functions with casts -//! From XLC documenation : -//! This function can be used with a subsequent stwcxu call to implement a -//! read-modify-write on a specified memory location. The two functions work -//! together to ensure that if the store is successfully performed, no other -//! processor or mechanism can modify the target doubleword between the time -//! lwarxu function is executed and the time the stwcxu functio ncompletes. -//! "mem" : pointer to the object -//! Returns the value at pointed to by mem -inline boost::uint32_t lwarxu(volatile boost::uint32_t *mem) -{ - return static_cast(__lwarx(reinterpret_cast(mem))); -} +//! From XLC documenation : +//! This function can be used with a subsequent stwcxu call to implement a +//! read-modify-write on a specified memory location. The two functions work +//! together to ensure that if the store is successfully performed, no other +//! processor or mechanism can modify the target doubleword between the time +//! lwarxu function is executed and the time the stwcxu functio ncompletes. +//! "mem" : pointer to the object +//! Returns the value at pointed to by mem +inline boost::uint32_t lwarxu(volatile boost::uint32_t *mem) +{ + return static_cast(__lwarx(reinterpret_cast(mem))); +} -//! "mem" : pointer to the object -//! "val" : the value to store -//! Returns true if the update of mem is successful and false if it is -//!unsuccessful -inline bool stwcxu(volatile boost::uint32_t* mem, boost::uint32_t val) -{ - return (__stwcx(reinterpret_cast(mem), static_cast(val)) != 0); -} +//! "mem" : pointer to the object +//! "val" : the value to store +//! Returns true if the update of mem is successful and false if it is +//!unsuccessful +inline bool stwcxu(volatile boost::uint32_t* mem, boost::uint32_t val) +{ + return (__stwcx(reinterpret_cast(mem), static_cast(val)) != 0); +} -//! "mem": pointer to the object -//! "val": amount to add -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_add32 - (volatile boost::uint32_t *mem, boost::uint32_t val) -{ - boost::uint32_t oldValue; - do - { - oldValue = lwarxu(mem); - }while (!stwcxu(mem, oldValue+val)); - return oldValue; -} +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32 + (volatile boost::uint32_t *mem, boost::uint32_t val) +{ + boost::uint32_t oldValue; + do + { + oldValue = lwarxu(mem); + }while (!stwcxu(mem, oldValue+val)); + return oldValue; +} -//! Atomically increment an apr_uint32_t by 1 -//! "mem": pointer to the object -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) -{ return atomic_add32(mem, 1); } +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } -//! Atomically decrement an boost::uint32_t by 1 -//! "mem": pointer to the atomic value -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) -{ return atomic_add32(mem, (boost::uint32_t)-1); } +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, (boost::uint32_t)-1); } -//! Atomically read an boost::uint32_t from memory -inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) -{ return *mem; } +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } -//! Compare an boost::uint32_t's value with "cmp". -//! If they are the same swap the value with "with" -//! "mem": pointer to the value -//! "with" what to swap it with -//! "cmp": the value to compare it to -//! Returns the old value of *mem -inline boost::uint32_t atomic_cas32 - (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) -{ - boost::uint32_t oldValue; - boost::uint32_t valueToStore; - do - { - oldValue = lwarxu(mem); - } while (!stwcxu(mem, (oldValue == with) ? cmp : oldValue)); +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ + boost::uint32_t oldValue; + boost::uint32_t valueToStore; + do + { + oldValue = lwarxu(mem); + } while (!stwcxu(mem, (oldValue == with) ? cmp : oldValue)); - return oldValue; -} + return oldValue; +} -//! Atomically set an boost::uint32_t in memory -//! "mem": pointer to the object -//! "param": val value that the object will assume -inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) -{ *mem = val; } +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } -} //namespace detail -} //namespace interprocess -} //namespace boost +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#elif defined(__GNUC__) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) + +namespace boost { +namespace interprocess { +namespace ipcdetail{ + +//! Atomically add 'val' to an boost::uint32_t +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32 + (volatile boost::uint32_t *mem, boost::uint32_t val) +{ return __sync_fetch_and_add(const_cast(mem), val); } + +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } + +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, (boost::uint32_t)-1); } + +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } + +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ return __sync_val_compare_and_swap(const_cast(mem), cmp, with); } + +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ #else @@ -561,7 +540,7 @@ inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ inline bool atomic_add_unless32 (volatile boost::uint32_t *mem, boost::uint32_t value, boost::uint32_t unless_this) @@ -573,9 +552,9 @@ inline bool atomic_add_unless32 return c != unless_this; } -} //namespace detail -} //namespace interprocess -} //namespace boost +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost #include diff --git a/3party/boost/boost/interprocess/detail/cast_tags.hpp b/3party/boost/boost/interprocess/detail/cast_tags.hpp index f9d1b35988..bd91d1b6bb 100644 --- a/3party/boost/boost/interprocess/detail/cast_tags.hpp +++ b/3party/boost/boost/interprocess/detail/cast_tags.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -14,14 +14,14 @@ #include #include -namespace boost { namespace interprocess { namespace detail { +namespace boost { namespace interprocess { namespace ipcdetail { struct static_cast_tag {}; struct const_cast_tag {}; struct dynamic_cast_tag {}; struct reinterpret_cast_tag {}; -}}} //namespace boost { namespace interprocess { namespace detail { +}}} //namespace boost { namespace interprocess { namespace ipcdetail { #include diff --git a/3party/boost/boost/interprocess/detail/config_begin.hpp b/3party/boost/boost/interprocess/detail/config_begin.hpp index 12af42b681..a72f6df1fe 100644 --- a/3party/boost/boost/interprocess/detail/config_begin.hpp +++ b/3party/boost/boost/interprocess/detail/config_begin.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -44,4 +44,5 @@ // with /GR-; unpredictable behavior may result #pragma warning (disable : 4673) // throwing '' the following types will not be considered at the catch site #pragma warning (disable : 4671) // the copy constructor is inaccessible + #pragma warning (disable : 4250) // inherits 'x' via dominance #endif diff --git a/3party/boost/boost/interprocess/detail/config_end.hpp b/3party/boost/boost/interprocess/detail/config_end.hpp index cf31ca802e..422458e855 100644 --- a/3party/boost/boost/interprocess/detail/config_end.hpp +++ b/3party/boost/boost/interprocess/detail/config_end.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // diff --git a/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp b/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp new file mode 100644 index 0000000000..2b96e2b6d5 --- /dev/null +++ b/3party/boost/boost/interprocess/detail/file_locking_helpers.hpp @@ -0,0 +1,298 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2009-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_FILE_LOCKING_HELPERS_HPP +#define BOOST_INTERPROCESS_FILE_LOCKING_HELPERS_HPP + +#if defined(_MSC_VER)&&(_MSC_VER>=1200) +#pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#if defined(BOOST_INTERPROCESS_WINDOWS) + +#include +#include +#include + +#else //defined(BOOST_INTERPROCESS_WINDOWS) + +#include +#include +#include + +#endif //defined(BOOST_INTERPROCESS_WINDOWS) + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +#if defined(BOOST_INTERPROCESS_WINDOWS) + +struct locking_file_serial_id +{ + int fd; + unsigned long dwVolumeSerialNumber; + unsigned long nFileIndexHigh; + unsigned long nFileIndexLow; + //This reference count counts the number of modules attached + //to the shared memory and lock file. This serves to unlink + //the locking file and shared memory when all modules are + //done with the global memory (shared memory) + volatile boost::uint32_t modules_attached_to_gmem_count; +}; + +inline bool lock_locking_file(int fd) +{ + int ret = 0; + while(ret != 0 && errno == EDEADLK){ + ret = _locking(fd, _LK_LOCK, 1/*lock_file_contents_length()*/); + } + return 0 == ret; +} + +inline bool try_lock_locking_file(int fd) +{ + return 0 == _locking(fd, _LK_NBLCK , 1); +} + +inline int open_or_create_and_lock_file(const char *name) +{ + permissions p; + p.set_unrestricted(); + while(1){ + file_handle_t handle = create_or_open_file(name, read_write, p); + int fd = _open_osfhandle((intptr_t)handle, _O_TEXT); + if(fd < 0){ + close_file(handle); + return fd; + } + if(!try_lock_locking_file(fd)){ + _close(fd); + return -1; + } + struct _stat s; + if(0 == _stat(name, &s)){ + return fd; + } + else{ + _close(fd); + } + } +} + +inline int try_open_and_lock_file(const char *name) +{ + file_handle_t handle = open_existing_file(name, read_write); + int fd = _open_osfhandle((intptr_t)handle, _O_TEXT); + if(fd < 0){ + close_file(handle); + return fd; + } + if(!try_lock_locking_file(fd)){ + _close(fd); + return -1; + } + return fd; +} + +inline void close_lock_file(int fd) +{ _close(fd); } + +inline bool is_valid_fd(int fd) +{ + struct _stat s; + return EBADF != _fstat(fd, &s); +} + +inline bool is_normal_file(int fd) +{ + if(_isatty(fd)) + return false; + struct _stat s; + if(0 != _fstat(fd, &s)) + return false; + return 0 != (s.st_mode & _S_IFREG); +} + +inline std::size_t get_size(int fd) +{ + struct _stat s; + if(0 != _fstat(fd, &s)) + return 0u; + return (std::size_t)s.st_size; +} + +inline bool fill_file_serial_id(int fd, locking_file_serial_id &id) +{ + winapi::interprocess_by_handle_file_information info; + if(!winapi::get_file_information_by_handle((void*)_get_osfhandle(fd), &info)) + return false; + id.fd = fd; + id.dwVolumeSerialNumber = info.dwVolumeSerialNumber; + id.nFileIndexHigh = info.nFileIndexHigh; + id.nFileIndexLow = info.nFileIndexLow; + id.modules_attached_to_gmem_count = 1; //Initialize attached count + return true; +} + +inline bool compare_file_serial(int fd, const locking_file_serial_id &id) +{ + winapi::interprocess_by_handle_file_information info; + if(!winapi::get_file_information_by_handle((void*)_get_osfhandle(fd), &info)) + return false; + + return id.dwVolumeSerialNumber == info.dwVolumeSerialNumber && + id.nFileIndexHigh == info.nFileIndexHigh && + id.nFileIndexLow == info.nFileIndexLow; +} + +#else //UNIX + +struct locking_file_serial_id +{ + int fd; + dev_t st_dev; + ino_t st_ino; + //This reference count counts the number of modules attached + //to the shared memory and lock file. This serves to unlink + //the locking file and shared memory when all modules are + //done with the global memory (shared memory) + volatile boost::uint32_t modules_attached_to_gmem_count; +}; + +inline bool lock_locking_file(int fd) +{ + int ret = 0; + while(ret != 0 && errno != EINTR){ + struct flock lock; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 1; + ret = fcntl (fd, F_SETLKW, &lock); + } + return 0 == ret; +} + +inline bool try_lock_locking_file(int fd) +{ + struct flock lock; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 1; + return 0 == fcntl (fd, F_SETLK, &lock); +} + +inline int open_or_create_and_lock_file(const char *name) +{ + permissions p; + p.set_unrestricted(); + while(1){ + int fd = create_or_open_file(name, read_write, p); + if(fd < 0){ + return fd; + } + if(!try_lock_locking_file(fd)){ + close(fd); + return -1; + } + struct stat s; + if(0 == stat(name, &s)){ + return fd; + } + else{ + close(fd); + } + } +} + +inline int try_open_and_lock_file(const char *name) +{ + int fd = open_existing_file(name, read_write); + if(fd < 0){ + return fd; + } + if(!try_lock_locking_file(fd)){ + close(fd); + return -1; + } + return fd; +} + +inline void close_lock_file(int fd) +{ close(fd); } + +inline bool is_valid_fd(int fd) +{ + struct stat s; + return EBADF != fstat(fd, &s); +} + +inline bool is_normal_file(int fd) +{ + struct stat s; + if(0 != fstat(fd, &s)) + return false; + return 0 != (s.st_mode & S_IFREG); +} + +inline std::size_t get_size(int fd) +{ + struct stat s; + if(0 != fstat(fd, &s)) + return 0u; + return (std::size_t)s.st_size; +} + +inline bool fill_file_serial_id(int fd, locking_file_serial_id &id) +{ + struct stat s; + if(0 != fstat(fd, &s)) + return false; + id.fd = fd; + id.st_dev = s.st_dev; + id.st_ino = s.st_ino; + id.modules_attached_to_gmem_count = 1; //Initialize attached count + return true; +} + +inline bool compare_file_serial(int fd, const locking_file_serial_id &id) +{ + struct stat info; + if(0 != fstat(fd, &info)) + return false; + + return id.st_dev == info.st_dev && + id.st_ino == info.st_ino; +} + +#endif + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#include + +#endif //BOOST_INTERPROCESS_FILE_LOCKING_HELPERS_HPP diff --git a/3party/boost/boost/interprocess/detail/file_wrapper.hpp b/3party/boost/boost/interprocess/detail/file_wrapper.hpp index 10d9f62761..586e20db4d 100644 --- a/3party/boost/boost/interprocess/detail/file_wrapper.hpp +++ b/3party/boost/boost/interprocess/detail/file_wrapper.hpp @@ -15,17 +15,17 @@ #include #include #include -#include +#include #include namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ class file_wrapper { /// @cond - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(file_wrapper) + BOOST_MOVABLE_BUT_NOT_COPYABLE(file_wrapper) /// @endcond public: @@ -36,34 +36,34 @@ class file_wrapper //!Creates a file object with name "name" and mode "mode", with the access mode "mode" //!If the file previously exists, throws an error. file_wrapper(create_only_t, const char *name, mode_t mode, const permissions &perm = permissions()) - { this->priv_open_or_create(detail::DoCreate, name, mode, perm); } + { this->priv_open_or_create(ipcdetail::DoCreate, name, mode, perm); } //!Tries to create a file with name "name" and mode "mode", with the //!access mode "mode". If the file previously exists, it tries to open it with mode "mode". //!Otherwise throws an error. file_wrapper(open_or_create_t, const char *name, mode_t mode, const permissions &perm = permissions()) - { this->priv_open_or_create(detail::DoOpenOrCreate, name, mode, perm); } + { this->priv_open_or_create(ipcdetail::DoOpenOrCreate, name, mode, perm); } - //!Tries to open a file with name "name", with the access mode "mode". + //!Tries to open a file with name "name", with the access mode "mode". //!If the file does not previously exist, it throws an error. file_wrapper(open_only_t, const char *name, mode_t mode) - { this->priv_open_or_create(detail::DoOpen, name, mode, permissions()); } + { this->priv_open_or_create(ipcdetail::DoOpen, name, mode, permissions()); } - //!Moves the ownership of "moved"'s file to *this. - //!After the call, "moved" does not represent any file. + //!Moves the ownership of "moved"'s file to *this. + //!After the call, "moved" does not represent any file. //!Does not throw - file_wrapper(BOOST_INTERPROCESS_RV_REF(file_wrapper) moved) - : m_handle(file_handle_t(detail::invalid_file())) + file_wrapper(BOOST_RV_REF(file_wrapper) moved) + : m_handle(file_handle_t(ipcdetail::invalid_file())) { this->swap(moved); } //!Moves the ownership of "moved"'s file to *this. //!After the call, "moved" does not represent any file. //!Does not throw - file_wrapper &operator=(BOOST_INTERPROCESS_RV_REF(file_wrapper) moved) - { - file_wrapper tmp(boost::interprocess::move(moved)); + file_wrapper &operator=(BOOST_RV_REF(file_wrapper) moved) + { + file_wrapper tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps to file_wrappers. @@ -73,7 +73,7 @@ class file_wrapper //!Erases a file from the system. //!Returns false on error. Never throws static bool remove(const char *name); - + //!Sets the size of the file void truncate(offset_t length); @@ -101,18 +101,18 @@ class file_wrapper //!Closes a previously opened file mapping. Never throws. void priv_close(); //!Closes a previously opened file mapping. Never throws. - bool priv_open_or_create(detail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm); + bool priv_open_or_create(ipcdetail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm); file_handle_t m_handle; mode_t m_mode; std::string m_filename; }; -inline file_wrapper::file_wrapper() - : m_handle(file_handle_t(detail::invalid_file())) +inline file_wrapper::file_wrapper() + : m_handle(file_handle_t(ipcdetail::invalid_file())) {} -inline file_wrapper::~file_wrapper() +inline file_wrapper::~file_wrapper() { this->priv_close(); } inline const char *file_wrapper::get_name() const @@ -122,10 +122,10 @@ inline bool file_wrapper::get_size(offset_t &size) const { return get_file_size((file_handle_t)m_handle, size); } inline void file_wrapper::swap(file_wrapper &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_filename.swap(other.m_filename); + m_filename.swap(other.m_filename); } inline mapping_handle_t file_wrapper::get_mapping_handle() const @@ -135,7 +135,7 @@ inline mode_t file_wrapper::get_mode() const { return m_mode; } inline bool file_wrapper::priv_open_or_create - (detail::create_enum_t type, + (ipcdetail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm = permissions()) @@ -149,13 +149,13 @@ inline bool file_wrapper::priv_open_or_create //Open file existing native API to obtain the handle switch(type){ - case detail::DoOpen: + case ipcdetail::DoOpen: m_handle = open_existing_file(filename, mode); break; - case detail::DoCreate: + case ipcdetail::DoCreate: m_handle = create_new_file(filename, mode, perm); break; - case detail::DoOpenOrCreate: + case ipcdetail::DoOpenOrCreate: m_handle = create_or_open_file(filename, mode, perm); break; default: @@ -193,7 +193,7 @@ inline void file_wrapper::priv_close() } } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/detail/in_place_interface.hpp b/3party/boost/boost/interprocess/detail/in_place_interface.hpp index 11c2954d03..b43b2ce165 100644 --- a/3party/boost/boost/interprocess/detail/in_place_interface.hpp +++ b/3party/boost/boost/interprocess/detail/in_place_interface.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,14 +18,15 @@ #include #include #include +#include #include //typeid //!\file //!Describes an abstract interface for placement construction and destruction. namespace boost { -namespace interprocess { -namespace detail { +namespace interprocess { +namespace ipcdetail { struct in_place_interface { @@ -46,7 +47,7 @@ template struct placement_destroy : public in_place_interface { placement_destroy() - : in_place_interface(detail::alignment_of::value, sizeof(T), typeid(T).name()) + : in_place_interface(::boost::alignment_of::value, sizeof(T), typeid(T).name()) {} virtual void destroy_n(void *mem, std::size_t num, std::size_t &destroyed) @@ -65,7 +66,7 @@ struct placement_destroy : public in_place_interface } } -} //namespace boost { namespace interprocess { namespace detail { +} //namespace boost { namespace interprocess { namespace ipcdetail { #include diff --git a/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp index ec879a688e..054322699d 100644 --- a/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp +++ b/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-2011. 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) // @@ -18,1014 +18,28 @@ #include #include -#include #ifdef BOOST_INTERPROCESS_WINDOWS -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#if defined (BOOST_INTERPROCESS_WINDOWS) -#include -#include - -#include -#else -#include -#include -#include + #include #endif +#include namespace boost{ namespace interprocess{ -namespace detail{ - -namespace file_locking_helpers { - -inline void get_pid_creation_time_str(std::string &s) -{ - std::stringstream stream; - stream << get_current_process_id() << '_'; - stream.precision(6); - stream << std::fixed << get_current_process_creation_time(); - s = stream.str(); -} - -inline void create_tmp_subdir_and_get_pid_based_filepath(const char *subdir_name, const char *file_prefix, OS_process_id_t pid, std::string &s, bool creation_time = false) -{ - //Let's create a lock file for each process gmem that will mark if - //the process is alive or not - create_tmp_and_clean_old(s); - s += "/"; - s += subdir_name; - if(!open_or_create_directory(s.c_str())){ - throw interprocess_exception(error_info(system_error_code())); - } - s += "/"; - s += file_prefix; - if(creation_time){ - std::string sstamp; - get_pid_creation_time_str(sstamp); - s += sstamp; - } - else{ - pid_str_t pid_str; - get_pid_str(pid_str, pid); - s += pid_str; - } -} - -inline bool check_if_filename_complies_with_pid - (const char *filename, const char *prefix, OS_process_id_t pid, std::string &file_suffix, bool creation_time = false) -{ - //Check if filename complies with lock file name pattern - std::string fname(filename); - std::string fprefix(prefix); - if(fname.size() <= fprefix.size()){ - return false; - } - fname.resize(fprefix.size()); - if(fname != fprefix){ - return false; - } - - //If not our lock file, delete it if we can lock it - fname = filename; - fname.erase(0, fprefix.size()); - pid_str_t pid_str; - get_pid_str(pid_str, pid); - file_suffix = pid_str; - if(creation_time){ - std::size_t p = fname.find('_'); - if (p == std::string::npos){ - return false; - } - std::string save_suffix(fname); - fname.erase(p); - fname.swap(file_suffix); - bool ret = (file_suffix == fname); - file_suffix.swap(save_suffix); - return ret; - } - else{ - fname.swap(file_suffix); - return (file_suffix == fname); - } -} - -} //file_locking_helpers - -namespace intermodule_singleton_helpers { - -const int GMemMarkToBeRemoved = -1; -const int GMemNotPresent = -2; - -inline const char *get_lock_file_subdir_name() -{ return "gmem"; } - -inline const char *get_lock_file_base_name() -{ return "lck"; } - -inline void create_and_get_singleton_lock_file_path(std::string &s) -{ - file_locking_helpers::create_tmp_subdir_and_get_pid_based_filepath - (get_lock_file_subdir_name(), get_lock_file_base_name(), get_current_process_id(), s, true); -} - -inline const char *get_shm_base_name() -{ return "bip.gmem.shm."; } - -inline void get_shm_name(std::string &shm_name) -{ - file_locking_helpers::get_pid_creation_time_str(shm_name); - shm_name.insert(0, get_shm_base_name()); -} - -inline std::size_t get_shm_size() -{ return 65536; } - -template -struct managed_sh_dependant -{ - static void apply_gmem_erase_logic(const char *filepath, const char *filename); - - static bool remove_old_gmem() - { - std::string refcstrRootDirectory; - tmp_folder(refcstrRootDirectory); - refcstrRootDirectory += "/"; - refcstrRootDirectory += get_lock_file_subdir_name(); - return for_each_file_in_dir(refcstrRootDirectory.c_str(), apply_gmem_erase_logic); - } -}; - -#if (defined BOOST_INTERPROCESS_WINDOWS) - -template<> -struct managed_sh_dependant -{ - static void apply_gmem_erase_logic(const char *, const char *){} - - static bool remove_old_gmem() - { return true; } -}; - - -struct locking_file_serial_id -{ - int fd; - unsigned long dwVolumeSerialNumber; - unsigned long nFileIndexHigh; - unsigned long nFileIndexLow; - //This reference count counts the number of modules attached - //to the shared memory and lock file. This serves to unlink - //the locking file and shared memory when all modules are - //done with the global memory (shared memory) - volatile boost::uint32_t modules_attached_to_gmem_count; -}; - -inline bool lock_locking_file(int fd) -{ - int ret = 0; - while(ret != 0 && errno == EDEADLK){ - ret = _locking(fd, _LK_LOCK, 1/*lock_file_contents_length()*/); - } - return 0 == ret; -} - -inline bool try_lock_locking_file(int fd) -{ - return 0 == _locking(fd, _LK_NBLCK , 1); -} - -inline int open_or_create_and_lock_file(const char *name) -{ - permissions p; - p.set_unrestricted(); - while(1){ - file_handle_t handle = create_or_open_file(name, read_write, p); - int fd = _open_osfhandle((intptr_t)handle, _O_TEXT); - if(fd < 0){ - close_file(handle); - return fd; - } - if(!try_lock_locking_file(fd)){ - _close(fd); - return -1; - } - struct _stat s; - if(0 == _stat(name, &s)){ - return fd; - } - else{ - _close(fd); - } - } -} - -inline int try_open_and_lock_file(const char *name) -{ - file_handle_t handle = open_existing_file(name, read_write); - int fd = _open_osfhandle((intptr_t)handle, _O_TEXT); - if(fd < 0){ - close_file(handle); - return fd; - } - if(!try_lock_locking_file(fd)){ - _close(fd); - return -1; - } - return fd; -} - -inline void close_lock_file(int fd) -{ _close(fd); } - -inline bool is_valid_fd(int fd) -{ - struct _stat s; - return EBADF != _fstat(fd, &s); -} - -inline bool is_normal_file(int fd) -{ - if(_isatty(fd)) - return false; - struct _stat s; - if(0 != _fstat(fd, &s)) - return false; - return 0 != (s.st_mode & _S_IFREG); -} - -inline std::size_t get_size(int fd) -{ - struct _stat s; - if(0 != _fstat(fd, &s)) - return 0u; - return (std::size_t)s.st_size; -} - -inline bool fill_file_serial_id(int fd, locking_file_serial_id &id) -{ - winapi::interprocess_by_handle_file_information info; - if(!winapi::get_file_information_by_handle((void*)_get_osfhandle(fd), &info)) - return false; - id.fd = fd; - id.dwVolumeSerialNumber = info.dwVolumeSerialNumber; - id.nFileIndexHigh = info.nFileIndexHigh; - id.nFileIndexLow = info.nFileIndexLow; - id.modules_attached_to_gmem_count = 1; //Initialize attached count - return true; -} - -inline bool compare_file_serial(int fd, const locking_file_serial_id &id) -{ - winapi::interprocess_by_handle_file_information info; - if(!winapi::get_file_information_by_handle((void*)_get_osfhandle(fd), &info)) - return false; - - return id.dwVolumeSerialNumber == info.dwVolumeSerialNumber && - id.nFileIndexHigh == info.nFileIndexHigh && - id.nFileIndexLow == info.nFileIndexLow; -} - -#else //UNIX - -struct locking_file_serial_id -{ - int fd; - dev_t st_dev; - ino_t st_ino; - //This reference count counts the number of modules attached - //to the shared memory and lock file. This serves to unlink - //the locking file and shared memory when all modules are - //done with the global memory (shared memory) - volatile boost::uint32_t modules_attached_to_gmem_count; -}; - -inline bool lock_locking_file(int fd) -{ - int ret = 0; - while(ret != 0 && errno != EINTR){ - struct flock lock; - lock.l_type = F_WRLCK; - lock.l_whence = SEEK_SET; - lock.l_start = 0; - lock.l_len = 1; - ret = fcntl (fd, F_SETLKW, &lock); - } - return 0 == ret; -} - -inline bool try_lock_locking_file(int fd) -{ - struct flock lock; - lock.l_type = F_WRLCK; - lock.l_whence = SEEK_SET; - lock.l_start = 0; - lock.l_len = 1; - return 0 == fcntl (fd, F_SETLK, &lock); -} - -inline int open_or_create_and_lock_file(const char *name) -{ - permissions p; - p.set_unrestricted(); - while(1){ - int fd = create_or_open_file(name, read_write, p); - if(fd < 0){ - return fd; - } - if(!try_lock_locking_file(fd)){ - close(fd); - return -1; - } - struct stat s; - if(0 == stat(name, &s)){ - return fd; - } - else{ - close(fd); - } - } -} - -inline int try_open_and_lock_file(const char *name) -{ - int fd = open_existing_file(name, read_write); - if(fd < 0){ - return fd; - } - if(!try_lock_locking_file(fd)){ - close(fd); - return -1; - } - return fd; -} - -inline void close_lock_file(int fd) -{ close(fd); } - -inline bool is_valid_fd(int fd) -{ - struct stat s; - return EBADF != fstat(fd, &s); -} - -inline bool is_normal_file(int fd) -{ - struct stat s; - if(0 != fstat(fd, &s)) - return false; - return 0 != (s.st_mode & S_IFREG); -} - -inline std::size_t get_size(int fd) -{ - struct stat s; - if(0 != fstat(fd, &s)) - return 0u; - return (std::size_t)s.st_size; -} - -inline bool fill_file_serial_id(int fd, locking_file_serial_id &id) -{ - struct stat s; - if(0 != fstat(fd, &s)) - return false; - id.fd = fd; - id.st_dev = s.st_dev; - id.st_ino = s.st_ino; - id.modules_attached_to_gmem_count = 1; //Initialize attached count - return true; -} - -inline bool compare_file_serial(int fd, const locking_file_serial_id &id) -{ - struct stat info; - if(0 != fstat(fd, &info)) - return false; - - return id.st_dev == info.st_dev && - id.st_ino == info.st_ino; -} - -#endif - -template -struct gmem_erase_func -{ - gmem_erase_func(const char *shm_name, const char *singleton_lock_file_path, ManagedShMem & shm) - :shm_name_(shm_name), singleton_lock_file_path_(singleton_lock_file_path), shm_(shm) - {} - - void operator()() - { - locking_file_serial_id *pserial_id = shm_.template find("lock_file_fd").first; - if(pserial_id){ - pserial_id->fd = GMemMarkToBeRemoved; - } - delete_file(singleton_lock_file_path_); - shared_memory_object::remove(shm_name_); - } - - const char * const shm_name_; - const char * const singleton_lock_file_path_; - ManagedShMem & shm_; -}; - -//This function applies shared memory erasure logic based on the passed lock file. -template -void managed_sh_dependant:: - apply_gmem_erase_logic(const char *filepath, const char *filename) -{ - int fd = GMemMarkToBeRemoved; - try{ - std::string str; - //If the filename is current process lock file, then avoid it - if(file_locking_helpers::check_if_filename_complies_with_pid - (filename, get_lock_file_base_name(), get_current_process_id(), str, true)){ - return; - } - //Open and lock the other process' lock file - fd = try_open_and_lock_file(filepath); - if(fd < 0){ - return; - } - //If done, then the process is dead so take global shared memory name - //(the name is based on the lock file name) and try to apply erasure logic - str.insert(0, get_shm_base_name()); - try{ - ManagedShMem shm(open_only, str.c_str()); - gmem_erase_func func(str.c_str(), filepath, shm); - shm.try_atomic_func(func); - } - catch(interprocess_exception &e){ - //If shared memory is not found erase the lock file - if(e.get_error_code() == not_found_error){ - delete_file(filepath); - } - } - } - catch(...){ - - } - if(fd >= 0){ - close_lock_file(fd); - } -} - -} //namespace intermodule_singleton_helpers { - - - -namespace intermodule_singleton_helpers { - -//The lock file logic creates uses a unique instance to a file -template -struct lock_file_logic -{ - lock_file_logic(ManagedShMem &shm) - : mshm(shm) - { shm.atomic_func(*this); } - - void operator()(void) - { - retry_with_new_shm = false; - - //First find the file locking descriptor id - locking_file_serial_id *pserial_id = - mshm.template find("lock_file_fd").first; - - int fd; - //If not found schedule a creation - if(!pserial_id){ - fd = GMemNotPresent; - } - //Else get it - else{ - fd = pserial_id->fd; - } - //If we need to create a new one, do it - if(fd == GMemNotPresent){ - std::string lck_str; - //Create a unique current pid based lock file path - create_and_get_singleton_lock_file_path(lck_str); - //Open or create and lock file - int fd = intermodule_singleton_helpers::open_or_create_and_lock_file(lck_str.c_str()); - //If failed, write a bad file descriptor to notify other modules that - //something was wrong and unlink shared memory. Mark the function object - //to tell caller to retry with another shared memory - if(fd < 0){ - this->register_lock_file(GMemMarkToBeRemoved); - std::string s; - get_shm_name(s); - shared_memory_object::remove(s.c_str()); - retry_with_new_shm = true; - } - //If successful, register the file descriptor - else{ - this->register_lock_file(fd); - } - } - //If the fd was invalid (maybe a previous try failed) notify caller that - //should retry creation logic, since this shm might have been already - //unlinked since the shm was removed - else if (fd == GMemMarkToBeRemoved){ - retry_with_new_shm = true; - } - //If the stored fd is not valid (a open fd, a normal file with the - //expected size, or does not have the same file id number, - //then it's an old shm from an old process with the same pid. - //If that's the case, mark it as invalid - else if(!is_valid_fd(fd) || - !is_normal_file(fd) || - 0 != get_size(fd) || - !compare_file_serial(fd, *pserial_id)){ - pserial_id->fd = GMemMarkToBeRemoved; - std::string s; - get_shm_name(s); - shared_memory_object::remove(s.c_str()); - retry_with_new_shm = true; - } - else{ - //If the lock file is ok, increment reference count of - //attached modules to shared memory - atomic_inc32(&pserial_id->modules_attached_to_gmem_count); - } - } - - private: - locking_file_serial_id * register_lock_file(int fd) - { - locking_file_serial_id *pinfo = mshm.template construct("lock_file_fd")(); - fill_file_serial_id(fd, *pinfo); - return pinfo; - } - - public: - ManagedShMem &mshm; - bool retry_with_new_shm; -}; - -#if defined (BOOST_INTERPROCESS_WINDOWS) - -template<> -struct lock_file_logic -{ - lock_file_logic(managed_windows_shared_memory &) - : retry_with_new_shm(false) - {} - - void operator()(void){} - const bool retry_with_new_shm; -}; - -#endif - -} //namespace intermodule_singleton_helpers { - -//This class contains common code for all singleton types, so that we instantiate this -//code just once per module. This class also holds a reference counted shared memory -//to be used by all instances - -template -class intermodule_singleton_common -{ - public: - typedef void*(singleton_constructor_t)(ManagedShMem &); - typedef void (singleton_destructor_t)(void *, ManagedShMem &); - - static const ::boost::uint32_t Uninitialized = 0u; - static const ::boost::uint32_t Initializing = 1u; - static const ::boost::uint32_t Initialized = 2u; - static const ::boost::uint32_t Broken = 3u; - - static void finalize_singleton_logic(void *ptr, singleton_destructor_t destructor) - { - if(ptr) - destructor(ptr, get_shm()); - //If this is the last singleton of this module - //apply shm destruction. - //Note: singletons are destroyed when the module is unloaded - //so no threads should be executing or holding references - //to this module - if(1 == atomic_dec32(&this_module_singleton_count)){ - destroy_shm(); - } - } - - static void initialize_singleton_logic - (void *&ptr, volatile boost::uint32_t &this_module_singleton_initialized, singleton_constructor_t ini_func); - - private: - static ManagedShMem &get_shm() - { - return *static_cast(static_cast(&shm_mem)); - } - - enum { MemSize = ((sizeof(ManagedShMem)-1)/sizeof(max_align))+1u }; - - static void initialize_shm(); - static void destroy_shm(); - //Static data, zero-initalized without any dependencies - //this_module_singleton_count is the number of singletons used by this module - static volatile boost::uint32_t this_module_singleton_count; - //this_module_shm_initialized is the state of this module's shm class object - static volatile boost::uint32_t this_module_shm_initialized; - static max_align shm_mem[MemSize]; -}; - -template -volatile boost::uint32_t intermodule_singleton_common::this_module_singleton_count; - -template -volatile boost::uint32_t intermodule_singleton_common::this_module_shm_initialized; - -template -max_align intermodule_singleton_common::shm_mem[intermodule_singleton_common::MemSize]; - -template -void intermodule_singleton_common::initialize_shm() -{ - //Obtain unique shm name and size - std::string s; - intermodule_singleton_helpers::get_shm_name(s); - const char *ShmName = s.c_str(); - const std::size_t ShmSize = intermodule_singleton_helpers::get_shm_size();; - while(1){ - //Try to pass shm state to initializing - ::boost::uint32_t tmp = atomic_cas32(&this_module_shm_initialized, Initializing, Uninitialized); - if(tmp >= Initialized){ - break; - } - //If some other thread is doing the work wait - else if(tmp == Initializing){ - thread_yield(); - } - else{ //(tmp == Uninitialized) - //If not initialized try it again? - try{ - //Remove old shared memory from the system - intermodule_singleton_helpers::managed_sh_dependant::remove_old_gmem(); - //in-place construction of the shared memory class - ::new (&get_shm())ManagedShMem(open_or_create, ShmName, ShmSize); - //Use shared memory internal lock to initialize the lock file - //that will mark this gmem as "in use". - intermodule_singleton_helpers::lock_file_logic f(get_shm()); - //If function failed (maybe a competing process has erased the shared - //memory between creation and file locking), retry with a new instance. - if(f.retry_with_new_shm){ - get_shm().~ManagedShMem(); - atomic_write32(&this_module_shm_initialized, Uninitialized); - } - else{ - //Locking succeeded, so this shared memory module-instance is ready - atomic_write32(&this_module_shm_initialized, Initialized); - break; - } - } - catch(...){ - // - throw; - } - } - } -} - -template -struct unlink_shmlogic -{ - unlink_shmlogic(ManagedShMem &mshm) - : mshm_(mshm) - { mshm.atomic_func(*this); } - void operator()() - { - intermodule_singleton_helpers::locking_file_serial_id *pserial_id = - mshm_.template find - ("lock_file_fd").first; - BOOST_ASSERT(0 != pserial_id); - if(1 == atomic_dec32(&pserial_id->modules_attached_to_gmem_count)){ - int fd = pserial_id->fd; - if(fd > 0){ - pserial_id->fd = intermodule_singleton_helpers::GMemMarkToBeRemoved; - std::string s; - intermodule_singleton_helpers::create_and_get_singleton_lock_file_path(s); - delete_file(s.c_str()); - intermodule_singleton_helpers::close_lock_file(fd); - intermodule_singleton_helpers::get_shm_name(s); - shared_memory_object::remove(s.c_str()); - } - } - } - ManagedShMem &mshm_; -}; - -#if defined (BOOST_INTERPROCESS_WINDOWS) - -template<> -struct unlink_shmlogic -{ - unlink_shmlogic(managed_windows_shared_memory &) - {} - void operator()(){} -}; - -#endif - - -template -void intermodule_singleton_common::destroy_shm() -{ - if(!atomic_read32(&this_module_singleton_count)){ - //This module is being unloaded, so destroy - //the shared memory object of this module - //and unlink the shared memory if it's the last - unlink_shmlogic f(get_shm()); - (get_shm()).~ManagedShMem(); - atomic_write32(&this_module_shm_initialized, Uninitialized); - //Do some cleanup for other processes old gmem instances - intermodule_singleton_helpers::managed_sh_dependant::remove_old_gmem(); - } -} - -//Initialize this_module_singleton_ptr, creates the shared memory if needed and also creates an unique -//opaque type in shared memory through a singleton_constructor_t function call, -//initializing the passed pointer to that unique instance. -// -//We have two concurrency types here. a)the shared memory/singleton creation must -//be safe between threads of this process but in different modules/dlls. b) -//the pointer to the singleton is per-module, so we have to protect this -//initization between threads of the same module. -// -//All static variables declared here are shared between inside a module -//so atomic operations will synchronize only threads of the same module. -template -void intermodule_singleton_common::initialize_singleton_logic - (void *&ptr, volatile boost::uint32_t &this_module_singleton_initialized, singleton_constructor_t constructor) -{ - //If current module is not initialized enter to lock free logic - if(atomic_read32(&this_module_singleton_initialized) != Initialized){ - //Now a single thread of the module will succeed in this CAS. - //trying to pass from Uninitialized to Initializing - ::boost::uint32_t previous_module_singleton_initialized = atomic_cas32 - (&this_module_singleton_initialized, Initializing, Uninitialized); - //If the thread succeeded the CAS (winner) it will compete with other - //winner threads from other modules to create the shared memory - if(previous_module_singleton_initialized == Uninitialized){ - try{ - //Now initialize shm, this function solves concurrency issues - //between threads of several modules - initialize_shm(); - //Increment the module reference count that reflects how many - //singletons this module holds, so that we can safely destroy - //module shared memory object when no singleton is left - atomic_inc32(&this_module_singleton_count); - //Now try to create the singleton in shared memory. - //This function solves concurrency issues - //between threads of several modules - void *tmp = constructor(get_shm()); - //Insert a barrier before assigning the pointer to - //make sure this assignment comes after the initialization - atomic_write32(&this_module_singleton_initialized, Initializing); - //Assign the singleton address to the module-local pointer - ptr = tmp; - //Memory barrier inserted, all previous operations should complete - //before this one. Now marked as initialized - atomic_inc32(&this_module_singleton_initialized); - } - catch(...){ - //Mark singleton failed to initialize - atomic_write32(&this_module_singleton_initialized, Broken); - throw; - } - } - //If previous state was initializing, this means that another winner thread is - //trying to initialize the singleton. Just wait until completes its work. - else if(previous_module_singleton_initialized == Initializing){ - while(1){ - previous_module_singleton_initialized = atomic_read32(&this_module_singleton_initialized); - if(previous_module_singleton_initialized >= Initialized){ - //Already initialized, or exception thrown by initializer thread - break; - } - else if(previous_module_singleton_initialized == Initializing){ - detail::thread_yield(); - } - else{ - //This can't be happening! - BOOST_ASSERT(0); - } - } - } - else if(previous_module_singleton_initialized == Initialized){ - //Nothing to do here, the singleton is ready - } - //If previous state was greater than initialized, then memory is broken - //trying to initialize the singleton. - else{//(previous_module_singleton_initialized > Initialized) - throw interprocess_exception("boost::interprocess::intermodule_singleton initialization failed"); - } - } - BOOST_ASSERT(ptr != 0); -} +namespace ipcdetail{ //Now this class is a singleton, initializing the singleton in //the first get() function call if LazyInit is false. If true //then the singleton will be initialized when loading the module. -template -class intermodule_singleton_impl -{ - public: - static C& get() //Let's make inlining easy - { - if(!this_module_singleton_ptr){ - if(lifetime.dummy_function()) //This forces lifetime instantiation, for reference counted destruction - intermodule_singleton_common::initialize_singleton_logic - (this_module_singleton_ptr, this_module_singleton_initialized, singleton_constructor); - } - return *static_cast(this_module_singleton_ptr); - } - - private: - - struct ref_count_ptr - { - ref_count_ptr(C *p, boost::uint32_t count) - : ptr(p), singleton_ref_count(count) - {} - C *ptr; - //This reference count serves to count the number of attached - //modules to this singleton - volatile boost::uint32_t singleton_ref_count; - }; - - //These statics will be zero-initialized without any constructor call dependency - //this_module_singleton_ptr will be a module-local pointer to the singleton - static void* this_module_singleton_ptr; - //this_module_singleton_count will be used to synchronize threads of the same module - //for access to a singleton instance, and to flag the state of the - //singleton. - static volatile boost::uint32_t this_module_singleton_initialized; - - //This class destructor will trigger singleton destruction - struct lifetime_type_lazy - { - bool dummy_function() - { return m_dummy == 0; } - - ~lifetime_type_lazy() - { - intermodule_singleton_common::finalize_singleton_logic - (this_module_singleton_ptr, singleton_destructor); - } - //Dummy volatile so that the compiler can't resolve its value at compile-time - //and can't avoid lifetime_type instantiation if dummy_function() is called. - static volatile int m_dummy; - }; - - struct lifetime_type_static - : public lifetime_type_lazy - { - lifetime_type_static() - { - intermodule_singleton_common::initialize_singleton_logic - (this_module_singleton_ptr, this_module_singleton_initialized, singleton_constructor); - } - }; - - typedef typename if_c - ::type lifetime_type; - - static lifetime_type lifetime; - - //A functor to be executed inside shared memory lock that just - //searches for the singleton in shm and if not present creates a new one. - //If singleton constructor throws, the exception is propagated - struct init_atomic_func - { - init_atomic_func(ManagedShMem &m) - : mshm(m) - {} - - void operator()() - { - ref_count_ptr *rcount = mshm.template find(unique_instance).first; - if(!rcount){ - C *p = new C(); - try{ - rcount = mshm.template construct(unique_instance)(p, 0u); - } - catch(...){ - delete p; - throw; - } - } - atomic_inc32(&rcount->singleton_ref_count); - ret_ptr = rcount->ptr; - } - ManagedShMem &mshm; - void *ret_ptr; - }; - - //A functor to be executed inside shared memory lock that just - //deletes the singleton in shm if the attached count reaches to zero - struct fini_atomic_func - { - fini_atomic_func(ManagedShMem &m) - : mshm(m) - {} - - void operator()() - { - ref_count_ptr *rcount = mshm.template find(unique_instance).first; - //The object must exist - BOOST_ASSERT(rcount); - //Check if last reference - if(atomic_dec32(&rcount->singleton_ref_count) == 1){ - //If last, destroy the object - BOOST_ASSERT(rcount->ptr != 0); - delete rcount->ptr; - //Now destroy shm entry - bool destroyed = mshm.template destroy(unique_instance); - (void)destroyed; BOOST_ASSERT(destroyed == true); - } - } - ManagedShMem &mshm; - void *ret_ptr; - }; - - //A wrapper to execute init_atomic_func - static void *singleton_constructor(ManagedShMem &mshm) - { - init_atomic_func f(mshm); - mshm.atomic_func(f); - return f.ret_ptr; - } - - //A wrapper to execute fini_atomic_func - static void singleton_destructor(void *p, ManagedShMem &mshm) - { (void)p; - fini_atomic_func f(mshm); - mshm.atomic_func(f); - } -}; - -template -volatile int intermodule_singleton_impl::lifetime_type_lazy::m_dummy; - -//These will be zero-initialized by the loader -template -void *intermodule_singleton_impl::this_module_singleton_ptr; - -template -volatile boost::uint32_t intermodule_singleton_impl::this_module_singleton_initialized; - -template -typename intermodule_singleton_impl::lifetime_type - intermodule_singleton_impl::lifetime; - -template -class portable_intermodule_singleton - : public intermodule_singleton_impl -{}; - -#ifdef BOOST_INTERPROCESS_WINDOWS - -template -class windows_intermodule_singleton - : public intermodule_singleton_impl -{}; - -#endif - -//Now this class is a singleton, initializing the singleton in -//the first get() function call if LazyInit is false. If true -//then the singleton will be initialized when loading the module. -template +template class intermodule_singleton #ifdef BOOST_INTERPROCESS_WINDOWS - : public windows_intermodule_singleton -// : public portable_intermodule_singleton + : public windows_intermodule_singleton #else - : public portable_intermodule_singleton + : public portable_intermodule_singleton #endif {}; - -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ diff --git a/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp b/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp new file mode 100644 index 0000000000..0710c0bbc1 --- /dev/null +++ b/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp @@ -0,0 +1,495 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2009-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_INTERMODULE_SINGLETON_COMMON_HPP +#define BOOST_INTERPROCESS_INTERMODULE_SINGLETON_COMMON_HPP + +#if defined(_MSC_VER)&&(_MSC_VER>=1200) +#pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +namespace intermodule_singleton_helpers { + +inline void get_pid_creation_time_str(std::string &s) +{ + std::stringstream stream; + stream << get_current_process_id() << '_'; + stream.precision(6); + stream << std::fixed << get_current_process_creation_time(); + s = stream.str(); +} + +inline const char *get_map_base_name() +{ return "bip.gmem.map."; } + +inline void get_map_name(std::string &map_name) +{ + get_pid_creation_time_str(map_name); + map_name.insert(0, get_map_base_name()); +} + +inline std::size_t get_map_size() +{ return 65536; } + +template +struct thread_safe_global_map_dependant; + +} //namespace intermodule_singleton_helpers { + +//This class contains common code for all singleton types, so that we instantiate this +//code just once per module. This class also holds a thread soafe global map +//to be used by all instances protected with a reference count +template +class intermodule_singleton_common +{ + public: + typedef void*(singleton_constructor_t)(ThreadSafeGlobalMap &); + typedef void (singleton_destructor_t)(void *, ThreadSafeGlobalMap &); + + static const ::boost::uint32_t Uninitialized = 0u; + static const ::boost::uint32_t Initializing = 1u; + static const ::boost::uint32_t Initialized = 2u; + static const ::boost::uint32_t Broken = 3u; + static const ::boost::uint32_t Destroyed = 4u; + + //Initialize this_module_singleton_ptr, creates the global map if needed and also creates an unique + //opaque type in global map through a singleton_constructor_t function call, + //initializing the passed pointer to that unique instance. + // + //We have two concurrency types here. a)the global map/singleton creation must + //be safe between threads of this process but in different modules/dlls. b) + //the pointer to the singleton is per-module, so we have to protect this + //initization between threads of the same module. + // + //All static variables declared here are shared between inside a module + //so atomic operations will synchronize only threads of the same module. + static void initialize_singleton_logic + (void *&ptr, volatile boost::uint32_t &this_module_singleton_initialized, singleton_constructor_t constructor, bool phoenix) + { + //If current module is not initialized enter to lock free logic + if(atomic_read32(&this_module_singleton_initialized) != Initialized){ + //Now a single thread of the module will succeed in this CAS. + //trying to pass from Uninitialized to Initializing + ::boost::uint32_t previous_module_singleton_initialized = atomic_cas32 + (&this_module_singleton_initialized, Initializing, Uninitialized); + //If the thread succeeded the CAS (winner) it will compete with other + //winner threads from other modules to create the global map + if(previous_module_singleton_initialized == Destroyed){ + //Trying to resurrect a dead Phoenix singleton. Just try to + //mark it as uninitialized and start again + if(phoenix){ + atomic_cas32(&this_module_singleton_initialized, Uninitialized, Destroyed); + previous_module_singleton_initialized = atomic_cas32 + (&this_module_singleton_initialized, Initializing, Uninitialized); + } + //Trying to resurrect a non-Phoenix dead singleton is an error + else{ + throw interprocess_exception("Boost.Interprocess: Dead reference on non-Phoenix singleton of type"); + } + } + if(previous_module_singleton_initialized == Uninitialized){ + try{ + //Now initialize the global map, this function must solve concurrency + //issues between threads of several modules + initialize_global_map_handle(); + //Now try to create the singleton in global map. + //This function solves concurrency issues + //between threads of several modules + void *tmp = constructor(get_map()); + //Increment the module reference count that reflects how many + //singletons this module holds, so that we can safely destroy + //module global map object when no singleton is left + atomic_inc32(&this_module_singleton_count); + //Insert a barrier before assigning the pointer to + //make sure this assignment comes after the initialization + atomic_write32(&this_module_singleton_initialized, Initializing); + //Assign the singleton address to the module-local pointer + ptr = tmp; + //Memory barrier inserted, all previous operations should complete + //before this one. Now marked as initialized + atomic_write32(&this_module_singleton_initialized, Initialized); + } + catch(...){ + //Mark singleton failed to initialize + atomic_write32(&this_module_singleton_initialized, Broken); + throw; + } + } + //If previous state was initializing, this means that another winner thread is + //trying to initialize the singleton. Just wait until completes its work. + else if(previous_module_singleton_initialized == Initializing){ + while(1){ + previous_module_singleton_initialized = atomic_read32(&this_module_singleton_initialized); + if(previous_module_singleton_initialized >= Initialized){ + //Already initialized, or exception thrown by initializer thread + break; + } + else if(previous_module_singleton_initialized == Initializing){ + thread_yield(); + } + else{ + //This can't be happening! + BOOST_ASSERT(0); + } + } + } + else if(previous_module_singleton_initialized == Initialized){ + //Nothing to do here, the singleton is ready + } + //If previous state was greater than initialized, then memory is broken + //trying to initialize the singleton. + else{//(previous_module_singleton_initialized > Initialized) + throw interprocess_exception("boost::interprocess::intermodule_singleton initialization failed"); + } + } + BOOST_ASSERT(ptr != 0); + } + + static void finalize_singleton_logic(void *&ptr, volatile boost::uint32_t &this_module_singleton_initialized, singleton_destructor_t destructor) + { + //Protect destruction against lazy singletons not initialized in this execution + if(ptr){ + //Note: this destructor might provoke a Phoenix singleton + //resurrection. This means that this_module_singleton_count + //might change after this call. + destructor(ptr, get_map()); + ptr = 0; + + //Memory barrier to make sure pointer is nulled. + //Mark this singleton as destroyed. + atomic_write32(&this_module_singleton_initialized, Destroyed); + + //If this is the last singleton of this module + //apply map destruction. + //Note: singletons are destroyed when the module is unloaded + //so no threads should be executing or holding references + //to this module + if(1 == atomic_dec32(&this_module_singleton_count)){ + destroy_global_map_handle(); + } + } + } + + private: + static ThreadSafeGlobalMap &get_map() + { + return *static_cast(static_cast(&mem_holder.map_mem)); + } + + static void initialize_global_map_handle() + { + //Obtain unique map name and size + while(1){ + //Try to pass map state to initializing + ::boost::uint32_t tmp = atomic_cas32(&this_module_map_initialized, Initializing, Uninitialized); + if(tmp == Initialized || tmp == Broken){ + break; + } + else if(tmp == Destroyed){ + tmp = atomic_cas32(&this_module_map_initialized, Uninitialized, Destroyed); + continue; + } + //If some other thread is doing the work wait + else if(tmp == Initializing){ + thread_yield(); + } + else{ //(tmp == Uninitialized) + //If not initialized try it again? + try{ + //Remove old global map from the system + intermodule_singleton_helpers::thread_safe_global_map_dependant::remove_old_gmem(); + //in-place construction of the global map class + intermodule_singleton_helpers::thread_safe_global_map_dependant + ::construct_map(static_cast(&get_map())); + //Use global map's internal lock to initialize the lock file + //that will mark this gmem as "in use". + typename intermodule_singleton_helpers::thread_safe_global_map_dependant:: + lock_file_logic f(get_map()); + //If function failed (maybe a competing process has erased the shared + //memory between creation and file locking), retry with a new instance. + if(f.retry()){ + get_map().~ThreadSafeGlobalMap(); + atomic_write32(&this_module_map_initialized, Destroyed); + } + else{ + //Locking succeeded, so this global map module-instance is ready + atomic_write32(&this_module_map_initialized, Initialized); + break; + } + } + catch(...){ + // + throw; + } + } + } + } + + static void destroy_global_map_handle() + { + if(!atomic_read32(&this_module_singleton_count)){ + //This module is being unloaded, so destroy + //the global map object of this module + //and unlink the global map if it's the last + typename intermodule_singleton_helpers::thread_safe_global_map_dependant:: + unlink_map_logic f(get_map()); + (get_map()).~ThreadSafeGlobalMap(); + atomic_write32(&this_module_map_initialized, Destroyed); + //Do some cleanup for other processes old gmem instances + intermodule_singleton_helpers::thread_safe_global_map_dependant::remove_old_gmem(); + } + } + + //Static data, zero-initalized without any dependencies + //this_module_singleton_count is the number of singletons used by this module + static volatile boost::uint32_t this_module_singleton_count; + + //this_module_map_initialized is the state of this module's map class object. + //Values: Uninitialized, Initializing, Initialized, Broken + static volatile boost::uint32_t this_module_map_initialized; + + //Raw memory to construct the global map manager + static struct mem_holder_t + { + ::boost::detail::max_align aligner; + char map_mem [sizeof(ThreadSafeGlobalMap)]; + } mem_holder; +}; + +template +volatile boost::uint32_t intermodule_singleton_common::this_module_singleton_count; + +template +volatile boost::uint32_t intermodule_singleton_common::this_module_map_initialized; + +template +typename intermodule_singleton_common::mem_holder_t + intermodule_singleton_common::mem_holder; + +//A reference count to be stored in global map holding the number +//of singletons (one per module) attached to the instance pointed by +//the internal ptr. +struct ref_count_ptr +{ + ref_count_ptr(void *p, boost::uint32_t count) + : ptr(p), singleton_ref_count(count) + {} + void *ptr; + //This reference count serves to count the number of attached + //modules to this singleton + volatile boost::uint32_t singleton_ref_count; +}; + + +//Now this class is a singleton, initializing the singleton in +//the first get() function call if LazyInit is false. If true +//then the singleton will be initialized when loading the module. +template +class intermodule_singleton_impl +{ + public: + + static C& get() //Let's make inlining easy + { + if(!this_module_singleton_ptr){ + if(lifetime.dummy_function()){ //This forces lifetime instantiation, for reference counted destruction + atentry_work(); + } + } + return *static_cast(this_module_singleton_ptr); + } + + private: + + static void atentry_work() + { + intermodule_singleton_common::initialize_singleton_logic + (this_module_singleton_ptr, this_module_singleton_initialized, singleton_constructor, Phoenix); + } + + static void atexit_work() + { + intermodule_singleton_common::finalize_singleton_logic + (this_module_singleton_ptr, this_module_singleton_initialized, singleton_destructor); + } + + //These statics will be zero-initialized without any constructor call dependency + //this_module_singleton_ptr will be a module-local pointer to the singleton + static void* this_module_singleton_ptr; + + //this_module_singleton_count will be used to synchronize threads of the same module + //for access to a singleton instance, and to flag the state of the + //singleton. + static volatile boost::uint32_t this_module_singleton_initialized; + + //This class destructor will trigger singleton destruction + struct lifetime_type_lazy + { + bool dummy_function() + { return m_dummy == 0; } + + ~lifetime_type_lazy() + { + if(!Phoenix){ + atexit_work(); + } + } + + //Dummy volatile so that the compiler can't resolve its value at compile-time + //and can't avoid lifetime_type instantiation if dummy_function() is called. + static volatile int m_dummy; + }; + + struct lifetime_type_static + : public lifetime_type_lazy + { + lifetime_type_static() + { atentry_work(); } + }; + + typedef typename if_c + ::type lifetime_type; + + static lifetime_type lifetime; + + //A functor to be executed inside global map lock that just + //searches for the singleton in map and if not present creates a new one. + //If singleton constructor throws, the exception is propagated + struct init_atomic_func + { + init_atomic_func(ThreadSafeGlobalMap &m) + : m_map(m) + {} + + void operator()() + { + ref_count_ptr *rcount = intermodule_singleton_helpers::thread_safe_global_map_dependant + ::find(m_map, typeid(C).name()); + if(!rcount){ + C *p = new C; + try{ + ref_count_ptr val(p, 0u); + rcount = intermodule_singleton_helpers::thread_safe_global_map_dependant + ::insert(m_map, typeid(C).name(), val); + } + catch(...){ + intermodule_singleton_helpers::thread_safe_global_map_dependant + ::erase(m_map, typeid(C).name()); + delete p; + throw; + } + } + if(Phoenix){ + std::atexit(&atexit_work); + } + atomic_inc32(&rcount->singleton_ref_count); + ret_ptr = rcount->ptr; + } + void *data() const + { return ret_ptr; } + + private: + ThreadSafeGlobalMap &m_map; + void *ret_ptr; + }; + + //A functor to be executed inside global map lock that just + //deletes the singleton in map if the attached count reaches to zero + struct fini_atomic_func + { + fini_atomic_func(ThreadSafeGlobalMap &m) + : m_map(m) + {} + + void operator()() + { + ref_count_ptr *rcount = intermodule_singleton_helpers::thread_safe_global_map_dependant + ::find(m_map, typeid(C).name()); + //The object must exist + BOOST_ASSERT(rcount); + BOOST_ASSERT(rcount->singleton_ref_count > 0); + //Check if last reference + if(atomic_dec32(&rcount->singleton_ref_count) == 1){ + //If last, destroy the object + BOOST_ASSERT(rcount->ptr != 0); + C *pc = static_cast(rcount->ptr); + //Now destroy map entry + bool destroyed = intermodule_singleton_helpers::thread_safe_global_map_dependant + ::erase(m_map, typeid(C).name()); + (void)destroyed; BOOST_ASSERT(destroyed == true); + delete pc; + } + } + void *data() const + { return ret_ptr; } + + private: + ThreadSafeGlobalMap &m_map; + void *ret_ptr; + }; + + //A wrapper to execute init_atomic_func + static void *singleton_constructor(ThreadSafeGlobalMap &map) + { + init_atomic_func f(map); + intermodule_singleton_helpers::thread_safe_global_map_dependant + ::atomic_func(map, f); + return f.data(); + } + + //A wrapper to execute fini_atomic_func + static void singleton_destructor(void *p, ThreadSafeGlobalMap &map) + { (void)p; + fini_atomic_func f(map); + intermodule_singleton_helpers::thread_safe_global_map_dependant + ::atomic_func(map, f); + } +}; + +template +volatile int intermodule_singleton_impl::lifetime_type_lazy::m_dummy = 0; + +//These will be zero-initialized by the loader +template +void *intermodule_singleton_impl::this_module_singleton_ptr = 0; + +template +volatile boost::uint32_t intermodule_singleton_impl::this_module_singleton_initialized = 0; + +template +typename intermodule_singleton_impl::lifetime_type + intermodule_singleton_impl::lifetime; + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#include + +#endif //#ifndef BOOST_INTERPROCESS_INTERMODULE_SINGLETON_COMMON_HPP diff --git a/3party/boost/boost/interprocess/detail/interprocess_tester.hpp b/3party/boost/boost/interprocess/detail/interprocess_tester.hpp index 613bffd802..2581776745 100644 --- a/3party/boost/boost/interprocess/detail/interprocess_tester.hpp +++ b/3party/boost/boost/interprocess/detail/interprocess_tester.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-2011. 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) // @@ -13,7 +13,7 @@ namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ class interprocess_tester { @@ -23,7 +23,7 @@ class interprocess_tester { t.dont_close_on_destruction(); } }; -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ diff --git a/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp b/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp index 9151844aac..16d3505883 100644 --- a/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp +++ b/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -68,8 +68,8 @@ struct intersegment_base static const std::size_t begin_bits = max_segment_size_bits - align_bits; static const std::size_t pow_size_bits_helper = static_log2::value; - static const std::size_t pow_size_bits = - (max_segment_size_bits == (std::size_t(1) << pow_size_bits_helper)) ? + static const std::size_t pow_size_bits = + (max_segment_size_bits == (std::size_t(1) << pow_size_bits_helper)) ? pow_size_bits_helper : pow_size_bits_helper + 1; static const std::size_t frc_size_bits = size_t_bits - ctrl_bits - begin_bits - pow_size_bits; @@ -97,7 +97,7 @@ struct intersegment_base std::size_t pow : pow_size_bits; std::size_t frc : frc_size_bits; std::size_t beg : begin_bits; - std::ptrdiff_t off : sizeof(ptrdiff_t)*CHAR_BIT - 2; + std::ptrdiff_t off : sizeof(std::ptrdiff_t)*CHAR_BIT - 2; std::ptrdiff_t bits : 2; }; @@ -153,13 +153,13 @@ struct intersegment_base { if(orig_size < align) orig_size = align; - orig_size = detail::get_rounded_size_po2(orig_size, align); - pow = detail::floor_log2(orig_size); + orig_size = ipcdetail::get_rounded_size_po2(orig_size, align); + pow = ipcdetail::floor_log2(orig_size); std::size_t low_size = (std::size_t(1) << pow); std::size_t diff = orig_size - low_size; BOOST_ASSERT(pow >= frc_size_bits); - std::size_t rounded = detail::get_rounded_size_po2 - (diff, (1u << (pow - frc_size_bits))); + std::size_t rounded = ipcdetail::get_rounded_size_po2 + (diff, (std::size_t)(1u << (pow - frc_size_bits))); if(rounded == low_size){ ++pow; frc = 0; @@ -177,7 +177,7 @@ struct intersegment_base void set_mode(std::size_t mode) { - BOOST_ASSERT(mode < is_max_mode); + BOOST_ASSERT(mode < is_max_mode); members.direct.ctrl = mode; } @@ -185,7 +185,7 @@ struct intersegment_base //!null pointer bool is_null() const { - return (this->get_mode() < is_relative) && + return (this->get_mode() < is_relative) && !members.direct.dummy && !members.direct.addr; } @@ -226,7 +226,7 @@ struct flat_map_intersegment //!Obtains the address pointed //!by the object - void *get_pointer() const + void *to_raw_pointer() const { if(is_null()){ return 0; @@ -259,23 +259,23 @@ struct flat_map_intersegment //!This only works with two basic_intersegment_ptr pointing //!to the same segment. Otherwise undefined std::ptrdiff_t diff(const self_t &other) const - { return static_cast(this->get_pointer()) - static_cast(other.get_pointer()); } + { return static_cast(this->to_raw_pointer()) - static_cast(other.to_raw_pointer()); } //!Returns true if both point to //!the same object bool equal(const self_t &y) const - { return this->get_pointer() == y.get_pointer(); } + { return this->to_raw_pointer() == y.to_raw_pointer(); } //!Returns true if *this is less than other. //!This only works with two basic_intersegment_ptr pointing //!to the same segment group. Otherwise undefined. Never throws bool less(const self_t &y) const - { return this->get_pointer() < y.get_pointer(); } + { return this->to_raw_pointer() < y.to_raw_pointer(); } void swap(self_t &other) { - void *ptr_this = this->get_pointer(); - void *ptr_other = other.get_pointer(); + void *ptr_this = this->to_raw_pointer(); + void *ptr_other = other.to_raw_pointer(); other.set_from_pointer(ptr_this); this->set_from_pointer(ptr_other); } @@ -309,13 +309,13 @@ struct flat_map_intersegment void *ptr_base; void *this_base; get_segment_info_and_offset(this, this_info, this_offset, this_base); - + if(!this_info.group){ this->set_mode(is_in_stack); this->members.direct.addr = const_cast(ptr); } else{ - get_segment_info_and_offset(ptr, ptr_info, ptr_offset, ptr_base); + get_segment_info_and_offset(ptr, ptr_info, ptr_offset, ptr_base); if(ptr_info.group != this_info.group){ this->set_mode(is_pointee_outside); @@ -340,25 +340,25 @@ struct flat_map_intersegment } } - //!Sets the object internals to represent the address pointed + //!Sets the object internals to represent the address pointed //!by another flat_map_intersegment void set_from_other(const self_t &other) { - this->set_from_pointer(other.get_pointer()); + this->set_from_pointer(other.to_raw_pointer()); } //!Increments internal //!offset void inc_offset(std::ptrdiff_t bytes) { - this->set_from_pointer(static_cast(this->get_pointer()) + bytes); + this->set_from_pointer(static_cast(this->to_raw_pointer()) + bytes); } //!Decrements internal //!offset void dec_offset(std::ptrdiff_t bytes) { - this->set_from_pointer(static_cast(this->get_pointer()) - bytes); + this->set_from_pointer(static_cast(this->to_raw_pointer()) - bytes); } ////////////////////////////////////// @@ -383,7 +383,7 @@ struct flat_map_intersegment }; vector m_segments; multi_segment_services &m_ms_services; - + public: segment_group_t(multi_segment_services &ms_services) : m_ms_services(ms_services) @@ -434,7 +434,7 @@ struct flat_map_intersegment typedef set segment_groups_t; typedef boost::interprocess::flat_map - > ptr_to_segment_info_t; @@ -443,9 +443,9 @@ struct flat_map_intersegment //!Mutex to preserve integrity in multi-threaded //!enviroments typedef Mutex mutex_type; - //!Maps base addresses and segment information + //!Maps base addresses and segment information //!(size and segment group and id)* - + ptr_to_segment_info_t m_ptr_to_segment_info; ~mappings_t() @@ -476,7 +476,7 @@ struct flat_map_intersegment return; } //Find the first base address greater than ptr - typename ptr_to_segment_info_t::iterator it + typename ptr_to_segment_info_t::iterator it = s_map.m_ptr_to_segment_info.upper_bound(ptr); if(it == s_map.m_ptr_to_segment_info.begin()){ segment = segment_info_t(); @@ -486,7 +486,7 @@ struct flat_map_intersegment --it; char * segment_base = const_cast(reinterpret_cast(it->first)); std::size_t segment_size = it->second.size; - + if(segment_base <= reinterpret_cast(ptr) && (segment_base + segment_size) >= reinterpret_cast(ptr)){ segment = it->second; @@ -552,7 +552,7 @@ struct flat_map_intersegment s_groups.insert(segment_group_t(*services)); BOOST_ASSERT(ret.second); return &*ret.first; - } + } } static bool delete_group(segment_group_id id) @@ -574,23 +574,23 @@ struct flat_map_intersegment } } return success; - } + } } }; //!Static map-segment_info associated with //!flat_map_intersegment<> template -typename flat_map_intersegment::mappings_t +typename flat_map_intersegment::mappings_t flat_map_intersegment::s_map; //!Static segment group container associated with //!flat_map_intersegment<> template -typename flat_map_intersegment::segment_groups_t +typename flat_map_intersegment::segment_groups_t flat_map_intersegment::s_groups; -//!A smart pointer that can point to a pointee that resides in another memory +//!A smart pointer that can point to a pointee that resides in another memory //!memory mapped or shared memory segment. template class intersegment_ptr : public flat_map_intersegment @@ -604,7 +604,7 @@ class intersegment_ptr : public flat_map_intersegment public: typedef T * pointer; - typedef typename detail::add_reference::type reference; + typedef typename ipcdetail::add_reference::type reference; typedef T value_type; typedef std::ptrdiff_t difference_type; typedef std::random_access_iterator_tag iterator_category; @@ -623,57 +623,57 @@ class intersegment_ptr : public flat_map_intersegment //!Constructor from other intersegment_ptr //!Never throws - intersegment_ptr(const intersegment_ptr& ptr) + intersegment_ptr(const intersegment_ptr& ptr) { base_t::set_from_other(ptr); } - //!Constructor from other intersegment_ptr. If pointers of pointee types are + //!Constructor from other intersegment_ptr. If pointers of pointee types are //!convertible, intersegment_ptrs will be convertibles. Never throws. template - intersegment_ptr(const intersegment_ptr &ptr) + intersegment_ptr(const intersegment_ptr &ptr) { pointer p(ptr.get()); (void)p; base_t::set_from_other(ptr); } //!Emulates static_cast operator. //!Never throws. template - intersegment_ptr(const intersegment_ptr &r, detail::static_cast_tag) + intersegment_ptr(const intersegment_ptr &r, ipcdetail::static_cast_tag) { base_t::set_from_pointer(static_cast(r.get())); } //!Emulates const_cast operator. //!Never throws. template - intersegment_ptr(const intersegment_ptr &r, detail::const_cast_tag) + intersegment_ptr(const intersegment_ptr &r, ipcdetail::const_cast_tag) { base_t::set_from_pointer(const_cast(r.get())); } //!Emulates dynamic_cast operator. //!Never throws. template - intersegment_ptr(const intersegment_ptr &r, detail::dynamic_cast_tag) + intersegment_ptr(const intersegment_ptr &r, ipcdetail::dynamic_cast_tag) { base_t::set_from_pointer(dynamic_cast(r.get())); } //!Emulates reinterpret_cast operator. //!Never throws. template - intersegment_ptr(const intersegment_ptr &r, detail::reinterpret_cast_tag) + intersegment_ptr(const intersegment_ptr &r, ipcdetail::reinterpret_cast_tag) { base_t::set_from_pointer(reinterpret_cast(r.get())); } //!Obtains raw pointer from offset. //!Never throws. pointer get()const - { return static_cast(base_t::get_pointer()); } + { return static_cast(base_t::to_raw_pointer()); } //!Pointer-like -> operator. It can return 0 pointer. //!Never throws. - pointer operator->() const + pointer operator->() const { return self_t::get(); } - //!Dereferencing operator, if it is a null intersegment_ptr behavior + //!Dereferencing operator, if it is a null intersegment_ptr behavior //!is undefined. Never throws. - reference operator* () const + reference operator* () const { return *(self_t::get()); } //!Indexing operator. //!Never throws. - reference operator[](std::ptrdiff_t idx) const + reference operator[](std::ptrdiff_t idx) const { return self_t::get()[idx]; } //!Assignment from pointer (saves extra conversion). @@ -686,19 +686,19 @@ class intersegment_ptr : public flat_map_intersegment intersegment_ptr& operator= (const intersegment_ptr &ptr) { base_t::set_from_other(ptr); return *this; } - //!Assignment from related intersegment_ptr. If pointers of pointee types + //!Assignment from related intersegment_ptr. If pointers of pointee types //!are assignable, intersegment_ptrs will be assignable. Never throws. template intersegment_ptr& operator= (const intersegment_ptr & ptr) - { - pointer p(ptr.get()); (void)p; - base_t::set_from_other(ptr); return *this; + { + pointer p(ptr.get()); (void)p; + base_t::set_from_other(ptr); return *this; } - + //!intersegment_ptr + std::ptrdiff_t. //!Never throws. - intersegment_ptr operator+ (std::ptrdiff_t idx) const - { + intersegment_ptr operator+ (std::ptrdiff_t idx) const + { intersegment_ptr result (*this); result.inc_offset(idx*sizeof(T)); return result; @@ -706,8 +706,8 @@ class intersegment_ptr : public flat_map_intersegment //!intersegment_ptr - std::ptrdiff_t. //!Never throws. - intersegment_ptr operator- (std::ptrdiff_t idx) const - { + intersegment_ptr operator- (std::ptrdiff_t idx) const + { intersegment_ptr result (*this); result.dec_offset(idx*sizeof(T)); return result; @@ -727,7 +727,7 @@ class intersegment_ptr : public flat_map_intersegment //!Never throws. intersegment_ptr& operator++ (void) { base_t::inc_offset(sizeof(T)); return *this; } - + //!intersegment_ptr++. //!Never throws. intersegment_ptr operator++ (int) @@ -745,10 +745,10 @@ class intersegment_ptr : public flat_map_intersegment //!Safe bool conversion operator. //!Never throws. - operator unspecified_bool_type() const + operator unspecified_bool_type() const { return base_t::is_null()? 0 : &self_t::unspecified_bool_type_func; } - //!Not operator. Not needed in theory, but improves portability. + //!Not operator. Not needed in theory, but improves portability. //!Never throws. bool operator! () const { return base_t::is_null(); } @@ -762,7 +762,7 @@ class intersegment_ptr : public flat_map_intersegment //!This only works with two basic_intersegment_ptr pointing //!to the same segment. Otherwise undefined template - ptrdiff_t _diff(const intersegment_ptr &other) const + std::ptrdiff_t _diff(const intersegment_ptr &other) const { return base_t::diff(other); } //!Returns true if both point to the @@ -784,12 +784,12 @@ class intersegment_ptr : public flat_map_intersegment template inline bool operator ==(const intersegment_ptr &left, const intersegment_ptr &right) -{ +{ //Make sure both pointers can be compared bool e = typename intersegment_ptr::pointer(0) == typename intersegment_ptr::pointer(0); (void)e; - return left._equal(right); + return left._equal(right); } //!Returns true if *this is less than other. @@ -798,104 +798,104 @@ bool operator ==(const intersegment_ptr &left, template inline bool operator <(const intersegment_ptr &left, const intersegment_ptr &right) -{ +{ //Make sure both pointers can be compared bool e = typename intersegment_ptr::pointer(0) < typename intersegment_ptr::pointer(0); (void)e; - return left._less(right); + return left._less(right); } template inline -bool operator!= (const intersegment_ptr &pt1, +bool operator!= (const intersegment_ptr &pt1, const intersegment_ptr &pt2) { return !(pt1 ==pt2); } //!intersegment_ptr <= intersegment_ptr. //!Never throws. template inline -bool operator<= (const intersegment_ptr &pt1, +bool operator<= (const intersegment_ptr &pt1, const intersegment_ptr &pt2) { return !(pt1 > pt2); } //!intersegment_ptr > intersegment_ptr. //!Never throws. template inline -bool operator> (const intersegment_ptr &pt1, +bool operator> (const intersegment_ptr &pt1, const intersegment_ptr &pt2) { return (pt2 < pt1); } //!intersegment_ptr >= intersegment_ptr. //!Never throws. template inline -bool operator>= (const intersegment_ptr &pt1, +bool operator>= (const intersegment_ptr &pt1, const intersegment_ptr &pt2) { return !(pt1 < pt2); } //!operator<< template inline -std::basic_ostream & operator<< +std::basic_ostream & operator<< (std::basic_ostream & os, const intersegment_ptr & p) { return os << p.get(); } //!operator>> template inline -std::basic_istream & operator>> +std::basic_istream & operator>> (std::basic_istream & os, intersegment_ptr & p) { U * tmp; return os >> tmp; p = tmp; } -//!std::ptrdiff_t + intersegment_ptr. +//!std::ptrdiff_t + intersegment_ptr. //!The result is another pointer of the same segment template inline intersegment_ptr operator+ (std::ptrdiff_t diff, const intersegment_ptr& right) { return right + diff; } -//!intersegment_ptr - intersegment_ptr. +//!intersegment_ptr - intersegment_ptr. //!This only works with two intersegment_ptr-s that point to the //!same segment template inline -std::ptrdiff_t operator- (const intersegment_ptr &pt, +std::ptrdiff_t operator- (const intersegment_ptr &pt, const intersegment_ptr &pt2) { return pt._diff(pt2)/sizeof(T); } //! swap specialization template inline -void swap (boost::interprocess::intersegment_ptr &pt, +void swap (boost::interprocess::intersegment_ptr &pt, boost::interprocess::intersegment_ptr &pt2) { pt.swap(pt2); } -//!get_pointer() enables boost::mem_fn to recognize intersegment_ptr. +//!to_raw_pointer() enables boost::mem_fn to recognize intersegment_ptr. //!Never throws. template inline -T * get_pointer(boost::interprocess::intersegment_ptr const & p) +T * to_raw_pointer(boost::interprocess::intersegment_ptr const & p) { return p.get(); } //!Simulation of static_cast between pointers. //!Never throws. -template inline +template inline boost::interprocess::intersegment_ptr static_pointer_cast(const boost::interprocess::intersegment_ptr &r) -{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::detail::static_cast_tag()); } +{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::ipcdetail::static_cast_tag()); } //!Simulation of const_cast between pointers. //!Never throws. -template inline +template inline boost::interprocess::intersegment_ptr const_pointer_cast(const boost::interprocess::intersegment_ptr &r) -{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::detail::const_cast_tag()); } +{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::ipcdetail::const_cast_tag()); } //!Simulation of dynamic_cast between pointers. //!Never throws. -template inline +template inline boost::interprocess::intersegment_ptr dynamic_pointer_cast(const boost::interprocess::intersegment_ptr &r) -{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::detail::dynamic_cast_tag()); } +{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::ipcdetail::dynamic_cast_tag()); } //!Simulation of reinterpret_cast between pointers. //!Never throws. template inline boost::interprocess::intersegment_ptr reinterpret_pointer_cast(const boost::interprocess::intersegment_ptr &r) -{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::detail::reinterpret_cast_tag()); } +{ return boost::interprocess::intersegment_ptr(r, boost::interprocess::ipcdetail::reinterpret_cast_tag()); } -//!Trait class to detect if an smart pointer has +//!Trait class to detect if an smart pointer has //!multi-segment addressing capabilities. template struct is_multisegment_ptr @@ -907,10 +907,10 @@ struct is_multisegment_ptr } //namespace interprocess { #if defined(_MSC_VER) && (_MSC_VER < 1400) -//!get_pointer() enables boost::mem_fn to recognize intersegment_ptr. +//!to_raw_pointer() enables boost::mem_fn to recognize intersegment_ptr. //!Never throws. template inline -T * get_pointer(boost::interprocess::intersegment_ptr const & p) +T * to_raw_pointer(boost::interprocess::intersegment_ptr const & p) { return p.get(); } #endif @@ -918,20 +918,18 @@ T * get_pointer(boost::interprocess::intersegment_ptr const & p) //!for optimizations template struct has_trivial_constructor - < boost::interprocess::intersegment_ptr > + < boost::interprocess::intersegment_ptr > : public true_type{}; //!has_trivial_destructor<> == true_type specialization //!for optimizations template struct has_trivial_destructor - < boost::interprocess::intersegment_ptr > + < boost::interprocess::intersegment_ptr > : public true_type{}; } //namespace boost { -#include - #if 0 //bits @@ -952,7 +950,7 @@ struct has_trivial_destructor // std::size_t offset; //RELATIVE_SIZE_BITS = SIZE_T_BITS - -// MAX_SEGMENT_BITS - +// MAX_SEGMENT_BITS - // CTRL_BITS 10 10 //MAX_SEGMENT_SIZE = SIZE_T_BITS - ALIGN_BITS 20 52 @@ -982,7 +980,7 @@ struct has_trivial_destructor //!Obtains the address pointed by the //!object -void *get_pointer() const +void *to_raw_pointer() const { if(this->is_pointee_outside() || this->is_in_stack()){ return raw_address(); @@ -1033,9 +1031,10 @@ void set_from_pointer(const void *ptr) } void set_from_other(const self_t &other) -{ this->set_from_pointer(other.get_pointer()); } +{ this->set_from_pointer(other.to_raw_pointer()); } #endif -#endif //#ifndef BOOST_INTERPROCESS_INTERSEGMENT_PTR_HPP +#include +#endif //#ifndef BOOST_INTERPROCESS_INTERSEGMENT_PTR_HPP diff --git a/3party/boost/boost/interprocess/detail/managed_global_memory.hpp b/3party/boost/boost/interprocess/detail/managed_global_memory.hpp new file mode 100644 index 0000000000..39dd0b1e6d --- /dev/null +++ b/3party/boost/boost/interprocess/detail/managed_global_memory.hpp @@ -0,0 +1,115 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2009-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_BASIC_GLOBAL_MEMORY_HPP +#define BOOST_INTERPROCESS_BASIC_GLOBAL_MEMORY_HPP + +#if defined(_MSC_VER)&&(_MSC_VER>=1200) +#pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +struct intermodule_singleton_mutex_family +{ + typedef boost::interprocess::ipcdetail::spin_mutex mutex_type; + typedef boost::interprocess::ipcdetail::spin_recursive_mutex recursive_mutex_type; +}; + +struct intermodule_types +{ + //We must use offset_ptr since a loaded DLL can map the singleton holder shared memory + //at a different address than other DLLs or the main executable + typedef rbtree_best_fit > mem_algo; + template + struct open_or_create + { + typedef managed_open_or_create_impl + type; + }; +}; + +//we must implement our own managed shared memory to avoid circular dependencies +template +class basic_managed_global_memory + : public basic_managed_memory_impl + < char + , intermodule_types::mem_algo + , iset_index + , intermodule_types::open_or_create::type::ManagedOpenOrCreateUserOffset + > + , private intermodule_types::open_or_create::type +{ + /// @cond + typedef typename intermodule_types::template open_or_create::type base2_t; + + typedef basic_managed_memory_impl + < char + , intermodule_types::mem_algo + , iset_index + , base2_t::ManagedOpenOrCreateUserOffset + > base_t; + + typedef create_open_func create_open_func_t; + + basic_managed_global_memory *get_this_pointer() + { return this; } + + public: + typedef typename base_t::size_type size_type; + + private: + typedef typename base_t::char_ptr_holder_t char_ptr_holder_t; + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_global_memory) + /// @endcond + + public: //functions + + basic_managed_global_memory (open_or_create_t open_or_create, + const char *name, size_type size, + const void *addr = 0, const permissions& perm = permissions()) + : base_t() + , base2_t(open_or_create, name, size, read_write, addr, + create_open_func_t(get_this_pointer(), + DoOpenOrCreate), perm) + {} + + basic_managed_global_memory (open_only_t open_only, const char* name, + const void *addr = 0) + : base_t() + , base2_t(open_only, name, read_write, addr, + create_open_func_t(get_this_pointer(), + DoOpen)) + {} +}; + + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#include + +#endif //#ifndef BOOST_INTERPROCESS_BASIC_GLOBAL_MEMORY_HPP diff --git a/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp b/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp index e29fe5030b..f9ecb8a860 100644 --- a/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp +++ b/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,14 +19,10 @@ #include #include -#include -#include #include #include #include -#include #include -#include #include #include // @@ -38,18 +34,18 @@ #include //!\file -//!Describes a named shared memory allocation user class. +//!Describes a named shared memory allocation user class. //! namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { template class create_open_func; template< - class CharType, + class CharType, class MemoryAlgorithm, template class IndexType > @@ -58,14 +54,14 @@ struct segment_manager_type typedef segment_manager type; }; -//!This class is designed to be a base class to classes that manage -//!creation of objects in a fixed size memory buffer. Apart -//!from allocating raw memory, the user can construct named objects. To +//!This class is designed to be a base class to classes that manage +//!creation of objects in a fixed size memory buffer. Apart +//!from allocating raw memory, the user can construct named objects. To //!achieve this, this class uses the reserved space provided by the allocation //!algorithm to place a named_allocator_algo, who takes care of name mappings. //!The class can be customized with the char type used for object names //!and the memory allocation algorithm to be used.*/ -template < class CharType +template < class CharType , class MemoryAlgorithm , template class IndexType , std::size_t Offset = 0 @@ -86,7 +82,9 @@ class basic_managed_memory_impl typedef MemoryAlgorithm memory_algorithm; typedef typename MemoryAlgorithm::mutex_family mutex_family; typedef CharType char_t; - typedef std::ptrdiff_t handle_t; + typedef typename MemoryAlgorithm::size_type size_type; + typedef typename MemoryAlgorithm::difference_type difference_type; + typedef difference_type handle_t; typedef typename segment_manager:: const_named_iterator const_named_iterator; typedef typename segment_manager:: @@ -94,7 +92,7 @@ class basic_managed_memory_impl /// @cond - typedef typename + typedef typename segment_manager::char_ptr_holder_t char_ptr_holder_t; //Experimental. Don't use. @@ -102,14 +100,14 @@ class basic_managed_memory_impl /// @endcond - static const std::size_t PayloadPerAllocation = segment_manager::PayloadPerAllocation; + static const size_type PayloadPerAllocation = segment_manager::PayloadPerAllocation; private: typedef basic_managed_memory_impl self_t; protected: template - static bool grow(const char *filename, std::size_t extra_bytes) + static bool grow(const char *filename, size_type extra_bytes) { typedef typename ManagedMemory::device_type device_type; //Increase file size @@ -135,10 +133,10 @@ class basic_managed_memory_impl static bool shrink_to_fit(const char *filename) { typedef typename ManagedMemory::device_type device_type; - std::size_t new_size, old_size; + size_type new_size; try{ ManagedMemory managed_memory(open_only, filename); - old_size = managed_memory.get_size(); + managed_memory.get_size(); managed_memory.self_t::shrink_to_fit(); new_size = managed_memory.get_size(); } @@ -155,7 +153,7 @@ class basic_managed_memory_impl } //!Constructor. Allocates basic resources. Never throws. - basic_managed_memory_impl() + basic_managed_memory_impl() : mp_header(0){} //!Destructor. Calls close. Never throws. @@ -163,7 +161,7 @@ class basic_managed_memory_impl { this->close_impl(); } //!Places segment manager in the reserved space. This can throw. - bool create_impl (void *addr, std::size_t size) + bool create_impl (void *addr, size_type size) { if(mp_header) return false; @@ -171,21 +169,21 @@ class basic_managed_memory_impl if(size < segment_manager::get_min_size()) return false; - //This function should not throw. The index construction can + //This function should not throw. The index construction can //throw if constructor allocates memory. So we must catch it. BOOST_TRY{ - //Let's construct the allocator in memory + //Let's construct the allocator in memory mp_header = new(addr) segment_manager(size); } BOOST_CATCH(...){ return false; } BOOST_CATCH_END - return true; + return true; } - + //!Connects to a segment manager in the reserved buffer. Never throws. - bool open_impl (void *addr, std::size_t) + bool open_impl (void *addr, size_type) { if(mp_header) return false; mp_header = static_cast(addr); @@ -194,7 +192,7 @@ class basic_managed_memory_impl //!Frees resources. Never throws. bool close_impl() - { + { bool ret = mp_header != 0; mp_header = 0; return ret; @@ -211,7 +209,7 @@ class basic_managed_memory_impl } //! - void grow(std::size_t extra_bytes) + void grow(size_type extra_bytes) { mp_header->grow(extra_bytes); } void shrink_to_fit() @@ -228,12 +226,12 @@ class basic_managed_memory_impl { return reinterpret_cast(mp_header) - Offset; } //!Returns the size of memory segment. Never throws. - std::size_t get_size () const + size_type get_size () const { return mp_header->get_size() + Offset; } //!Returns the number of free bytes of the memory //!segment - std::size_t get_free_memory() const + size_type get_free_memory() const { return mp_header->get_free_memory(); } //!Returns the result of "all_memory_deallocated()" function @@ -251,58 +249,58 @@ class basic_managed_memory_impl void zero_free_memory() { mp_header->zero_free_memory(); } - //!Transforms an absolute address into an offset from base address. + //!Transforms an absolute address into an offset from base address. //!The address must belong to the memory segment. Never throws. handle_t get_handle_from_address (const void *ptr) const { - return reinterpret_cast(ptr) - - reinterpret_cast(this->get_address()); + return (handle_t)(reinterpret_cast(ptr) - + reinterpret_cast(this->get_address())); } //!Returns true if the address belongs to the managed memory segment bool belongs_to_segment (const void *ptr) const - { - return ptr >= this->get_address() && + { + return ptr >= this->get_address() && ptr < (reinterpret_cast(this->get_address()) + this->get_size()); } - //!Transforms previously obtained offset into an absolute address in the + //!Transforms previously obtained offset into an absolute address in the //!process space of the current process. Never throws.*/ void * get_address_from_handle (handle_t offset) const { return reinterpret_cast(this->get_address()) + offset; } //!Searches for nbytes of free memory in the segment, marks the - //!memory as used and return the pointer to the memory. If no + //!memory as used and return the pointer to the memory. If no //!memory is available throws a boost::interprocess::bad_alloc exception - void* allocate (std::size_t nbytes) + void* allocate (size_type nbytes) { return mp_header->allocate(nbytes); } - //!Searches for nbytes of free memory in the segment, marks the - //!memory as used and return the pointer to the memory. If no memory + //!Searches for nbytes of free memory in the segment, marks the + //!memory as used and return the pointer to the memory. If no memory //!is available returns 0. Never throws. - void* allocate (std::size_t nbytes, std::nothrow_t nothrow) + void* allocate (size_type nbytes, std::nothrow_t nothrow) { return mp_header->allocate(nbytes, nothrow); } //!Allocates nbytes bytes aligned to "alignment" bytes. "alignment" - //!must be power of two. If no memory + //!must be power of two. If no memory //!is available returns 0. Never throws. - void * allocate_aligned (std::size_t nbytes, std::size_t alignment, std::nothrow_t nothrow) + void * allocate_aligned (size_type nbytes, size_type alignment, std::nothrow_t nothrow) { return mp_header->allocate_aligned(nbytes, alignment, nothrow); } template std::pair - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, T *reuse_ptr = 0) - { + { return mp_header->allocation_command (command, limit_size, preferred_size, received_size, reuse_ptr); } //!Allocates nbytes bytes aligned to "alignment" bytes. "alignment" - //!must be power of two. If no + //!must be power of two. If no //!memory is available throws a boost::interprocess::bad_alloc exception - void * allocate_aligned(std::size_t nbytes, std::size_t alignment) + void * allocate_aligned(size_type nbytes, size_type alignment) { return mp_header->allocate_aligned(nbytes, alignment); } /// @cond @@ -310,24 +308,24 @@ class basic_managed_memory_impl //Experimental. Don't use. //!Allocates n_elements of elem_size bytes. - multiallocation_chain allocate_many(std::size_t elem_bytes, std::size_t num_elements) + multiallocation_chain allocate_many(size_type elem_bytes, size_type num_elements) { return mp_header->allocate_many(elem_bytes, num_elements); } //!Allocates n_elements, each one of elem_sizes[i] bytes. - multiallocation_chain allocate_many(const std::size_t *elem_sizes, std::size_t n_elements) + multiallocation_chain allocate_many(const size_type *elem_sizes, size_type n_elements) { return mp_header->allocate_many(elem_sizes, n_elements); } //!Allocates n_elements of elem_size bytes. - multiallocation_chain allocate_many(std::size_t elem_bytes, std::size_t num_elements, std::nothrow_t nothrow) + multiallocation_chain allocate_many(size_type elem_bytes, size_type num_elements, std::nothrow_t nothrow) { return mp_header->allocate_many(elem_bytes, num_elements, nothrow); } //!Allocates n_elements, each one of elem_sizes[i] bytes. - multiallocation_chain allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::nothrow_t nothrow) + multiallocation_chain allocate_many(const size_type *elem_sizes, size_type n_elements, std::nothrow_t nothrow) { return mp_header->allocate_many(elem_sizes, n_elements, nothrow); } //!Allocates n_elements, each one of elem_sizes[i] bytes. void deallocate_many(multiallocation_chain chain) - { return mp_header->deallocate_many(boost::interprocess::move(chain)); } + { return mp_header->deallocate_many(boost::move(chain)); } /// @endcond @@ -339,23 +337,23 @@ class basic_managed_memory_impl //!buffer and the object count. If not found returned pointer is 0. //!Never throws. template - std::pair find (char_ptr_holder_t name) + std::pair find (char_ptr_holder_t name) { return mp_header->template find(name); } //!Creates a named object or array in memory //! - //!Allocates and constructs a T object or an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Allocates and constructs a T object or an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. If an array is being constructed all objects are //!created using the same parameters given to this function. //! //!-> If the name was previously used, returns 0. //! - //!-> Throws boost::interprocess::bad_alloc if there is no available memory + //!-> Throws boost::interprocess::bad_alloc if there is no available memory //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and if an + //!Memory is freed automatically if T's constructor throws and if an //!array was being constructed, destructors of created objects are called //!before freeing the memory. template @@ -365,18 +363,18 @@ class basic_managed_memory_impl //!Finds or creates a named object or array in memory //! - //!Tries to find an object with the given name in memory. If - //!found, returns the pointer to this pointer. If the object is not found, - //!allocates and constructs a T object or an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Tries to find an object with the given name in memory. If + //!found, returns the pointer to this pointer. If the object is not found, + //!allocates and constructs a T object or an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. If an array is being constructed all objects are //!created using the same parameters given to this function. //! - //!-> Throws boost::interprocess::bad_alloc if there is no available memory + //!-> Throws boost::interprocess::bad_alloc if there is no available memory //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and if an + //!Memory is freed automatically if T's constructor throws and if an //!array was being constructed, destructors of created objects are called //!before freeing the memory. template @@ -386,18 +384,18 @@ class basic_managed_memory_impl //!Creates a named object or array in memory //! - //!Allocates and constructs a T object or an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Allocates and constructs a T object or an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. If an array is being constructed all objects are //!created using the same parameters given to this function. //! //!-> If the name was previously used, returns 0. //! - //!-> Returns 0 if there is no available memory + //!-> Returns 0 if there is no available memory //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and if an + //!Memory is freed automatically if T's constructor throws and if an //!array was being constructed, destructors of created objects are called //!before freeing the memory. template @@ -407,18 +405,18 @@ class basic_managed_memory_impl //!Finds or creates a named object or array in memory //! - //!Tries to find an object with the given name in memory. If - //!found, returns the pointer to this pointer. If the object is not found, - //!allocates and constructs a T object or an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Tries to find an object with the given name in memory. If + //!found, returns the pointer to this pointer. If the object is not found, + //!allocates and constructs a T object or an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. If an array is being constructed all objects are //!created using the same parameters given to this function. //! - //!-> Returns 0 if there is no available memory + //!-> Returns 0 if there is no available memory //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and if an + //!Memory is freed automatically if T's constructor throws and if an //!array was being constructed, destructors of created objects are called //!before freeing the memory. template @@ -426,54 +424,54 @@ class basic_managed_memory_impl find_or_construct(char_ptr_holder_t name, std::nothrow_t nothrow) { return mp_header->template find_or_construct(name, nothrow); } - //!Creates a named array from iterators in memory + //!Creates a named array from iterators in memory //! - //!Allocates and constructs an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Allocates and constructs an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. Each element in the array is created using the //!objects returned when dereferencing iterators as parameters //!and incrementing all iterators for each element. //! //!-> If the name was previously used, returns 0. //! - //!-> Throws boost::interprocess::bad_alloc if there is no available memory + //!-> Throws boost::interprocess::bad_alloc if there is no available memory //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and + //!Memory is freed automatically if T's constructor throws and //!destructors of created objects are called before freeing the memory. template typename segment_manager::template construct_iter_proxy::type construct_it(char_ptr_holder_t name) { return mp_header->template construct_it(name); } - //!Finds or creates a named array from iterators in memory + //!Finds or creates a named array from iterators in memory //! - //!Tries to find an object with the given name in memory. If - //!found, returns the pointer to this pointer. If the object is not found, - //!allocates and constructs an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Tries to find an object with the given name in memory. If + //!found, returns the pointer to this pointer. If the object is not found, + //!allocates and constructs an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. Each element in the array is created using the //!objects returned when dereferencing iterators as parameters //!and incrementing all iterators for each element. //! //!-> If the name was previously used, returns 0. //! - //!-> Throws boost::interprocess::bad_alloc if there is no available memory + //!-> Throws boost::interprocess::bad_alloc if there is no available memory //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and + //!Memory is freed automatically if T's constructor throws and //!destructors of created objects are called before freeing the memory. template typename segment_manager::template construct_iter_proxy::type find_or_construct_it(char_ptr_holder_t name) { return mp_header->template find_or_construct_it(name); } - //!Creates a named array from iterators in memory + //!Creates a named array from iterators in memory //! - //!Allocates and constructs an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Allocates and constructs an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. Each element in the array is created using the //!objects returned when dereferencing iterators as parameters //!and incrementing all iterators for each element. @@ -484,19 +482,19 @@ class basic_managed_memory_impl //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and + //!Memory is freed automatically if T's constructor throws and //!destructors of created objects are called before freeing the memory.*/ template typename segment_manager::template construct_iter_proxy::type construct_it(char_ptr_holder_t name, std::nothrow_t nothrow) { return mp_header->template construct_it(name, nothrow); } - //!Finds or creates a named array from iterators in memory + //!Finds or creates a named array from iterators in memory //! - //!Tries to find an object with the given name in memory. If - //!found, returns the pointer to this pointer. If the object is not found, - //!allocates and constructs an array of T in memory, - //!associates this with the given name and returns a pointer to the + //!Tries to find an object with the given name in memory. If + //!found, returns the pointer to this pointer. If the object is not found, + //!allocates and constructs an array of T in memory, + //!associates this with the given name and returns a pointer to the //!created object. Each element in the array is created using the //!objects returned when dereferencing iterators as parameters //!and incrementing all iterators for each element. @@ -507,7 +505,7 @@ class basic_managed_memory_impl //! //!-> If T's constructor throws, the function throws that exception. //! - //!Memory is freed automatically if T's constructor throws and + //!Memory is freed automatically if T's constructor throws and //!destructors of created objects are called before freeing the memory.*/ template typename segment_manager::template construct_iter_proxy::type @@ -539,11 +537,11 @@ class basic_managed_memory_impl //! //!Exception Handling: //! - //!When deleting a dynamically object or array, the Standard + //!When deleting a dynamically object or array, the Standard //!does not guarantee that dynamically allocated memory, will be released. - //!Also, when deleting arrays, the Standard doesn't require calling - //!destructors for the rest of the objects if for one of them the destructor - //!terminated with an exception. + //!Also, when deleting arrays, the Standard doesn't require calling + //!destructors for the rest of the objects if for one of them the destructor + //!terminated with an exception. //! //!Destroying an object: //! @@ -552,13 +550,13 @@ class basic_managed_memory_impl //! //!Destroying an array: //! - //!When destroying an array, if a destructor throws, the rest of + //!When destroying an array, if a destructor throws, the rest of //!destructors are called. If any of these throws, the exceptions are //!ignored. The name association will be erased, memory will be freed and //!the first exception will be thrown. This guarantees the unlocking of //!mutexes and other resources. //! - //!For all theses reasons, classes with throwing destructors are not + //!For all theses reasons, classes with throwing destructors are not //!recommended. template bool destroy(const CharType *name) @@ -570,7 +568,7 @@ class basic_managed_memory_impl //! //!Exception Handling: //! - //!When deleting a dynamically object, the Standard does not + //!When deleting a dynamically object, the Standard does not //!guarantee that dynamically allocated memory will be released. //! //!Destroying an object: @@ -578,10 +576,10 @@ class basic_managed_memory_impl //!If the destructor throws, the memory will be freed and that exception //!will be thrown. //! - //!For all theses reasons, classes with throwing destructors are not + //!For all theses reasons, classes with throwing destructors are not //!recommended for memory. template - bool destroy(const detail::unique_instance_t *const ) + bool destroy(const unique_instance_t *const ) { return mp_header->template destroy(unique_instance); } //!Destroys the object (named, unique, or anonymous) @@ -590,7 +588,7 @@ class basic_managed_memory_impl //! //!Exception Handling: //! - //!When deleting a dynamically object, the Standard does not + //!When deleting a dynamically object, the Standard does not //!guarantee that dynamically allocated memory will be released. //! //!Destroying an object: @@ -598,7 +596,7 @@ class basic_managed_memory_impl //!If the destructor throws, the memory will be freed and that exception //!will be thrown. //! - //!For all theses reasons, classes with throwing destructors are not + //!For all theses reasons, classes with throwing destructors are not //!recommended for memory. template void destroy_ptr(const T *ptr) @@ -619,19 +617,19 @@ class basic_managed_memory_impl //!Returns the length of an object created with construct/find_or_construct //!functions (1 if is a single element, >=1 if it's an array). Does not throw. template - static std::size_t get_instance_length(const T *ptr) + static size_type get_instance_length(const T *ptr) { return segment_manager::get_instance_length(ptr); } - //!Preallocates needed index resources to optimize the + //!Preallocates needed index resources to optimize the //!creation of "num" named objects in the memory segment. //!Can throw boost::interprocess::bad_alloc if there is no enough memory. - void reserve_named_objects(std::size_t num) + void reserve_named_objects(size_type num) { mp_header->reserve_named_objects(num); } - //!Preallocates needed index resources to optimize the + //!Preallocates needed index resources to optimize the //!creation of "num" unique objects in the memory segment. //!Can throw boost::interprocess::bad_alloc if there is no enough memory. - void reserve_unique_objects(std::size_t num) + void reserve_unique_objects(size_type num) { mp_header->reserve_unique_objects(num); } //!Calls shrink_to_fit in both named and unique object indexes @@ -641,12 +639,12 @@ class basic_managed_memory_impl //!Returns the number of named objects stored //!in the managed segment. - std::size_t get_num_named_objects() + size_type get_num_named_objects() { return mp_header->get_num_named_objects(); } //!Returns the number of unique objects stored //!in the managed segment. - std::size_t get_num_unique_objects() + size_type get_num_unique_objects() { return mp_header->get_num_unique_objects(); } //!Returns a constant iterator to the index storing the @@ -654,7 +652,7 @@ class basic_managed_memory_impl const_named_iterator named_begin() const { return mp_header->named_begin(); } - //!Returns a constant iterator to the end of the index + //!Returns a constant iterator to the end of the index //!storing the named allocations. NOT thread-safe. Never throws. const_named_iterator named_end() const { return mp_header->named_end(); } @@ -664,7 +662,7 @@ class basic_managed_memory_impl const_unique_iterator unique_begin() const { return mp_header->unique_begin(); } - //!Returns a constant iterator to the end of the index + //!Returns a constant iterator to the end of the index //!storing the unique allocations. NOT thread-safe. Never throws. const_unique_iterator unique_end() const { return mp_header->unique_end(); } @@ -704,7 +702,7 @@ class basic_managed_memory_impl //!buffer and the object count. If not found returned pointer is 0. //!Never throws. template - std::pair find_no_lock (char_ptr_holder_t name) + std::pair find_no_lock (char_ptr_holder_t name) { return mp_header->template find_no_lock(name); } /// @endcond @@ -722,13 +720,13 @@ template class create_open_func { public: - create_open_func(BasicManagedMemoryImpl * const frontend, detail::create_enum_t type) + create_open_func(BasicManagedMemoryImpl * const frontend, create_enum_t type) : m_frontend(frontend), m_type(type){} - bool operator()(void *addr, std::size_t size, bool created) const - { - if(((m_type == detail::DoOpen) && created) || - ((m_type == detail::DoCreate) && !created)) + bool operator()(void *addr, typename BasicManagedMemoryImpl::size_type size, bool created) const + { + if(((m_type == DoOpen) && created) || + ((m_type == DoCreate) && !created)) return false; if(created) @@ -739,10 +737,10 @@ class create_open_func private: BasicManagedMemoryImpl *m_frontend; - detail::create_enum_t m_type; + create_enum_t m_type; }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp b/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp index b03ca618cf..654c8bb9f3 100644 --- a/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp +++ b/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -34,6 +34,10 @@ #include #include #include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include //!\file //!Describes a named shared memory object allocation user class. @@ -47,26 +51,31 @@ namespace interprocess { //-Use GetSecurityInfo? //-Change everything to use only a shared memory object expanded via truncate()? -//!A basic shared memory named object creation class. Initializes the -//!shared memory segment. Inherits all basic functionality from +//!A basic shared memory named object creation class. Initializes the +//!shared memory segment. Inherits all basic functionality from //!basic_managed_memory_impl template < - class CharType, - class MemoryAlgorithm, + class CharType, + class MemoryAlgorithm, template class IndexType > -class basic_managed_multi_shared_memory - : public detail::basic_managed_memory_impl +class basic_managed_multi_shared_memory + : public ipcdetail::basic_managed_memory_impl { typedef basic_managed_multi_shared_memory self_t; + typedef ipcdetail::basic_managed_memory_impl + base_t; + typedef typename MemoryAlgorithm::void_pointer void_pointer; - typedef typename detail:: - managed_open_or_create_impl managed_impl; + typedef typename ipcdetail:: + managed_open_or_create_impl managed_impl; typedef typename void_pointer::segment_group_id segment_group_id; + typedef typename base_t::size_type size_type; + //////////////////////////////////////////////////////////////////////// // // Some internal helper structs/functors @@ -82,16 +91,16 @@ class basic_managed_multi_shared_memory // { // public: // segment_creator(shared_memory &shmem, -// const char *mem_name, +// const char *mem_name, // const void *addr) // : m_shmem(shmem), m_mem_name(mem_name), m_addr(addr){} // -// void *operator()(std::size_t size) +// void *operator()(size_type size) // { // if(!m_shmem.create(m_mem_name, size, m_addr)) // return 0; -// return m_shmem.get_address(); -// } +// return m_shmem.get_address(); +// } // private: // shared_memory &m_shmem; // const char *m_mem_name; @@ -102,29 +111,30 @@ class basic_managed_multi_shared_memory : public multi_segment_services { public: - typedef std::pair result_type; + typedef std::pair result_type; typedef basic_managed_multi_shared_memory frontend_t; - typedef typename + typedef typename basic_managed_multi_shared_memory::void_pointer void_pointer; typedef typename void_pointer::segment_group_id segment_group_id; group_services(frontend_t *const frontend) : mp_frontend(frontend), m_group(0), m_min_segment_size(0){} - virtual std::pair create_new_segment(std::size_t alloc_size) - { + virtual std::pair create_new_segment(size_type alloc_size) + { (void)alloc_size; + /* //We should allocate an extra byte so that the //[base_addr + alloc_size] byte belongs to this segment alloc_size += 1; //If requested size is less than minimum, update that - alloc_size = (m_min_segment_size > alloc_size) ? + alloc_size = (m_min_segment_size > alloc_size) ? m_min_segment_size : alloc_size; if(mp_frontend->priv_new_segment(create_open_func::DoCreate, alloc_size, 0, permissions())){ - shmem_list_t::value_type &m_impl = *mp_frontend->m_shmem_list.rbegin(); + typename shmem_list_t::value_type &m_impl = *mp_frontend->m_shmem_list.rbegin(); return result_type(m_impl.get_real_address(), m_impl.get_real_size()-1); - } - return result_type(static_cast(0), 0); + }*/ + return result_type(static_cast(0), 0); } virtual bool update_segments () @@ -138,17 +148,17 @@ class basic_managed_multi_shared_memory segment_group_id get_group() const { return m_group; } - void set_min_segment_size(std::size_t min_segment_size) + void set_min_segment_size(size_type min_segment_size) { m_min_segment_size = min_segment_size; } - std::size_t get_min_segment_size() const + size_type get_min_segment_size() const { return m_min_segment_size; } private: frontend_t * const mp_frontend; segment_group_id m_group; - std::size_t m_min_segment_size; + size_type m_min_segment_size; }; //!Functor to execute atomically when opening or creating a shared memory @@ -156,16 +166,16 @@ class basic_managed_multi_shared_memory struct create_open_func { enum type_t { DoCreate, DoOpen, DoOpenOrCreate }; - typedef typename + typedef typename basic_managed_multi_shared_memory::void_pointer void_pointer; create_open_func(self_t * const frontend, - type_t type, std::size_t segment_number) + type_t type, size_type segment_number) : mp_frontend(frontend), m_type(type), m_segment_number(segment_number){} - bool operator()(void *addr, std::size_t size, bool created) const - { - if(((m_type == DoOpen) && created) || + bool operator()(void *addr, size_type size, bool created) const + { + if(((m_type == DoOpen) && created) || ((m_type == DoCreate) && !created)) return false; segment_group_id group = mp_frontend->m_group_services.get_group(); @@ -181,7 +191,7 @@ class basic_managed_multi_shared_memory //Check if this is the master segment if(!m_segment_number){ //Create or open the Interprocess machinery - if((impl_done = created ? + if((impl_done = created ? mp_frontend->create_impl(addr, size) : mp_frontend->open_impl(addr, size))){ return true; } @@ -203,29 +213,26 @@ class basic_managed_multi_shared_memory } self_t * const mp_frontend; type_t m_type; - std::size_t m_segment_number; + size_type m_segment_number; }; //!Functor to execute atomically when closing a shared memory segment. struct close_func { - typedef typename + typedef typename basic_managed_multi_shared_memory::void_pointer void_pointer; close_func(self_t * const frontend) : mp_frontend(frontend){} void operator()(const mapped_region ®ion, bool last) const - { + { if(last) mp_frontend->destroy_impl(); else mp_frontend->close_impl(); } self_t * const mp_frontend; }; - typedef detail::basic_managed_memory_impl - base_t; - //Friend declarations friend struct basic_managed_multi_shared_memory::create_open_func; friend struct basic_managed_multi_shared_memory::close_func; @@ -240,16 +247,16 @@ class basic_managed_multi_shared_memory basic_managed_multi_shared_memory(create_only_t, const char *name, - std::size_t size, + size_type size, const permissions &perm = permissions()) : m_group_services(get_this_pointer()) { - priv_open_or_create(create_open_func::DoCreate,name, size, perm); + priv_open_or_create(create_open_func::DoCreate,name, size, perm); } basic_managed_multi_shared_memory(open_or_create_t, const char *name, - std::size_t size, + size_type size, const permissions &perm = permissions()) : m_group_services(get_this_pointer()) { @@ -266,9 +273,9 @@ class basic_managed_multi_shared_memory { this->priv_close(); } private: - bool priv_open_or_create(typename create_open_func::type_t type, + bool priv_open_or_create(typename create_open_func::type_t type, const char *name, - std::size_t size, + size_type size, const permissions &perm) { if(!m_shmem_list.empty()) @@ -294,21 +301,21 @@ class basic_managed_multi_shared_memory if(group){ void_pointer::delete_group(group); } - return false; + return false; } bool priv_new_segment(typename create_open_func::type_t type, - std::size_t size, + size_type size, const void *addr, const permissions &perm) { BOOST_TRY{ //Get the number of groups of this multi_segment group - std::size_t segment_id = m_shmem_list.size(); - //Format the name of the shared memory: append segment number. + size_type segment_id = m_shmem_list.size(); + //Format the name of the shared memory: append segment number. boost::interprocess::basic_ovectorstream formatter; //Pre-reserve string size - std::size_t str_size = m_root_name.length()+10; + size_type str_size = m_root_name.length()+10; if(formatter.vector().size() < str_size){ //This can throw. formatter.reserve(str_size); @@ -326,21 +333,21 @@ class basic_managed_multi_shared_memory case create_open_func::DoCreate: { managed_impl shm(create_only, name, size, read_write, addr, func, perm); - mshm = boost::interprocess::move(shm); + mshm = boost::move(shm); } break; case create_open_func::DoOpen: { managed_impl shm(open_only, name,read_write, addr, func); - mshm = boost::interprocess::move(shm); + mshm = boost::move(shm); } break; case create_open_func::DoOpenOrCreate: { managed_impl shm(open_or_create, name, size, read_write, addr, func, perm); - mshm = boost::interprocess::move(shm); + mshm = boost::move(shm); } break; @@ -350,7 +357,7 @@ class basic_managed_multi_shared_memory } //This can throw. - m_shmem_list.push_back(boost::interprocess::move(mshm)); + m_shmem_list.push_back(boost::move(mshm)); return true; } BOOST_CATCH(const std::bad_alloc&){ @@ -361,23 +368,24 @@ class basic_managed_multi_shared_memory //!Frees resources. Never throws. void priv_close() - { + { if(!m_shmem_list.empty()){ bool ret; //Obtain group identifier segment_group_id group = m_group_services.get_group(); //Erase main segment and its resources - shmem_list_t::iterator itbeg = m_shmem_list.begin(), - itend = m_shmem_list.end(), - it = itbeg; + //typename shmem_list_t::iterator itbeg = m_shmem_list.begin(), + // itend = m_shmem_list.end(), + // it = itbeg; //(*itbeg)->close_with_func(close_func(this)); //Delete group. All mappings are erased too. ret = void_pointer::delete_group(group); + (void)ret; BOOST_ASSERT(ret); m_shmem_list.clear(); } } - + private: shmem_list_t m_shmem_list; group_services m_group_services; diff --git a/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp b/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp index 24a8a48427..a4f1f15817 100644 --- a/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp +++ b/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp @@ -11,6 +11,7 @@ #ifndef BOOST_INTERPROCESS_MANAGED_OPEN_OR_CREATE_IMPL #define BOOST_INTERPROCESS_MANAGED_OPEN_OR_CREATE_IMPL +#include #include #include #include @@ -21,15 +22,17 @@ #include #include #include -#include #include +#include +#include +#include #include namespace boost { namespace interprocess { /// @cond -namespace detail{ class interprocess_tester; } +namespace ipcdetail{ class interprocess_tester; } template @@ -45,15 +48,15 @@ class xsi_key; template<> struct managed_open_or_create_impl_device_id_t -{ +{ typedef xsi_key type; }; #endif //BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS - + /// @endcond -namespace detail { +namespace ipcdetail { template @@ -76,39 +79,41 @@ class managed_open_or_create_impl_device_holder const DeviceAbstraction &get_device() const { return dev; } - + private: DeviceAbstraction dev; }; -template +template class managed_open_or_create_impl : public managed_open_or_create_impl_device_holder { //Non-copyable - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(managed_open_or_create_impl) + BOOST_MOVABLE_BUT_NOT_COPYABLE(managed_open_or_create_impl) typedef typename managed_open_or_create_impl_device_id_t::type device_id_t; typedef managed_open_or_create_impl_device_holder DevHolder; enum - { - UninitializedSegment, - InitializingSegment, + { + UninitializedSegment, + InitializingSegment, InitializedSegment, CorruptedSegment }; public: static const std::size_t - ManagedOpenOrCreateUserOffset = - detail::ct_rounded_size + ManagedOpenOrCreateUserOffset = + ct_rounded_size < sizeof(boost::uint32_t) - , detail::alignment_of::value>::value; + , MemAlignment ? (MemAlignment) : + (::boost::alignment_of< ::boost::detail::max_align >::value) + >::value; managed_open_or_create_impl() {} - managed_open_or_create_impl(create_only_t, + managed_open_or_create_impl(create_only_t, const device_id_t & id, std::size_t size, mode_t mode, @@ -116,7 +121,7 @@ class managed_open_or_create_impl const permissions &perm) { priv_open_or_create - ( detail::DoCreate + ( DoCreate , id , size , mode @@ -125,13 +130,13 @@ class managed_open_or_create_impl , null_mapped_region_function()); } - managed_open_or_create_impl(open_only_t, + managed_open_or_create_impl(open_only_t, const device_id_t & id, mode_t mode, const void *addr) { priv_open_or_create - ( detail::DoOpen + ( DoOpen , id , 0 , mode @@ -141,7 +146,7 @@ class managed_open_or_create_impl } - managed_open_or_create_impl(open_or_create_t, + managed_open_or_create_impl(open_or_create_t, const device_id_t & id, std::size_t size, mode_t mode, @@ -149,7 +154,7 @@ class managed_open_or_create_impl const permissions &perm) { priv_open_or_create - ( detail::DoOpenOrCreate + ( DoOpenOrCreate , id , size , mode @@ -159,7 +164,7 @@ class managed_open_or_create_impl } template - managed_open_or_create_impl(create_only_t, + managed_open_or_create_impl(create_only_t, const device_id_t & id, std::size_t size, mode_t mode, @@ -168,7 +173,7 @@ class managed_open_or_create_impl const permissions &perm) { priv_open_or_create - (detail::DoCreate + (DoCreate , id , size , mode @@ -178,14 +183,14 @@ class managed_open_or_create_impl } template - managed_open_or_create_impl(open_only_t, + managed_open_or_create_impl(open_only_t, const device_id_t & id, mode_t mode, const void *addr, const ConstructFunc &construct_func) { priv_open_or_create - ( detail::DoOpen + ( DoOpen , id , 0 , mode @@ -195,7 +200,7 @@ class managed_open_or_create_impl } template - managed_open_or_create_impl(open_or_create_t, + managed_open_or_create_impl(open_or_create_t, const device_id_t & id, std::size_t size, mode_t mode, @@ -204,7 +209,7 @@ class managed_open_or_create_impl const permissions &perm) { priv_open_or_create - ( detail::DoOpenOrCreate + ( DoOpenOrCreate , id , size , mode @@ -213,14 +218,14 @@ class managed_open_or_create_impl , construct_func); } - managed_open_or_create_impl(BOOST_INTERPROCESS_RV_REF(managed_open_or_create_impl) moved) + managed_open_or_create_impl(BOOST_RV_REF(managed_open_or_create_impl) moved) { this->swap(moved); } - managed_open_or_create_impl &operator=(BOOST_INTERPROCESS_RV_REF(managed_open_or_create_impl) moved) - { - managed_open_or_create_impl tmp(boost::interprocess::move(moved)); + managed_open_or_create_impl &operator=(BOOST_RV_REF(managed_open_or_create_impl) moved) + { + managed_open_or_create_impl tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } ~managed_open_or_create_impl() @@ -260,38 +265,49 @@ class managed_open_or_create_impl //These are templatized to allow explicit instantiations template - static void truncate_device(DeviceAbstraction &, std::size_t, detail::false_) + static void truncate_device(DeviceAbstraction &, offset_t, false_) {} //Empty template - static void truncate_device(DeviceAbstraction &dev, std::size_t size, detail::true_) + static void truncate_device(DeviceAbstraction &dev, offset_t size, true_) { dev.truncate(size); } + + template + static bool check_offset_t_size(std::size_t , false_) + { return true; } //Empty + + template + static bool check_offset_t_size(std::size_t size, true_) + { return size == std::size_t(offset_t(size)); } + //These are templatized to allow explicit instantiations template - static void create_device(DeviceAbstraction &dev, const device_id_t & id, std::size_t size, const permissions &perm, detail::false_) + static void create_device(DeviceAbstraction &dev, const device_id_t & id, std::size_t size, const permissions &perm, false_ file_like) { + (void)file_like; DeviceAbstraction tmp(create_only, id, read_write, size, perm); tmp.swap(dev); } template - static void create_device(DeviceAbstraction &dev, const device_id_t & id, std::size_t, const permissions &perm, detail::true_) + static void create_device(DeviceAbstraction &dev, const device_id_t & id, std::size_t, const permissions &perm, true_ file_like) { + (void)file_like; DeviceAbstraction tmp(create_only, id, read_write, perm); tmp.swap(dev); } - template inline + template inline void priv_open_or_create - (detail::create_enum_t type, - const device_id_t & id, + (create_enum_t type, + const device_id_t & id, std::size_t size, mode_t mode, const void *addr, const permissions &perm, ConstructFunc construct_func) { - typedef detail::bool_ file_like_t; + typedef bool_ file_like_t; (void)mode; error_info err; bool created = false; @@ -299,32 +315,35 @@ class managed_open_or_create_impl bool cow = false; DeviceAbstraction dev; - if(type != detail::DoOpen && size < ManagedOpenOrCreateUserOffset){ + if(type != DoOpen && size < ManagedOpenOrCreateUserOffset){ throw interprocess_exception(error_info(size_error)); } - - if(type == detail::DoOpen && mode == read_write){ + //Check size can be represented by offset_t (used by truncate) + if(type != DoOpen && !check_offset_t_size(size, file_like_t())){ + throw interprocess_exception(error_info(size_error)); + } + if(type == DoOpen && mode == read_write){ DeviceAbstraction tmp(open_only, id, read_write); tmp.swap(dev); created = false; } - else if(type == detail::DoOpen && mode == read_only){ + else if(type == DoOpen && mode == read_only){ DeviceAbstraction tmp(open_only, id, read_only); tmp.swap(dev); created = false; ronly = true; } - else if(type == detail::DoOpen && mode == copy_on_write){ + else if(type == DoOpen && mode == copy_on_write){ DeviceAbstraction tmp(open_only, id, read_only); tmp.swap(dev); created = false; cow = true; } - else if(type == detail::DoCreate){ + else if(type == DoCreate){ create_device(dev, id, size, perm, file_like_t()); created = true; } - else if(type == detail::DoOpenOrCreate){ + else if(type == DoOpenOrCreate){ //This loop is very ugly, but brute force is sometimes better //than diplomacy. If someone knows how to open or create a //file and know if we have really created it or just open it @@ -352,9 +371,15 @@ class managed_open_or_create_impl throw; } } + catch(...){ + throw; + } } } - detail::thread_yield(); + catch(...){ + throw; + } + thread_yield(); } } @@ -367,19 +392,20 @@ class managed_open_or_create_impl mapped_region region(dev, read_write, 0, 0, addr); boost::uint32_t *patomic_word = 0; //avoid gcc warning patomic_word = static_cast(region.get_address()); - boost::uint32_t previous = detail::atomic_cas32(patomic_word, InitializingSegment, UninitializedSegment); + boost::uint32_t previous = atomic_cas32(patomic_word, InitializingSegment, UninitializedSegment); if(previous == UninitializedSegment){ try{ - construct_func(static_cast(region.get_address()) + ManagedOpenOrCreateUserOffset, size - ManagedOpenOrCreateUserOffset, true); + construct_func( static_cast(region.get_address()) + ManagedOpenOrCreateUserOffset + , size - ManagedOpenOrCreateUserOffset, true); //All ok, just move resources to the external mapped region m_mapped_region.swap(region); } catch(...){ - detail::atomic_write32(patomic_word, CorruptedSegment); + atomic_write32(patomic_word, CorruptedSegment); throw; } - detail::atomic_write32(patomic_word, InitializedSegment); + atomic_write32(patomic_word, InitializedSegment); } else if(previous == InitializingSegment || previous == InitializedSegment){ throw interprocess_exception(error_info(already_exists_error)); @@ -401,10 +427,10 @@ class managed_open_or_create_impl if(FileBased){ offset_t filesize = 0; while(filesize == 0){ - if(!detail::get_file_size(detail::file_handle_from_mapping_handle(dev.get_mapping_handle()), filesize)){ + if(!get_file_size(file_handle_from_mapping_handle(dev.get_mapping_handle()), filesize)){ throw interprocess_exception(error_info(system_error_code())); } - detail::thread_yield(); + thread_yield(); } if(filesize == 1){ throw interprocess_exception(error_info(corrupted_error)); @@ -414,11 +440,11 @@ class managed_open_or_create_impl mapped_region region(dev, ronly ? read_only : (cow ? copy_on_write : read_write), 0, 0, addr); boost::uint32_t *patomic_word = static_cast(region.get_address()); - boost::uint32_t value = detail::atomic_read32(patomic_word); + boost::uint32_t value = atomic_read32(patomic_word); while(value == InitializingSegment || value == UninitializedSegment){ - detail::thread_yield(); - value = detail::atomic_read32(patomic_word); + thread_yield(); + value = atomic_read32(patomic_word); } if(value != InitializedSegment) @@ -431,14 +457,14 @@ class managed_open_or_create_impl m_mapped_region.swap(region); } if(StoreDevice){ - this->DevHolder::get_device() = boost::interprocess::move(dev); + this->DevHolder::get_device() = boost::move(dev); } } private: - friend class detail::interprocess_tester; + friend class interprocess_tester; void dont_close_on_destruction() - { detail::interprocess_tester::dont_close_on_destruction(m_mapped_region); } + { interprocess_tester::dont_close_on_destruction(m_mapped_region); } mapped_region m_mapped_region; }; @@ -448,9 +474,11 @@ inline void swap(managed_open_or_create_impl &x ,managed_open_or_create_impl &y) { x.swap(y); } -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { +#include + #endif //#ifndef BOOST_INTERPROCESS_MANAGED_OPEN_OR_CREATE_IMPL diff --git a/3party/boost/boost/interprocess/detail/math_functions.hpp b/3party/boost/boost/interprocess/detail/math_functions.hpp index 5c6b4582b6..2fc457c683 100644 --- a/3party/boost/boost/interprocess/detail/math_functions.hpp +++ b/3party/boost/boost/interprocess/detail/math_functions.hpp @@ -1,10 +1,10 @@ ////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Stephen Cleary 2000. -// (C) Copyright Ion Gaztanaga 2007-2009. +// (C) Copyright Ion Gaztanaga 2007-2011. // // Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/interprocess for documentation. @@ -21,7 +21,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { // Greatest common divisor and least common multiple @@ -93,7 +93,7 @@ inline std::size_t floor_log2 (std::size_t x) std::size_t n = x; std::size_t log2 = 0; - + for(std::size_t shift = Bits >> 1; shift; shift >>= 1){ std::size_t tmp = n >> shift; if (tmp) @@ -103,7 +103,7 @@ inline std::size_t floor_log2 (std::size_t x) return log2; } -} // namespace detail +} // namespace ipcdetail } // namespace interprocess } // namespace boost diff --git a/3party/boost/boost/interprocess/detail/min_max.hpp b/3party/boost/boost/interprocess/detail/min_max.hpp index 7c19f59712..1f4ebdfc33 100644 --- a/3party/boost/boost/interprocess/detail/min_max.hpp +++ b/3party/boost/boost/interprocess/detail/min_max.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2011. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -21,7 +21,7 @@ #include namespace boost { -namespace interprocess { +namespace interprocess { template const T &max_value(const T &a, const T &b) @@ -31,7 +31,7 @@ template const T &min_value(const T &a, const T &b) { return a < b ? a : b; } -} //namespace interprocess { +} //namespace interprocess { } //namespace boost { #include diff --git a/3party/boost/boost/interprocess/detail/move.hpp b/3party/boost/boost/interprocess/detail/move.hpp index d41f78d71e..1ec43b211b 100644 --- a/3party/boost/boost/interprocess/detail/move.hpp +++ b/3party/boost/boost/interprocess/detail/move.hpp @@ -1,7 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright David Abrahams, Vicente Botet 2009. -// (C) Copyright Ion Gaztanaga 2009-2010. +// (C) Copyright Ion Gaztanaga 2010-2011. // 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) @@ -12,1146 +11,18 @@ //! \file -#ifndef BOOST_MOVE_DETAIL_MOVE_HPP -#define BOOST_MOVE_DETAIL_MOVE_HPP +#ifndef BOOST_INTERPROCESS_DETAIL_MOVE_HPP +#define BOOST_INTERPROCESS_DETAIL_MOVE_HPP -#include -#include //copy, copy_backward -#include //uninitialized_copy -#include //std::iterator -#include -#include -#include -#include -#include - -//! Defining or undefining this macro will change Boost.Move behaviour -//! for copyable and movable classes when assigning from non-const rvalues: -//! \code -//! copyable_and_movable produce(){ return copyable_and_movable(); } -//! \endcode -//! If the macro is NOT defined: -//! \code -//! copyable_and_movable cm; -//! cm = copyable_and_movable(); //object is COPIED (missed optimization) -//! \endcode -//! If the macro IS defined: -//! \code -//! copyable_and_movable cm; -//! cm = copyable_and_movable(); //object is MOVED -//! \endcode -//! However, the second option has also some downsides. See documentation for more details. -#define BOOST_MOVE_OPTIMIZED_EMULATION - -/// @cond - -//Define to easily port between Boost.Move and internal Boost.Interprocess move emulation -// -// This configuration is temporary. Boost.Interprocess emulation uses -// different macros to avoid any redefinition of a top-levl Boost macro. -// It will disappear once the library is accepted and -// Boost.Interprocess is updated to the standard interface. -// -#define BOOST_MOVE_IN_BOOST_INTERPROCESS_NAMESPACE - -#ifdef BOOST_MOVE_IN_BOOST_INTERPROCESS_NAMESPACE - -#define INTERPROCESS_NAMESPACE_BEGIN namespace interprocess { -#define INTERPROCESS_NAMESPACE_END }// namespace interprocess { -#define BOOST_MOVE_NAMESPACE boost::interprocess - -#else //BOOST_MOVE_IN_BOOST_INTERPROCESS_NAMESPACE - -#define INTERPROCESS_NAMESPACE_BEGIN -#define INTERPROCESS_NAMESPACE_END -#define BOOST_MOVE_NAMESPACE boost - -#endif //BOOST_MOVE_IN_BOOST_INTERPROCESS_NAMESPACE +#include namespace boost { -INTERPROCESS_NAMESPACE_BEGIN -namespace move_detail { +namespace interprocess { -template -struct identity -{ - typedef T type; -}; +using ::boost::move; +using ::boost::forward; -template -class is_convertible -{ - typedef char true_t; - class false_t { char dummy[2]; }; - static true_t dispatch(U); - static false_t dispatch(...); - static T trigger(); - public: - enum { value = sizeof(dispatch(trigger())) == sizeof(true_t) }; -}; - -} //namespace move_detail { -INTERPROCESS_NAMESPACE_END +} //namespace interprocess { } //namespace boost { -/// @endcond - -#if !defined(BOOST_NO_RVALUE_REFERENCES) - -#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) - -#define BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - -#else - -#if defined(_MSC_VER) && (_MSC_VER == 1600) -#define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG -#endif - -#endif - -#endif - - -#if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED) - -#include -#include -#include - -#ifdef __GNUC__ -# define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__)) -#else -# define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS -#endif - -namespace boost { -INTERPROCESS_NAMESPACE_BEGIN - -////////////////////////////////////////////////////////////////////////////// -// -// struct rv -// -////////////////////////////////////////////////////////////////////////////// -template -class rv : public T -{ - rv(); - ~rv(); - rv(rv const&); - void operator=(rv const&); -} BOOST_MOVE_ATTRIBUTE_MAY_ALIAS; - -////////////////////////////////////////////////////////////////////////////// -// -// move_detail::is_rv -// -////////////////////////////////////////////////////////////////////////////// - -namespace move_detail { - -template -struct is_rv -{ - static const bool value = false; -}; - -template -struct is_rv< rv > -{ - static const bool value = true; -}; - -} //namespace move_detail { - -////////////////////////////////////////////////////////////////////////////// -// -// is_movable -// -////////////////////////////////////////////////////////////////////////////// -template -struct is_movable - : public ::boost::mpl::bool_&>::value> -{ -}; - -template -struct is_movable< rv > - : public ::boost::mpl::bool_ -{ -}; - -template -struct has_nothrow_move - : public ::boost::mpl::bool_ -{ -}; - -////////////////////////////////////////////////////////////////////////////// -// -// move() -// -////////////////////////////////////////////////////////////////////////////// -template -typename ::boost::disable_if, T&>::type move(T& x) -{ - return x; -} - -template -typename enable_if, rv&>::type move(T& x) -{ - return *static_cast* >(boost::addressof(x)); -} - -template -typename enable_if, rv&>::type move(rv& x) -{ - return x; -} - - -#define BOOST_RV_REF(TYPE)\ - ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - -#define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ - ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - -#define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ - ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - - -#define BOOST_FWD_REF(TYPE)\ - const TYPE & \ -// - -#define BOOST_CATCH_CONST_RLVALUE(TYPE)\ - const ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - -#ifdef BOOST_MOVE_OPTIMIZED_EMULATION - -#define BOOST_COPY_ASSIGN_REF(TYPE)\ - const ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - -#define BOOST_MOVE_MACRO_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ - const ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - -#define BOOST_MOVE_MACRO_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ - const ::BOOST_MOVE_NAMESPACE::rv< TYPE >& \ -// - -////////////////////////////////////////////////////////////////////////////// -// -// forward() -// -////////////////////////////////////////////////////////////////////////////// - -template -typename enable_if< ::BOOST_MOVE_NAMESPACE::move_detail::is_rv, T &>::type - forward(const typename move_detail::identity::type &x) -{ - return const_cast(x); -} - -template -typename disable_if< ::BOOST_MOVE_NAMESPACE::move_detail::is_rv, const T &>::type - forward(const typename move_detail::identity::type &x) -{ - return x; -} - -#else //BOOST_MOVE_OPTIMIZED_EMULATION - -#define BOOST_COPY_ASSIGN_REF(TYPE)\ - const TYPE & \ -// - -#define BOOST_MOVE_MACRO_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ - const TYPE< ARG1, ARG2 >& \ -// - -#define BOOST_MOVE_MACRO_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ - const TYPE< ARG1, ARG2, ARG3 > & \ -// - -////////////////////////////////////////////////////////////////////////////// -// -// forward() -// -////////////////////////////////////////////////////////////////////////////// - -//Catches const lvalues for movable types -template -const T& - forward( BOOST_CATCH_CONST_RLVALUE(T) x - , typename ::boost::enable_if_c< ::BOOST_MOVE_NAMESPACE::is_movable::value >::type* = 0) -{ - return static_cast(x); -} - -//Catches const lvalues for non-movable types -template -const T& - forward( const T &x - , typename ::boost::enable_if_c< !::BOOST_MOVE_NAMESPACE::is_movable::value && - !::boost::move_detail::is_rv::value - >::type* = 0) -{ - return static_cast(x); -} - -//Catches forwarded ::boost::rv via BOOST_FWD_REFs -template -T & - forward( const T &t - , typename ::boost::enable_if_c< ::boost::move_detail::is_rv::value >::type* = 0) -{ - return const_cast(t); -} - -//Catches forwarded ::boost::rv -template -const T & - forward( const U &u - , typename ::boost::enable_if_c< ::boost::is_same< ::boost::rv, U >::value >::type * = 0) -{ - return static_cast(u); -} - -//Catches non-const lvalues -template -T& - forward( typename move_detail::identity::type &x - , typename ::boost::enable_if_c< !::boost::move_detail::is_rv::value >::type* = 0) -{ - return x; -} - -//Catches non-const rvalues -template -typename enable_if, ::boost::rv & >::type - forward(BOOST_RV_REF(T) x) -{ return x; } - -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// BOOST_MOVABLE_BUT_NOT_COPYABLE -// -////////////////////////////////////////////////////////////////////////////// -#define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\ - private:\ - TYPE(TYPE &);\ - TYPE& operator=(TYPE &);\ - public:\ - operator ::BOOST_MOVE_NAMESPACE::rv&() \ - { return *static_cast< ::BOOST_MOVE_NAMESPACE::rv* >(this); }\ - operator const ::BOOST_MOVE_NAMESPACE::rv&() const \ - { return *static_cast* >(this); }\ - private:\ -// - -////////////////////////////////////////////////////////////////////////////// -// -// BOOST_COPYABLE_AND_MOVABLE -// -////////////////////////////////////////////////////////////////////////////// - -#ifdef BOOST_MOVE_OPTIMIZED_EMULATION - -#define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ - public:\ - TYPE& operator=(TYPE &t)\ - { this->operator=(static_cast &>(const_cast(t))); return *this;}\ - public:\ - operator ::BOOST_MOVE_NAMESPACE::rv&() \ - { return *static_cast< ::BOOST_MOVE_NAMESPACE::rv* >(this); }\ - operator const ::BOOST_MOVE_NAMESPACE::rv&() const \ - { return *static_cast* >(this); }\ - private:\ -// - -#else //#ifdef BOOST_MOVE_OPTIMIZED_EMULATION - -#define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ - public:\ - operator ::BOOST_MOVE_NAMESPACE::rv&() \ - { return *static_cast< ::BOOST_MOVE_NAMESPACE::rv* >(this); }\ - operator const ::BOOST_MOVE_NAMESPACE::rv&() const \ - { return *static_cast* >(this); }\ - private:\ -// - -#endif - - -INTERPROCESS_NAMESPACE_END -} //namespace boost - -#else //BOOST_NO_RVALUE_REFERENCES - -#include - -namespace boost { -INTERPROCESS_NAMESPACE_BEGIN - -/// @cond - -namespace move_detail { - -template -struct is_lvalue_reference - : public ::boost::mpl::bool_ -{}; - -template -struct is_lvalue_reference - : public ::boost::mpl::bool_ -{}; - -typedef char one; -struct two {one _[2];}; - -template -struct internal_member_value_traits -{ - template static one test(...); - template static two test(typename U::boost_move_emulation_t* = 0); - static const bool value = sizeof(test(0)) == sizeof(two); -}; - -} //namespace move_detail { - -/// @endcond - -////////////////////////////////////////////////////////////////////////////// -// -// is_movable -// -////////////////////////////////////////////////////////////////////////////// - -//! For compilers with rvalue references, this traits class returns true -//! if BOOST_ENABLE_MOVE_EMULATION is activated. -//! -//! For other compilers returns true if T is convertible to ::boost::rv& -template -struct is_movable - : public ::boost::mpl::bool_::value> -{ -}; - -//! By default this traits returns false. Classes with non-thworing move construction -//! and assignment should specialize this trait to obtain some performance improvements. -template -struct has_nothrow_move - : public ::boost::mpl::bool_ -{}; - -////////////////////////////////////////////////////////////////////////////// -// -// move -// -////////////////////////////////////////////////////////////////////////////// - - -#if defined(BOOST_MOVE_DOXYGEN_INVOKED) -//! This function provides a way to convert a reference into a rvalue reference -//! in compilers with rvalue references. For other compilers converts T & into -//! ::boost::rv & so that move emulation is activated. -template inline -rvalue_reference move (input_reference); - -#else //BOOST_MOVE_DOXYGEN_INVOKED - -#if defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) - -//Old move approach, lvalues could bind to rvalue references -template inline -typename remove_reference::type && move(T&& t) -{ return t; } - -#else //Old move - -template inline -typename remove_reference::type && move(T&& t) -{ return static_cast::type &&>(t); } - -#endif //Old move - -#endif //BOOST_MOVE_DOXYGEN_INVOKED - - -////////////////////////////////////////////////////////////////////////////// -// -// forward -// -////////////////////////////////////////////////////////////////////////////// - - -#if defined(BOOST_MOVE_DOXYGEN_INVOKED) -//! This function provides limited form of forwarding that is usually enough for -//! in-place construction and avoids the exponential overloading necessary for -//! perfect forwarding in C++03. -//! -//! For compilers with rvalue references this function provides perfect forwarding. -//! -//! Otherwise: -//! * If input_reference binds to const ::boost::rv & then it output_reference is -//! ::boost::rev & -//! -//! * Else, input_reference is equal to output_reference is equal to input_reference. -template inline output_reference forward(input_reference); - -#else - -#if defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) - -//Old move approach, lvalues could bind to rvalue references - -template inline -T&& forward (typename move_detail::identity::type&& t) -{ return t; } - -#else //Old move - -//Implementation #5 from N2951, thanks to Howard Hinnant - -template -inline T&& forward(U&& t - , typename enable_if_c< - move_detail::is_lvalue_reference::value ? move_detail::is_lvalue_reference::value : true>::type * = 0/* - , typename enable_if_c< - move_detail::is_convertible - ::type*, typename remove_reference::type*>::value>::type * = 0*/) -{ return static_cast(t); } - -#endif //Old move - -#endif //BOOST_MOVE_DOXYGEN_INVOKED - -////////////////////////////////////////////////////////////////////////////// -// -// BOOST_ENABLE_MOVE_EMULATION -// -////////////////////////////////////////////////////////////////////////////// - -///@cond - -#define BOOST_ENABLE_MOVE_EMULATION(TYPE)\ - typedef int boost_move_emulation_t; -\ -// - -/// @endcond - -//! This macro marks a type as movable but not copyable, disabling copy construction -//! and assignment. The user will need to write a move constructor/assignment as explained -//! in the documentation to fully write a movable but not copyable class. -#define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\ - public:\ - typedef int boost_move_emulation_t;\ - private:\ - TYPE(const TYPE &);\ - TYPE& operator=(const TYPE &);\ -// - -//! This macro marks a type as copyable and movable. -//! The user will need to write a move constructor/assignment and a copy assignment -//! as explained in the documentation to fully write a copyable and movable class. -#define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ - typedef int boost_move_emulation_t; -// - -/// @cond - -#define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ - TYPE && \ -// - -#define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ - TYPE && \ -// - -/// @endcond - -//!This macro is used to achieve portable syntax in move -//!constructors and assignments for classes marked as -//!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE -#define BOOST_RV_REF(TYPE)\ - TYPE && \ -// - -//!This macro is used to achieve portable syntax in copy -//!assignment for classes marked as BOOST_COPYABLE_AND_MOVABLE. -#define BOOST_COPY_ASSIGN_REF(TYPE)\ - const TYPE & \ -// - -/// @cond - -#define BOOST_COPY_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\ - const TYPE & \ -// - -#define BOOST_COPY_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\ - TYPE& \ -// - -/// @endcond - -//! This macro is used to implement portable perfect forwarding -//! as explained in the documentation. -#define BOOST_FWD_REF(TYPE)\ - TYPE && \ -// - -/// @cond - -#define BOOST_CATCH_CONST_RLVALUE(TYPE)\ - const TYPE & \ -// - -/// @endcond - -INTERPROCESS_NAMESPACE_END -} //namespace boost { - -#endif //BOOST_NO_RVALUE_REFERENCES - -namespace boost { -INTERPROCESS_NAMESPACE_BEGIN - -////////////////////////////////////////////////////////////////////////////// -// -// move_iterator -// -////////////////////////////////////////////////////////////////////////////// - -//! Class template move_iterator is an iterator adaptor with the same behavior -//! as the underlying iterator except that its dereference operator implicitly -//! converts the value returned by the underlying iterator's dereference operator -//! to an rvalue reference. Some generic algorithms can be called with move -//! iterators to replace copying with moving. -template -class move_iterator -{ - public: - typedef It iterator_type; - typedef typename std::iterator_traits::value_type value_type; - #if !defined(BOOST_NO_RVALUE_REFERENCES) || defined(BOOST_MOVE_DOXYGEN_INVOKED) - typedef value_type && reference; - #else - typedef typename ::boost::mpl::if_ - < ::BOOST_MOVE_NAMESPACE::is_movable - , ::BOOST_MOVE_NAMESPACE::rv& - , value_type & >::type reference; - #endif - typedef It pointer; - typedef typename std::iterator_traits::difference_type difference_type; - typedef typename std::iterator_traits::iterator_category iterator_category; - - move_iterator() - {} - - explicit move_iterator(It i) - : m_it(i) - {} - - template - move_iterator(const move_iterator& u) - : m_it(u.base()) - {} - - iterator_type base() const - { return m_it; } - - reference operator*() const - { - #if defined(BOOST_NO_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) - return *m_it; - #else - return ::BOOST_MOVE_NAMESPACE::move(*m_it); - #endif - } - - pointer operator->() const - { return m_it; } - - move_iterator& operator++() - { ++m_it; return *this; } - - move_iterator operator++(int) - { move_iterator tmp(*this); ++(*this); return tmp; } - - move_iterator& operator--() - { --m_it; return *this; } - - move_iterator operator--(int) - { move_iterator tmp(*this); --(*this); return tmp; } - - move_iterator operator+ (difference_type n) const - { return move_iterator(m_it + n); } - - move_iterator& operator+=(difference_type n) - { m_it += n; return *this; } - - move_iterator operator- (difference_type n) const - { return move_iterator(m_it - n); } - - move_iterator& operator-=(difference_type n) - { m_it -= n; return *this; } - - reference operator[](difference_type n) const - { - #if defined(BOOST_NO_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) - return m_it[n]; - #else - return ::BOOST_MOVE_NAMESPACE::move(m_it[n]); - #endif - } - - friend bool operator==(const move_iterator& x, const move_iterator& y) - { return x.base() == y.base(); } - - friend bool operator!=(const move_iterator& x, const move_iterator& y) - { return x.base() != y.base(); } - - friend bool operator< (const move_iterator& x, const move_iterator& y) - { return x.base() < y.base(); } - - friend bool operator<=(const move_iterator& x, const move_iterator& y) - { return x.base() <= y.base(); } - - friend bool operator> (const move_iterator& x, const move_iterator& y) - { return x.base() > y.base(); } - - friend bool operator>=(const move_iterator& x, const move_iterator& y) - { return x.base() >= y.base(); } - - friend difference_type operator-(const move_iterator& x, const move_iterator& y) - { return x.base() - y.base(); } - - friend move_iterator operator+(difference_type n, const move_iterator& x) - { return move_iterator(x.base() + n); } - - private: - It m_it; -}; - - -//is_move_iterator -namespace move_detail { - -template -struct is_move_iterator - : public ::boost::mpl::bool_ -{ -}; - -template -struct is_move_iterator< ::BOOST_MOVE_NAMESPACE::move_iterator > - : public ::boost::mpl::bool_ -{ -}; - -} //namespace move_detail { - -////////////////////////////////////////////////////////////////////////////// -// -// move_iterator -// -////////////////////////////////////////////////////////////////////////////// - -//! -//! Returns: move_iterator(i). -template -move_iterator make_move_iterator(const It &it) -{ return move_iterator(it); } - -////////////////////////////////////////////////////////////////////////////// -// -// back_move_insert_iterator -// -////////////////////////////////////////////////////////////////////////////// - - -//! A move insert iterator that move constructs elements at the -//! back of a container -template // C models Container -class back_move_insert_iterator - : public std::iterator -{ - C* container_m; - - public: - typedef C container_type; - - explicit back_move_insert_iterator(C& x) : container_m(&x) { } - - back_move_insert_iterator& operator=(typename C::reference x) - { container_m->push_back(BOOST_MOVE_NAMESPACE::move(x)); return *this; } - - back_move_insert_iterator& operator*() { return *this; } - back_move_insert_iterator& operator++() { return *this; } - back_move_insert_iterator& operator++(int) { return *this; } -}; - -//! -//! Returns: back_move_insert_iterator(x). -template // C models Container -inline back_move_insert_iterator back_move_inserter(C& x) -{ - return back_move_insert_iterator(x); -} - -////////////////////////////////////////////////////////////////////////////// -// -// front_move_insert_iterator -// -////////////////////////////////////////////////////////////////////////////// - -//! A move insert iterator that move constructs elements int the -//! front of a container -template // C models Container -class front_move_insert_iterator - : public std::iterator -{ - C* container_m; - -public: - typedef C container_type; - - explicit front_move_insert_iterator(C& x) : container_m(&x) { } - - front_move_insert_iterator& operator=(typename C::reference x) - { container_m->push_front(BOOST_MOVE_NAMESPACE::move(x)); return *this; } - - front_move_insert_iterator& operator*() { return *this; } - front_move_insert_iterator& operator++() { return *this; } - front_move_insert_iterator& operator++(int) { return *this; } -}; - -//! -//! Returns: front_move_insert_iterator(x). -template // C models Container -inline front_move_insert_iterator front_move_inserter(C& x) -{ - return front_move_insert_iterator(x); -} - -////////////////////////////////////////////////////////////////////////////// -// -// insert_move_iterator -// -////////////////////////////////////////////////////////////////////////////// -template // C models Container -class move_insert_iterator - : public std::iterator -{ - C* container_m; - typename C::iterator pos_; - - public: - typedef C container_type; - - explicit move_insert_iterator(C& x, typename C::iterator pos) - : container_m(&x), pos_(pos) - {} - - move_insert_iterator& operator=(typename C::reference x) - { - pos_ = container_m->insert(pos_, ::BOOST_MOVE_NAMESPACE::move(x)); - ++pos_; - return *this; - } - - move_insert_iterator& operator*() { return *this; } - move_insert_iterator& operator++() { return *this; } - move_insert_iterator& operator++(int) { return *this; } -}; - -//! -//! Returns: move_insert_iterator(x, it). -template // C models Container -inline move_insert_iterator move_inserter(C& x, typename C::iterator it) -{ - return move_insert_iterator(x, it); -} - -////////////////////////////////////////////////////////////////////////////// -// -// move -// -////////////////////////////////////////////////////////////////////////////// - - -//! Effects: Moves elements in the range [first,last) into the range [result,result + (last - -//! first)) starting from first and proceeding to last. For each non-negative integer n < (last-first), -//! performs *(result + n) = ::boost::move (*(first + n)). -//! -//! Effects: result + (last - first). -//! -//! Requires: result shall not be in the range [first,last). -//! -//! Complexity: Exactly last - first move assignments. -template // O models OutputIterator -O move(I f, I l, O result) -{ - while (f != l) { - *result = ::BOOST_MOVE_NAMESPACE::move(*f); - ++f; ++result; - } - return result; -} - -////////////////////////////////////////////////////////////////////////////// -// -// move_backward -// -////////////////////////////////////////////////////////////////////////////// - -//! Effects: Moves elements in the range [first,last) into the range -//! [result - (last-first),result) starting from last - 1 and proceeding to -//! first. For each positive integer n <= (last - first), -//! performs *(result - n) = ::boost::move(*(last - n)). -//! -//! Requires: result shall not be in the range [first,last). -//! -//! Returns: result - (last - first). -//! -//! Complexity: Exactly last - first assignments. -template // O models BidirectionalIterator -O move_backward(I f, I l, O result) -{ - while (f != l) { - --l; --result; - *result = ::BOOST_MOVE_NAMESPACE::move(*l); - } - return result; -} - -////////////////////////////////////////////////////////////////////////////// -// -// uninitialized_move -// -////////////////////////////////////////////////////////////////////////////// - -//! Effects: -//! \code -//! for (; first != last; ++result, ++first) -//! new (static_cast(&*result)) -//! typename iterator_traits::value_type(boost::move(*first)); -//! \endcode -//! -//! Returns: result -template - // F models ForwardIterator -F uninitialized_move(I f, I l, F r - /// @cond - ,typename enable_if::value_type> >::type* = 0 - /// @endcond - ) -{ - typedef typename std::iterator_traits::value_type input_value_type; - while (f != l) { - ::new(static_cast(&*r)) input_value_type(BOOST_MOVE_NAMESPACE::move(*f)); - ++f; ++r; - } - return r; -} - -/// @cond - -template - // F models ForwardIterator -F uninitialized_move(I f, I l, F r, - typename disable_if::value_type> >::type* = 0) -{ - return std::uninitialized_copy(f, l, r); -} - -////////////////////////////////////////////////////////////////////////////// -// -// uninitialized_copy_or_move -// -////////////////////////////////////////////////////////////////////////////// - -namespace move_detail { - -template - // F models ForwardIterator -F uninitialized_move_move_iterator(I f, I l, F r, - typename enable_if< is_movable >::type* = 0) -{ - return ::BOOST_MOVE_NAMESPACE::uninitialized_move(f, l, r); -} - -template - // F models ForwardIterator -F uninitialized_move_move_iterator(I f, I l, F r, - typename disable_if< is_movable >::type* = 0) -{ - return std::uninitialized_copy(f.base(), l.base(), r); -} - -} //namespace move_detail { - -template - // F models ForwardIterator -F uninitialized_copy_or_move(I f, I l, F r, - typename enable_if< move_detail::is_move_iterator >::type* = 0) -{ - return ::BOOST_MOVE_NAMESPACE::move_detail::uninitialized_move_move_iterator(f, l, r); -} - -////////////////////////////////////////////////////////////////////////////// -// -// copy_or_move -// -////////////////////////////////////////////////////////////////////////////// - -namespace move_detail { - -template - // F models ForwardIterator -F move_move_iterator(I f, I l, F r, - typename enable_if< is_movable >::type* = 0) -{ - return ::BOOST_MOVE_NAMESPACE::move(f, l, r); -} - -template - // F models ForwardIterator -F move_move_iterator(I f, I l, F r, - typename disable_if< is_movable >::type* = 0) -{ - return std::copy(f.base(), l.base(), r); -} - - -} //namespace move_detail { - -template - // F models ForwardIterator -F copy_or_move(I f, I l, F r, - typename enable_if< move_detail::is_move_iterator >::type* = 0) -{ - return ::BOOST_MOVE_NAMESPACE::move_detail::move_move_iterator(f, l, r); -} - -/// @endcond - -//! Effects: -//! \code -//! for (; first != last; ++result, ++first) -//! new (static_cast(&*result)) -//! typename iterator_traits::value_type(*first); -//! \endcode -//! -//! Returns: result -//! -//! Note: This function is provided because -//! std::uninitialized_copy from some STL implementations -//! is not compatible with move_iterator -template - // F models ForwardIterator -F uninitialized_copy_or_move(I f, I l, F r - /// @cond - ,typename disable_if< move_detail::is_move_iterator >::type* = 0 - /// @endcond - ) -{ - return std::uninitialized_copy(f, l, r); -} - -//! Effects: -//! \code -//! for (; first != last; ++result, ++first) -//! *result = *first; -//! \endcode -//! -//! Returns: result -//! -//! Note: This function is provided because -//! std::uninitialized_copy from some STL implementations -//! is not compatible with move_iterator -template - // F models ForwardIterator -F copy_or_move(I f, I l, F r - /// @cond - ,typename disable_if< move_detail::is_move_iterator >::type* = 0 - /// @endcond - ) -{ - return std::copy(f, l, r); -} - -//! If this trait yields to true -//! (has_trivial_destructor_after_move <T>::value == true) -//! means that if T is used as argument of a move construction/assignment, -//! there is no need to call T's destructor. -//! This optimization tipically is used to improve containers' performance. -//! -//! By default this trait is true if the type has trivial destructor, -//! every class should specialize this trait if it wants to improve performance -//! when inserted in containers. -template -struct has_trivial_destructor_after_move - : public ::boost::has_trivial_destructor -{}; - -#ifndef BOOST_MOVE_DOXYGEN_INVOKED - -#ifdef BOOST_MOVE_IN_BOOST_INTERPROCESS_NAMESPACE - -#define BOOST_INTERPROCESS_ENABLE_MOVE_EMULATION(TYPE) BOOST_ENABLE_MOVE_EMULATION(TYPE) -#define BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(TYPE) BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE) -#define BOOST_INTERPROCESS_COPYABLE_AND_MOVABLE(TYPE) BOOST_COPYABLE_AND_MOVABLE(TYPE) -#define BOOST_INTERPROCESS_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) -#define BOOST_INTERPROCESS_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) -#define BOOST_INTERPROCESS_RV_REF(TYPE) BOOST_RV_REF(TYPE) -#define BOOST_INTERPROCESS_COPY_ASSIGN_REF(TYPE) BOOST_COPY_ASSIGN_REF(TYPE) -#define BOOST_INTERPROCESS_COPY_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) BOOST_COPY_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) -#define BOOST_INTERPROCESS_COPY_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) BOOST_COPY_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) -#define BOOST_INTERPROCESS_FWD_REF(TYPE) BOOST_FWD_REF(TYPE) -#define BOOST_INTERPROCESS_CATCH_CONST_RLVALUE(TYPE) BOOST_CATCH_CONST_RLVALUE(TYPE) - -#endif - -#define BOOST_MOVE_MACRO_ENABLE_MOVE_EMULATION(TYPE) BOOST_ENABLE_MOVE_EMULATION(TYPE) -#define BOOST_MOVE_MACRO_MOVABLE_BUT_NOT_COPYABLE(TYPE) BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE) -#define BOOST_MOVE_MACRO_COPYABLE_AND_MOVABLE(TYPE) BOOST_COPYABLE_AND_MOVABLE(TYPE) -#define BOOST_MOVE_MACRO_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) -#define BOOST_MOVE_MACRO_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) -#define BOOST_MOVE_MACRO_RV_REF(TYPE) BOOST_RV_REF(TYPE) -#define BOOST_MOVE_MACRO_COPY_ASSIGN_REF(TYPE) BOOST_COPY_ASSIGN_REF(TYPE) -#define BOOST_MOVE_MACRO_COPY_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) BOOST_COPY_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2) -#define BOOST_MOVE_MACRO_COPY_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) BOOST_COPY_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3) -#define BOOST_MOVE_MACRO_FWD_REF(TYPE) BOOST_FWD_REF(TYPE) -#define BOOST_MOVE_MACRO_CATCH_CONST_RLVALUE(TYPE) BOOST_CATCH_CONST_RLVALUE(TYPE) - -#endif //BOOST_MOVE_DOXYGEN_INVOKED - -INTERPROCESS_NAMESPACE_END -} //namespace boost { - -#endif //#ifndef BOOST_MOVE_HPP +#endif //#ifndef BOOST_INTERPROCESS_DETAIL_MOVE_HPP diff --git a/3party/boost/boost/interprocess/detail/mpl.hpp b/3party/boost/boost/interprocess/detail/mpl.hpp index 93b0fe12cb..e2c7f52d24 100644 --- a/3party/boost/boost/interprocess/detail/mpl.hpp +++ b/3party/boost/boost/interprocess/detail/mpl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2011. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -20,8 +20,8 @@ #include namespace boost { -namespace interprocess { -namespace detail { +namespace interprocess { +namespace ipcdetail { template struct integral_constant @@ -71,7 +71,7 @@ class is_convertible static false_t dispatch(...); static T trigger(); public: - enum { value = sizeof(dispatch(trigger())) == sizeof(true_t) }; + static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t); }; template< @@ -105,24 +105,24 @@ struct if_ template -struct select1st -// : public std::unary_function +struct select1st +// : public std::unary_function { template - const typename Pair::first_type& operator()(const OtherPair& x) const + const typename Pair::first_type& operator()(const OtherPair& x) const { return x.first; } - const typename Pair::first_type& operator()(const typename Pair::first_type& x) const + const typename Pair::first_type& operator()(const typename Pair::first_type& x) const { return x; } }; // identity is an extension: it is not part of the standard. template -struct identity -// : public std::unary_function +struct identity +// : public std::unary_function { typedef T type; - const T& operator()(const T& x) const + const T& operator()(const T& x) const { return x; } }; @@ -144,8 +144,8 @@ struct ls_zeros<1> static const std::size_t value = 0; }; -} //namespace detail { -} //namespace interprocess { +} //namespace ipcdetail { +} //namespace interprocess { } //namespace boost { #endif //#ifndef BOOST_INTERPROCESS_DETAIL_MPL_HPP diff --git a/3party/boost/boost/interprocess/detail/multi_segment_services.hpp b/3party/boost/boost/interprocess/detail/multi_segment_services.hpp index 514289b053..d1451d3379 100644 --- a/3party/boost/boost/interprocess/detail/multi_segment_services.hpp +++ b/3party/boost/boost/interprocess/detail/multi_segment_services.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -20,7 +20,7 @@ /*!\file - Describes a named shared memory allocation user class. + Describes a named shared memory allocation user class. */ namespace boost { diff --git a/3party/boost/boost/interprocess/detail/named_proxy.hpp b/3party/boost/boost/interprocess/detail/named_proxy.hpp index 67534923d9..c2aafed9ac 100644 --- a/3party/boost/boost/interprocess/detail/named_proxy.hpp +++ b/3party/boost/boost/interprocess/detail/named_proxy.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -24,9 +24,9 @@ #include #ifndef BOOST_INTERPROCESS_PERFECT_FORWARDING -#include +#include #else -#include +#include #include #endif //#ifdef BOOST_INTERPROCESS_PERFECT_FORWARDING @@ -34,15 +34,15 @@ //!Describes a proxy class that implements named allocation syntax. namespace boost { -namespace interprocess { -namespace detail { +namespace interprocess { +namespace ipcdetail { #ifdef BOOST_INTERPROCESS_PERFECT_FORWARDING template struct CtorNArg : public placement_destroy { - typedef detail::bool_ IsIterator; + typedef bool_ IsIterator; typedef CtorNArg self_t; typedef typename build_number_seq::type index_tuple_t; @@ -71,33 +71,33 @@ struct CtorNArg : public placement_destroy private: template - void construct(void *mem, detail::true_, const index_tuple&) - { new((void*)mem)T(*boost::interprocess::forward(get(args_))...); } + void construct(void *mem, true_, const index_tuple&) + { new((void*)mem)T(*boost::forward(get(args_))...); } template - void construct(void *mem, detail::false_, const index_tuple&) - { new((void*)mem)T(boost::interprocess::forward(get(args_))...); } + void construct(void *mem, false_, const index_tuple&) + { new((void*)mem)T(boost::forward(get(args_))...); } template - void do_increment(detail::true_, const index_tuple&) + void do_increment(true_, const index_tuple&) { this->expansion_helper(++get(args_)...); } - + template void expansion_helper(ExpansionArgs &&...) {} template - void do_increment(detail::false_, const index_tuple&) + void do_increment(false_, const index_tuple&) {} tuple args_; -}; +}; //!Describes a proxy class that implements named //!allocation syntax. -template +template < class SegmentManager //segment manager to construct the object , class T //type of object to build , bool is_iterator //passing parameters are normal object or iterators? @@ -119,10 +119,10 @@ class named_proxy template T *operator()(Args &&...args) const - { + { CtorNArg &&ctor_obj = CtorNArg - (boost::interprocess::forward(args)...); - return mp_mngr->template + (boost::forward(args)...); + return mp_mngr->template generic_construct(mp_name, m_num, m_find, m_dothrow, ctor_obj); } @@ -163,13 +163,13 @@ struct Ctor0Arg : public placement_destroy // struct Ctor2Arg // : public placement_destroy // { -// typedef detail::bool_ IsIterator; +// typedef bool_ IsIterator; // typedef Ctor2Arg self_t; // -// void do_increment(detail::false_) +// void do_increment(false_) // { ++m_p1; ++m_p2; } // -// void do_increment(detail::true_){} +// void do_increment(true_){} // // self_t& operator++() // { @@ -197,10 +197,10 @@ struct Ctor0Arg : public placement_destroy // } // // private: -// void construct(void *mem, detail::true_) +// void construct(void *mem, true_) // { new((void*)mem)T(*m_p1, *m_p2); } -// -// void construct(void *mem, detail::false_) +// +// void construct(void *mem, false_) // { new((void*)mem)T(m_p1, m_p2); } // // P1 &m_p1; P2 &m_p2; @@ -218,13 +218,13 @@ struct Ctor0Arg : public placement_destroy struct BOOST_PP_CAT(BOOST_PP_CAT(Ctor, n), Arg) \ : public placement_destroy \ { \ - typedef detail::bool_ IsIterator; \ + typedef bool_ IsIterator; \ typedef BOOST_PP_CAT(BOOST_PP_CAT(Ctor, n), Arg) self_t; \ \ - void do_increment(detail::true_) \ - { BOOST_PP_ENUM(n, BOOST_INTERPROCESS_AUX_PARAM_INC, _); } \ + void do_increment(true_) \ + { BOOST_PP_ENUM(n, BOOST_INTERPROCESS_PP_PARAM_INC, _); } \ \ - void do_increment(detail::false_){} \ + void do_increment(false_){} \ \ self_t& operator++() \ { \ @@ -236,7 +236,7 @@ struct Ctor0Arg : public placement_destroy \ BOOST_PP_CAT(BOOST_PP_CAT(Ctor, n), Arg) \ ( BOOST_PP_ENUM(n, BOOST_INTERPROCESS_PP_PARAM_LIST, _) ) \ - : BOOST_PP_ENUM(n, BOOST_INTERPROCESS_AUX_PARAM_INIT, _) {} \ + : BOOST_PP_ENUM(n, BOOST_INTERPROCESS_PP_PARAM_INIT, _) {} \ \ virtual void construct_n(void *mem \ , std::size_t num \ @@ -250,19 +250,19 @@ struct Ctor0Arg : public placement_destroy } \ \ private: \ - void construct(void *mem, detail::true_) \ + void construct(void *mem, true_) \ { \ new((void*)mem) T \ (BOOST_PP_ENUM(n, BOOST_INTERPROCESS_PP_MEMBER_IT_FORWARD, _)); \ } \ \ - void construct(void *mem, detail::false_) \ + void construct(void *mem, false_) \ { \ new((void*)mem) T \ (BOOST_PP_ENUM(n, BOOST_INTERPROCESS_PP_MEMBER_FORWARD, _)); \ } \ \ - BOOST_PP_REPEAT(n, BOOST_INTERPROCESS_AUX_PARAM_DEFINE, _) \ + BOOST_PP_REPEAT(n, BOOST_INTERPROCESS_PP_PARAM_DEFINE, _) \ }; \ //! #define BOOST_PP_LOCAL_LIMITS (1, BOOST_INTERPROCESS_MAX_CONSTRUCTOR_PARAMETERS) @@ -270,7 +270,7 @@ struct Ctor0Arg : public placement_destroy //!Describes a proxy class that implements named //!allocation syntax. -template +template < class SegmentManager //segment manager to construct the object , class T //type of object to build , bool is_iterator //passing parameters are normal object or iterators? @@ -293,9 +293,9 @@ class named_proxy //!makes a named allocation and calls the //!default constructor T *operator()() const - { + { Ctor0Arg ctor_obj; - return mp_mngr->template + return mp_mngr->template generic_construct(mp_name, m_num, m_find, m_dothrow, ctor_obj); } //! @@ -322,7 +322,7 @@ class named_proxy //////////////////////////////////////////////////////////////////////// // // template - // T *operator()(P1 &p1, P2 &p2) const + // T *operator()(P1 &p1, P2 &p2) const // { // typedef Ctor2Arg // @@ -342,7 +342,7 @@ class named_proxy #endif //#ifdef BOOST_INTERPROCESS_PERFECT_FORWARDING -}}} //namespace boost { namespace interprocess { namespace detail { +}}} //namespace boost { namespace interprocess { namespace ipcdetail { #include diff --git a/3party/boost/boost/interprocess/detail/os_file_functions.hpp b/3party/boost/boost/interprocess/detail/os_file_functions.hpp index 3cc975535a..08decd9bc4 100644 --- a/3party/boost/boost/interprocess/detail/os_file_functions.hpp +++ b/3party/boost/boost/interprocess/detail/os_file_functions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -17,6 +17,8 @@ #include #include +#include +#include #if (defined BOOST_INTERPROCESS_WINDOWS) # include @@ -30,7 +32,7 @@ # include # include # if 0 -# include +# include # endif # else # error Unknown platform @@ -56,7 +58,7 @@ typedef enum { read_only = winapi::generic_read , read_write = winapi::generic_read | winapi::generic_write , copy_on_write , read_private - , invalid_mode = 0xffff + , invalid_mode = 0xffff } mode_t; typedef enum { file_begin = winapi::file_begin @@ -64,7 +66,7 @@ typedef enum { file_begin = winapi::file_begin , file_current = winapi::file_current } file_pos_t; -namespace detail{ +namespace ipcdetail{ inline mapping_handle_t mapping_handle_from_file_handle(file_handle_t hnd) { @@ -94,28 +96,28 @@ inline const char *get_temporary_path() inline file_handle_t create_new_file (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) -{ +{ unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; return winapi::create_file ( name, (unsigned int)mode, winapi::create_new, attr - , (winapi::interprocess_security_attributes*)perm.get_permissions()); + , (winapi::interprocess_security_attributes*)perm.get_permissions()); } inline file_handle_t create_or_open_file (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) -{ +{ unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; return winapi::create_file ( name, (unsigned int)mode, winapi::open_always, attr - , (winapi::interprocess_security_attributes*)perm.get_permissions()); + , (winapi::interprocess_security_attributes*)perm.get_permissions()); } inline file_handle_t open_existing_file (const char *name, mode_t mode, bool temporary = false) -{ +{ unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; return winapi::create_file - (name, (unsigned int)mode, winapi::open_existing, attr, 0); + (name, (unsigned int)mode, winapi::open_existing, attr, 0); } inline bool delete_file(const char *name) @@ -127,10 +129,18 @@ inline bool truncate_file (file_handle_t hnd, std::size_t size) if(!winapi::get_file_size(hnd, filesize)) return false; - if(size > (unsigned long long)filesize){ + const offset_t max_filesize = (std::numeric_limits::max)(); + //Avoid unused variable warnings in 32 bit systems + (void)max_filesize; + if( sizeof(std::size_t) >= sizeof(offset_t) && size > std::size_t(max_filesize) ){ + winapi::set_last_error(winapi::error_file_too_large); + return false; + } + + if(offset_t(size) > filesize){ if(!winapi::set_file_pointer_ex(hnd, filesize, 0, winapi::file_begin)){ return false; - } + } //We will write zeros in the end of the file //since set_end_of_file does not guarantee this for(std::size_t remaining = size - filesize, write_size = 0 @@ -167,7 +177,7 @@ inline bool get_file_pointer(file_handle_t hnd, offset_t &off) { return winapi::set_file_pointer_ex(hnd, 0, &off, winapi::file_current); } inline bool write_file(file_handle_t hnd, const void *data, std::size_t numdata) -{ +{ unsigned long written; return 0 != winapi::write_file(hnd, data, (unsigned long)numdata, &written, 0); } @@ -179,9 +189,9 @@ inline bool close_file(file_handle_t hnd) { return 0 != winapi::close_handle(hnd); } inline bool acquire_file_lock(file_handle_t hnd) -{ +{ static winapi::interprocess_overlapped overlapped; - const unsigned long len = 0xffffffff; + const unsigned long len = ~((unsigned long)(0u)); // winapi::interprocess_overlapped overlapped; // std::memset(&overlapped, 0, sizeof(overlapped)); return winapi::lock_file_ex @@ -189,44 +199,44 @@ inline bool acquire_file_lock(file_handle_t hnd) } inline bool try_acquire_file_lock(file_handle_t hnd, bool &acquired) -{ - const unsigned long len = 0xffffffff; +{ + const unsigned long len = ~((unsigned long)(0u)); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); if(!winapi::lock_file_ex - (hnd, winapi::lockfile_exclusive_lock | winapi::lockfile_fail_immediately, + (hnd, winapi::lockfile_exclusive_lock | winapi::lockfile_fail_immediately, 0, len, len, &overlapped)){ - return winapi::get_last_error() == winapi::error_lock_violation ? + return winapi::get_last_error() == winapi::error_lock_violation ? acquired = false, true : false; - + } return (acquired = true); } inline bool release_file_lock(file_handle_t hnd) -{ - const unsigned long len = 0xffffffff; +{ + const unsigned long len = ~((unsigned long)(0u)); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); return winapi::unlock_file_ex(hnd, 0, len, len, &overlapped); } inline bool acquire_file_lock_sharable(file_handle_t hnd) -{ - const unsigned long len = 0xffffffff; +{ + const unsigned long len = ~((unsigned long)(0u)); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); return winapi::lock_file_ex(hnd, 0, 0, len, len, &overlapped); } inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) -{ - const unsigned long len = 0xffffffff; +{ + const unsigned long len = ~((unsigned long)(0u)); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); if(!winapi::lock_file_ex (hnd, winapi::lockfile_fail_immediately, 0, len, len, &overlapped)){ - return winapi::get_last_error() == winapi::error_lock_violation ? + return winapi::get_last_error() == winapi::error_lock_violation ? acquired = false, true : false; } return (acquired = true); @@ -357,7 +367,7 @@ typedef enum { read_only = O_RDONLY , read_write = O_RDWR , copy_on_write , read_private - , invalid_mode = 0xffff + , invalid_mode = 0xffff } mode_t; typedef enum { file_begin = SEEK_SET @@ -365,7 +375,7 @@ typedef enum { file_begin = SEEK_SET , file_current = SEEK_CUR } file_pos_t; -namespace detail{ +namespace ipcdetail{ inline mapping_handle_t mapping_handle_from_file_handle(file_handle_t hnd) { @@ -396,7 +406,7 @@ inline const char *get_temporary_path() inline file_handle_t create_new_file (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) -{ +{ (void)temporary; int ret = ::open(name, ((int)mode) | O_EXCL | O_CREAT, perm.get_permissions()); if(ret >= 0){ @@ -429,7 +439,7 @@ inline file_handle_t create_or_open_file inline file_handle_t open_existing_file (const char *name, mode_t mode, bool temporary = false) -{ +{ (void)temporary; return ::open(name, (int)mode); } @@ -438,10 +448,18 @@ inline bool delete_file(const char *name) { return ::unlink(name) == 0; } inline bool truncate_file (file_handle_t hnd, std::size_t size) -{ return 0 == ::ftruncate(hnd, size); } +{ + if(sizeof(off_t) == sizeof(std::size_t)){ + if(size > ((~std::size_t(0)) >> 1)){ + errno = EINVAL; + return false; + } + } + return 0 == ::ftruncate(hnd, off_t(size)); +} inline bool get_file_size(file_handle_t hnd, offset_t &size) -{ +{ struct stat data; bool ret = 0 == ::fstat(hnd, &data); if(ret){ @@ -454,7 +472,7 @@ inline bool set_file_pointer(file_handle_t hnd, offset_t off, file_pos_t pos) { return ((off_t)(-1)) != ::lseek(hnd, off, (int)pos); } inline bool get_file_pointer(file_handle_t hnd, offset_t &off) -{ +{ off = ::lseek(hnd, 0, SEEK_CUR); return off != ((off_t)-1); } @@ -504,7 +522,7 @@ inline bool release_file_lock(file_handle_t hnd) } inline bool acquire_file_lock_sharable(file_handle_t hnd) -{ +{ struct ::flock lock; lock.l_type = F_RDLCK; lock.l_whence = SEEK_SET; @@ -514,7 +532,7 @@ inline bool acquire_file_lock_sharable(file_handle_t hnd) } inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) -{ +{ struct flock lock; lock.l_type = F_RDLCK; lock.l_whence = SEEK_SET; @@ -522,7 +540,7 @@ inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) lock.l_len = 0; int ret = ::fcntl(hnd, F_SETLK, &lock); if(ret == -1){ - return (errno == EAGAIN || errno == EACCES) ? + return (errno == EAGAIN || errno == EACCES) ? acquired = false, true : false; } return (acquired = true); @@ -583,7 +601,7 @@ inline bool delete_subdirectories_recursive || (de->d_name[1] == '.' && de->d_name[2] == '\0' )) ){ continue; } - if(dont_delete_this && std::strcmp(dont_delete_this, de->d_name) == 0){ + if(dont_delete_this && std::strcmp(dont_delete_this, de->d_name) == 0){ continue; } fn = refcstrRootDirectory; @@ -669,7 +687,7 @@ inline bool open_or_create_directory(const char *dir_name) } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/detail/os_thread_functions.hpp b/3party/boost/boost/interprocess/detail/os_thread_functions.hpp index 5d8ebb0487..8d769fc4e9 100644 --- a/3party/boost/boost/interprocess/detail/os_thread_functions.hpp +++ b/3party/boost/boost/interprocess/detail/os_thread_functions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -23,6 +23,7 @@ # include # include # include +# include # else # error Unknown platform # endif @@ -30,7 +31,7 @@ namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ #if (defined BOOST_INTERPROCESS_WINDOWS) @@ -58,6 +59,9 @@ inline bool equal_thread_id(OS_thread_id_t id1, OS_thread_id_t id2) inline void thread_yield() { winapi::sched_yield(); } +inline void thread_sleep(unsigned int ms) +{ winapi::Sleep(ms); } + //systemwide thread inline OS_systemwide_thread_id_t get_current_systemwide_thread_id() { @@ -100,7 +104,7 @@ typedef pthread_t OS_thread_id_t; typedef pid_t OS_process_id_t; struct OS_systemwide_thread_id_t -{ +{ OS_systemwide_thread_id_t() : pid(), tid() {} @@ -149,7 +153,7 @@ inline OS_thread_id_t get_current_thread_id() { return ::pthread_self(); } inline OS_thread_id_t get_invalid_thread_id() -{ +{ static pthread_t invalid_id; return invalid_id; } @@ -160,6 +164,12 @@ inline bool equal_thread_id(OS_thread_id_t id1, OS_thread_id_t id2) inline void thread_yield() { ::sched_yield(); } +inline void thread_sleep(unsigned int ms) +{ + const struct timespec rqt = { ms/1000u, (ms%1000u)*1000000u }; + ::nanosleep(&rqt, 0); +} + //systemwide thread inline OS_systemwide_thread_id_t get_current_systemwide_thread_id() { @@ -192,7 +202,7 @@ inline void get_pid_str(pid_str_t &pid_str, OS_process_id_t pid) inline void get_pid_str(pid_str_t &pid_str) { get_pid_str(pid_str, get_current_process_id()); } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/detail/pointer_type.hpp b/3party/boost/boost/interprocess/detail/pointer_type.hpp index ec0801b317..549b23fa6c 100644 --- a/3party/boost/boost/interprocess/detail/pointer_type.hpp +++ b/3party/boost/boost/interprocess/detail/pointer_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2011. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. @@ -24,7 +24,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { struct two {char _[2];}; @@ -61,11 +61,11 @@ template struct pointer_type { typedef typename pointer_type_imp::pointer_type::type>::type type; + typename remove_reference::type>::type type; }; -} //namespace detail { -} //namespace interprocess { +} //namespace ipcdetail { +} //namespace interprocess { } //namespace boost { #include diff --git a/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp new file mode 100644 index 0000000000..eb2a13e104 --- /dev/null +++ b/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp @@ -0,0 +1,356 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2009-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_PORTABLE_INTERMODULE_SINGLETON_HPP +#define BOOST_INTERPROCESS_PORTABLE_INTERMODULE_SINGLETON_HPP + +#if defined(_MSC_VER)&&(_MSC_VER>=1200) +#pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +typedef basic_managed_global_memory managed_global_memory; + +namespace intermodule_singleton_helpers { + +static void create_tmp_subdir_and_get_pid_based_filepath + (const char *subdir_name, const char *file_prefix, OS_process_id_t pid, std::string &s, bool creation_time = false) +{ + //Let's create a lock file for each process gmem that will mark if + //the process is alive or not + create_tmp_and_clean_old(s); + s += "/"; + s += subdir_name; + if(!open_or_create_directory(s.c_str())){ + throw interprocess_exception(error_info(system_error_code())); + } + s += "/"; + s += file_prefix; + if(creation_time){ + std::string sstamp; + get_pid_creation_time_str(sstamp); + s += sstamp; + } + else{ + pid_str_t pid_str; + get_pid_str(pid_str, pid); + s += pid_str; + } +} + +static bool check_if_filename_complies_with_pid + (const char *filename, const char *prefix, OS_process_id_t pid, std::string &file_suffix, bool creation_time = false) +{ + //Check if filename complies with lock file name pattern + std::string fname(filename); + std::string fprefix(prefix); + if(fname.size() <= fprefix.size()){ + return false; + } + fname.resize(fprefix.size()); + if(fname != fprefix){ + return false; + } + + //If not our lock file, delete it if we can lock it + fname = filename; + fname.erase(0, fprefix.size()); + pid_str_t pid_str; + get_pid_str(pid_str, pid); + file_suffix = pid_str; + if(creation_time){ + std::size_t p = fname.find('_'); + if (p == std::string::npos){ + return false; + } + std::string save_suffix(fname); + fname.erase(p); + fname.swap(file_suffix); + bool ret = (file_suffix == fname); + file_suffix.swap(save_suffix); + return ret; + } + else{ + fname.swap(file_suffix); + return (file_suffix == fname); + } +} + +template<> +struct thread_safe_global_map_dependant +{ + private: + static const int GMemMarkToBeRemoved = -1; + static const int GMemNotPresent = -2; + + static const char *get_lock_file_subdir_name() + { return "gmem"; } + + static const char *get_lock_file_base_name() + { return "lck"; } + + static void create_and_get_singleton_lock_file_path(std::string &s) + { + create_tmp_subdir_and_get_pid_based_filepath + (get_lock_file_subdir_name(), get_lock_file_base_name(), get_current_process_id(), s, true); + } + + struct gmem_erase_func + { + gmem_erase_func(const char *shm_name, const char *singleton_lock_file_path, managed_global_memory & shm) + :shm_name_(shm_name), singleton_lock_file_path_(singleton_lock_file_path), shm_(shm) + {} + + void operator()() + { + locking_file_serial_id *pserial_id = shm_.find("lock_file_fd").first; + if(pserial_id){ + pserial_id->fd = GMemMarkToBeRemoved; + } + delete_file(singleton_lock_file_path_); + shared_memory_object::remove(shm_name_); + } + + const char * const shm_name_; + const char * const singleton_lock_file_path_; + managed_global_memory & shm_; + }; + + //This function applies shared memory erasure logic based on the passed lock file. + static void apply_gmem_erase_logic(const char *filepath, const char *filename) + { + int fd = GMemMarkToBeRemoved; + try{ + std::string str; + //If the filename is current process lock file, then avoid it + if(check_if_filename_complies_with_pid + (filename, get_lock_file_base_name(), get_current_process_id(), str, true)){ + return; + } + //Open and lock the other process' lock file + fd = try_open_and_lock_file(filepath); + if(fd < 0){ + return; + } + //If done, then the process is dead so take global shared memory name + //(the name is based on the lock file name) and try to apply erasure logic + str.insert(0, get_map_base_name()); + try{ + managed_global_memory shm(open_only, str.c_str()); + gmem_erase_func func(str.c_str(), filepath, shm); + shm.try_atomic_func(func); + } + catch(interprocess_exception &e){ + //If shared memory is not found erase the lock file + if(e.get_error_code() == not_found_error){ + delete_file(filepath); + } + } + } + catch(...){ + + } + if(fd >= 0){ + close_lock_file(fd); + } + } + + public: + + static bool remove_old_gmem() + { + std::string refcstrRootDirectory; + tmp_folder(refcstrRootDirectory); + refcstrRootDirectory += "/"; + refcstrRootDirectory += get_lock_file_subdir_name(); + return for_each_file_in_dir(refcstrRootDirectory.c_str(), apply_gmem_erase_logic); + } + + struct lock_file_logic + { + lock_file_logic(managed_global_memory &shm) + : mshm(shm) + { shm.atomic_func(*this); } + + void operator()(void) + { + retry_with_new_map = false; + + //First find the file locking descriptor id + locking_file_serial_id *pserial_id = + mshm.find("lock_file_fd").first; + + int fd; + //If not found schedule a creation + if(!pserial_id){ + fd = GMemNotPresent; + } + //Else get it + else{ + fd = pserial_id->fd; + } + //If we need to create a new one, do it + if(fd == GMemNotPresent){ + std::string lck_str; + //Create a unique current pid based lock file path + create_and_get_singleton_lock_file_path(lck_str); + //Open or create and lock file + int fd = open_or_create_and_lock_file(lck_str.c_str()); + //If failed, write a bad file descriptor to notify other modules that + //something was wrong and unlink shared memory. Mark the function object + //to tell caller to retry with another shared memory + if(fd < 0){ + this->register_lock_file(GMemMarkToBeRemoved); + std::string s; + get_map_name(s); + shared_memory_object::remove(s.c_str()); + retry_with_new_map = true; + } + //If successful, register the file descriptor + else{ + this->register_lock_file(fd); + } + } + //If the fd was invalid (maybe a previous try failed) notify caller that + //should retry creation logic, since this shm might have been already + //unlinked since the shm was removed + else if (fd == GMemMarkToBeRemoved){ + retry_with_new_map = true; + } + //If the stored fd is not valid (a open fd, a normal file with the + //expected size, or does not have the same file id number, + //then it's an old shm from an old process with the same pid. + //If that's the case, mark it as invalid + else if(!is_valid_fd(fd) || + !is_normal_file(fd) || + 0 != get_size(fd) || + !compare_file_serial(fd, *pserial_id)){ + pserial_id->fd = GMemMarkToBeRemoved; + std::string s; + get_map_name(s); + shared_memory_object::remove(s.c_str()); + retry_with_new_map = true; + } + else{ + //If the lock file is ok, increment reference count of + //attached modules to shared memory + atomic_inc32(&pserial_id->modules_attached_to_gmem_count); + } + } + + bool retry() const { return retry_with_new_map; } + + private: + locking_file_serial_id * register_lock_file(int fd) + { + locking_file_serial_id *pinfo = mshm.construct("lock_file_fd")(); + fill_file_serial_id(fd, *pinfo); + return pinfo; + } + + managed_global_memory &mshm; + bool retry_with_new_map; + }; + + static void construct_map(void *addr) + { + std::string s; + intermodule_singleton_helpers::get_map_name(s); + const char *MapName = s.c_str(); + const std::size_t MapSize = intermodule_singleton_helpers::get_map_size();; + ::new (addr)managed_global_memory(open_or_create, MapName, MapSize); + } + + struct unlink_map_logic + { + unlink_map_logic(managed_global_memory &mshm) + : mshm_(mshm) + { mshm.atomic_func(*this); } + + void operator()() + { + locking_file_serial_id *pserial_id = + mshm_.find + ("lock_file_fd").first; + BOOST_ASSERT(0 != pserial_id); + if(1 == atomic_dec32(&pserial_id->modules_attached_to_gmem_count)){ + int fd = pserial_id->fd; + if(fd > 0){ + pserial_id->fd = GMemMarkToBeRemoved; + std::string s; + create_and_get_singleton_lock_file_path(s); + delete_file(s.c_str()); + close_lock_file(fd); + intermodule_singleton_helpers::get_map_name(s); + shared_memory_object::remove(s.c_str()); + } + } + } + + private: + managed_global_memory &mshm_; + }; + + static ref_count_ptr *find(managed_global_memory &map, const char *name) + { + return map.find(name).first; + } + + static ref_count_ptr *insert(managed_global_memory &map, const char *name, const ref_count_ptr &ref) + { + return map.construct(name)(ref); + } + + static bool erase(managed_global_memory &map, const char *name) + { + return map.destroy(name); + } + + template + static void atomic_func(managed_global_memory &map, F &f) + { + map.atomic_func(f); + } +}; + +} //namespace intermodule_singleton_helpers { + +template +class portable_intermodule_singleton + : public intermodule_singleton_impl +{}; + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#include + +#endif //#ifndef BOOST_INTERPROCESS_PORTABLE_INTERMODULE_SINGLETON_HPP diff --git a/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp b/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp index ed46e4fa75..e4df85a572 100644 --- a/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp +++ b/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -15,7 +15,7 @@ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #define BOOST_INTERPROCESS_WIN32_LEAN_AND_MEAN #endif //#ifndef WIN32_LEAN_AND_MEAN #endif //#ifdef _WIN32 diff --git a/3party/boost/boost/interprocess/detail/preprocessor.hpp b/3party/boost/boost/interprocess/detail/preprocessor.hpp index 22f9f77545..47b591c901 100644 --- a/3party/boost/boost/interprocess/detail/preprocessor.hpp +++ b/3party/boost/boost/interprocess/detail/preprocessor.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -15,13 +15,13 @@ # pragma once #endif -#include "config_begin.hpp" +#include #ifdef BOOST_INTERPROCESS_PERFECT_FORWARDING #error "This file is not needed when perfect forwarding is available" #endif -#include +#include #include #include #include @@ -46,52 +46,54 @@ #endif #ifndef BOOST_NO_RVALUE_REFERENCES - #define BOOST_INTERPROCESS_PARAM(U, u) \ + #define BOOST_INTERPROCESS_PP_PARAM(U, u) \ U && u \ //! #else - #define BOOST_INTERPROCESS_PARAM(U, u) \ + #define BOOST_INTERPROCESS_PP_PARAM(U, u) \ const U & u \ //! #endif #ifndef BOOST_NO_RVALUE_REFERENCES -#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES + #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) -#define BOOST_INTERPROCESS_AUX_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (BOOST_INTERPROCESS_MOVE_NAMESPACE::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ -//! + #define BOOST_INTERPROCESS_PP_PARAM_INIT(z, n, data) \ + BOOST_PP_CAT(m_p, n) (BOOST_PP_CAT(p, n)) \ + //! -#else -#define BOOST_INTERPROCESS_AUX_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (BOOST_PP_CAT(p, n)) \ -//! + #else //#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + #define BOOST_INTERPROCESS_PP_PARAM_INIT(z, n, data) \ + BOOST_PP_CAT(m_p, n) (::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ + //! + + #endif //#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + +#else //#ifndef BOOST_NO_RVALUE_REFERENCES + + #define BOOST_INTERPROCESS_PP_PARAM_INIT(z, n, data) \ + BOOST_PP_CAT(m_p, n) (const_cast(BOOST_PP_CAT(p, n))) \ + //! #endif -#else -#define BOOST_INTERPROCESS_AUX_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (const_cast(BOOST_PP_CAT(p, n))) \ -//! -#endif - -#define BOOST_INTERPROCESS_AUX_PARAM_INC(z, n, data) \ - BOOST_PP_CAT(++m_p, n) \ +#define BOOST_INTERPROCESS_PP_PARAM_INC(z, n, data) \ + BOOST_PP_CAT(++m_p, n) \ //! #ifndef BOOST_NO_RVALUE_REFERENCES #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) -#define BOOST_INTERPROCESS_AUX_PARAM_DEFINE(z, n, data) \ +#define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ //! #else -#define BOOST_INTERPROCESS_AUX_PARAM_DEFINE(z, n, data) \ +#define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n); \ //! @@ -99,27 +101,27 @@ #else -#define BOOST_INTERPROCESS_AUX_PARAM_DEFINE(z, n, data) \ +#define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ //! #endif #define BOOST_INTERPROCESS_PP_PARAM_FORWARD(z, n, data) \ -::boost::interprocess::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ) \ +::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) ) \ //! #if !defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) -#include +#include #define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \ -::boost::container::containers_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(m_p, n) ) \ +::boost::container::container_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(m_p, n) ) \ //! #else #define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \ -::boost::interprocess::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(m_p, n) ) \ +::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(m_p, n) ) \ //! #endif //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) diff --git a/3party/boost/boost/interprocess/detail/ptime_wrk.hpp b/3party/boost/boost/interprocess/detail/ptime_wrk.hpp index 4a4709e3a8..8cda3a445d 100644 --- a/3party/boost/boost/interprocess/detail/ptime_wrk.hpp +++ b/3party/boost/boost/interprocess/detail/ptime_wrk.hpp @@ -15,7 +15,7 @@ #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #define BOOST_INTERPROCESS_WIN32_LEAN_AND_MEAN #endif //#ifndef WIN32_LEAN_AND_MEAN #endif //#ifdef _WIN32 diff --git a/3party/boost/boost/interprocess/detail/robust_emulation.hpp b/3party/boost/boost/interprocess/detail/robust_emulation.hpp index 999a6cd872..1feb42dc35 100644 --- a/3party/boost/boost/interprocess/detail/robust_emulation.hpp +++ b/3party/boost/boost/interprocess/detail/robust_emulation.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2010-2010. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2010-2011. 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) // @@ -28,7 +28,7 @@ namespace boost{ namespace interprocess{ -namespace detail{ +namespace ipcdetail{ namespace robust_emulation_helpers { @@ -68,7 +68,7 @@ inline void robust_lock_path(std::string &s) inline void create_and_get_robust_lock_file_path(std::string &s, OS_process_id_t pid) { - file_locking_helpers::create_tmp_subdir_and_get_pid_based_filepath + intermodule_singleton_helpers::create_tmp_subdir_and_get_pid_based_filepath (robust_lock_subdir_path(), robust_lock_prefix(), pid, s); } @@ -132,7 +132,7 @@ class robust_mutex_lock_file throw interprocess_exception(other_error, "Robust emulation robust_mutex_lock_file constructor failed: create_file filed with unexpected error"); } } - } + } ~robust_mutex_lock_file() { @@ -154,7 +154,7 @@ class robust_mutex_lock_file { std::string pid_str; //If the lock file is not our own lock file, then try to do the cleanup - if(!file_locking_helpers::check_if_filename_complies_with_pid + if(!intermodule_singleton_helpers::check_if_filename_complies_with_pid (filename, robust_lock_prefix(), get_current_process_id(), pid_str)){ remove_if_can_lock_file(filepath); } @@ -173,9 +173,9 @@ class robust_mutex_lock_file //This is the mutex class. Mutex should follow mutex concept //with an additonal "take_ownership()" function to take ownership of the -//mutex when robust_emulation_mutex determines the previous owner was dead. +//mutex when robust_spin_mutex determines the previous owner was dead. template -class robust_emulation_mutex +class robust_spin_mutex { public: static const boost::uint32_t correct_state = 0; @@ -184,7 +184,7 @@ class robust_emulation_mutex typedef robust_emulation_helpers::mutex_traits mutex_traits_t; - robust_emulation_mutex(); + robust_spin_mutex(); void lock(); bool try_lock(); bool timed_lock(const boost::posix_time::ptime &abs_time); @@ -208,12 +208,12 @@ class robust_emulation_mutex }; template -inline robust_emulation_mutex::robust_emulation_mutex() +inline robust_spin_mutex::robust_spin_mutex() : mtx(), owner(get_invalid_process_id()), state(correct_state) {} template -inline void robust_emulation_mutex::lock() +inline void robust_spin_mutex::lock() { //If the mutex is broken (recovery didn't call consistent()), //then throw an exception @@ -236,7 +236,7 @@ inline void robust_emulation_mutex::lock() } else{ //Do the dead owner checking each spin_threshold lock tries - detail::thread_yield(); + ipcdetail::thread_yield(); ++spin_count; if(spin_count > spin_threshold){ //Check if owner dead and take ownership if possible @@ -252,7 +252,7 @@ inline void robust_emulation_mutex::lock() } template -inline bool robust_emulation_mutex::try_lock() +inline bool robust_spin_mutex::try_lock() { //Same as lock() but without spinning if(atomic_read32(&this->state) == broken_state){ @@ -278,7 +278,7 @@ inline bool robust_emulation_mutex::try_lock() } template -inline bool robust_emulation_mutex::timed_lock +inline bool robust_spin_mutex::timed_lock (const boost::posix_time::ptime &abs_time) { //Same as lock() but with an additional timeout @@ -302,20 +302,20 @@ inline bool robust_emulation_mutex::timed_lock return this->try_lock(); } // relinquish current time slice - detail::thread_yield(); + ipcdetail::thread_yield(); }while (true); return true; } template -inline void robust_emulation_mutex::owner_to_filename(boost::uint32_t owner, std::string &s) +inline void robust_spin_mutex::owner_to_filename(boost::uint32_t owner, std::string &s) { robust_emulation_helpers::create_and_get_robust_lock_file_path(s, owner); } template -inline bool robust_emulation_mutex::robust_check() +inline bool robust_spin_mutex::robust_check() { //If the old owner was dead, and we've acquired ownership, mark //the mutex as 'fixing'. This means that a "consistent()" is needed @@ -324,11 +324,11 @@ inline bool robust_emulation_mutex::robust_check() return false; } atomic_write32(&this->state, fixing_state); - return true; + return true; } template -inline bool robust_emulation_mutex::check_if_owner_dead_and_take_ownership_atomically() +inline bool robust_spin_mutex::check_if_owner_dead_and_take_ownership_atomically() { boost::uint32_t cur_owner = get_current_process_id(); boost::uint32_t old_owner = atomic_read32(&this->owner), old_owner2; @@ -349,7 +349,7 @@ inline bool robust_emulation_mutex::check_if_owner_dead_and_take_ownershi } template -inline bool robust_emulation_mutex::is_owner_dead(boost::uint32_t owner) +inline bool robust_spin_mutex::is_owner_dead(boost::uint32_t owner) { //If owner is an invalid id, then it's clear it's dead if(owner == (boost::uint32_t)get_invalid_process_id()){ @@ -387,7 +387,7 @@ inline bool robust_emulation_mutex::is_owner_dead(boost::uint32_t owner) } template -inline void robust_emulation_mutex::consistent() +inline void robust_spin_mutex::consistent() { //This function supposes the previous state was "fixing" //and the current process holds the mutex @@ -400,14 +400,14 @@ inline void robust_emulation_mutex::consistent() } template -inline bool robust_emulation_mutex::previous_owner_dead() +inline bool robust_spin_mutex::previous_owner_dead() { //Notifies if a owner recovery has been performed in the last lock() return atomic_read32(&this->state) == fixing_state; }; template -inline void robust_emulation_mutex::unlock() +inline void robust_spin_mutex::unlock() { //If in "fixing" state, unlock and mark the mutex as unrecoverable //so next locks will fail and all threads will be notified that the @@ -421,16 +421,16 @@ inline void robust_emulation_mutex::unlock() } template -inline bool robust_emulation_mutex::lock_own_unique_file() +inline bool robust_spin_mutex::lock_own_unique_file() { //This function forces instantiation of the singleton - robust_emulation_helpers::robust_mutex_lock_file* dummy = - &detail::intermodule_singleton + robust_emulation_helpers::robust_mutex_lock_file* dummy = + &ipcdetail::intermodule_singleton ::get(); return dummy != 0; } -} //namespace detail{ +} //namespace ipcdetail{ } //namespace interprocess{ } //namespace boost{ diff --git a/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp b/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp index f14c5defee..2b715d8f5e 100644 --- a/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp +++ b/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,13 +18,16 @@ #include #include -#include +#include #include #include #include #include #include +#include +#include +#include #include //std::size_t #include //char_traits #include //std::nothrow @@ -49,7 +52,7 @@ class segment_manager_base; //!instance constructed in memory enum instance_type { anonymous_type, named_type, unique_type, max_allocation_type }; -namespace detail{ +namespace ipcdetail{ template class mem_algo_deallocator @@ -70,24 +73,25 @@ class mem_algo_deallocator }; /// @cond +template struct block_header { - std::size_t m_value_bytes; + size_type m_value_bytes; unsigned short m_num_char; unsigned char m_value_alignment; unsigned char m_alloc_type_sizeof_char; - block_header(std::size_t value_bytes - ,std::size_t value_alignment - ,std::size_t alloc_type + block_header(size_type value_bytes + ,size_type value_alignment + ,unsigned char alloc_type ,std::size_t sizeof_char ,std::size_t num_char ) : m_value_bytes(value_bytes) - , m_num_char(num_char) - , m_value_alignment(value_alignment) + , m_num_char((unsigned short)num_char) + , m_value_alignment((unsigned char)value_alignment) , m_alloc_type_sizeof_char - ( ((unsigned char)alloc_type << 5u) | + ( (alloc_type << 5u) | ((unsigned char)sizeof_char & 0x1F) ) {}; @@ -96,70 +100,70 @@ struct block_header block_header &operator= (const T& ) { return *this; } - std::size_t total_size() const + size_type total_size() const { if(alloc_type() != anonymous_type){ return name_offset() + (m_num_char+1)*sizeof_char(); } else{ - return value_offset() + m_value_bytes; + return this->value_offset() + m_value_bytes; } } - std::size_t value_bytes() const + size_type value_bytes() const { return m_value_bytes; } template - std::size_t total_size_with_header() const + size_type total_size_with_header() const { return get_rounded_size - ( sizeof(Header) - , detail::alignment_of::value) + ( size_type(sizeof(Header)) + , size_type(::boost::alignment_of >::value)) + total_size(); } - std::size_t alloc_type() const + unsigned char alloc_type() const { return (m_alloc_type_sizeof_char >> 5u)&(unsigned char)0x7; } - std::size_t sizeof_char() const + unsigned char sizeof_char() const { return m_alloc_type_sizeof_char & (unsigned char)0x1F; } template CharType *name() const - { + { return const_cast(reinterpret_cast (reinterpret_cast(this) + name_offset())); } - std::size_t name_length() const + unsigned short name_length() const { return m_num_char; } - std::size_t name_offset() const - { - return value_offset() + get_rounded_size(m_value_bytes, sizeof_char()); + size_type name_offset() const + { + return this->value_offset() + get_rounded_size(size_type(m_value_bytes), size_type(sizeof_char())); } void *value() const { - return const_cast((reinterpret_cast(this) + value_offset())); + return const_cast((reinterpret_cast(this) + this->value_offset())); } - std::size_t value_offset() const + size_type value_offset() const { - return get_rounded_size(sizeof(block_header), m_value_alignment); + return get_rounded_size(size_type(sizeof(block_header)), size_type(m_value_alignment)); } template - bool less_comp(const block_header &b) const + bool less_comp(const block_header &b) const { return m_num_char < b.m_num_char || - (m_num_char < b.m_num_char && + (m_num_char < b.m_num_char && std::char_traits::compare (name(), b.name(), m_num_char) < 0); } template - bool equal_comp(const block_header &b) const + bool equal_comp(const block_header &b) const { return m_num_char == b.m_num_char && std::char_traits::compare @@ -167,14 +171,14 @@ struct block_header } template - static block_header *block_header_from_value(T *value) - { return block_header_from_value(value, sizeof(T), detail::alignment_of::value); } + static block_header *block_header_from_value(T *value) + { return block_header_from_value(value, sizeof(T), ::boost::alignment_of::value); } - static block_header *block_header_from_value(const void *value, std::size_t sz, std::size_t algn) - { - block_header * hdr = + static block_header *block_header_from_value(const void *value, std::size_t sz, std::size_t algn) + { + block_header * hdr = const_cast - (reinterpret_cast(reinterpret_cast(value) - + (reinterpret_cast(reinterpret_cast(value) - get_rounded_size(sizeof(block_header), algn))); (void)sz; //Some sanity checks @@ -184,27 +188,27 @@ struct block_header } template - static block_header *from_first_header(Header *header) - { - block_header * hdr = - reinterpret_cast(reinterpret_cast(header) + - get_rounded_size(sizeof(Header), detail::alignment_of::value)); + static block_header *from_first_header(Header *header) + { + block_header * hdr = + reinterpret_cast*>(reinterpret_cast(header) + + get_rounded_size(size_type(sizeof(Header)), size_type(::boost::alignment_of >::value))); //Some sanity checks return hdr; } template - static Header *to_first_header(block_header *bheader) - { - Header * hdr = - reinterpret_cast(reinterpret_cast(bheader) - - get_rounded_size(sizeof(Header), detail::alignment_of::value)); + static Header *to_first_header(block_header *bheader) + { + Header * hdr = + reinterpret_cast(reinterpret_cast(bheader) - + get_rounded_size(size_type(sizeof(Header)), size_type(::boost::alignment_of >::value))); //Some sanity checks return hdr; } }; -inline void array_construct(void *mem, std::size_t num, detail::in_place_interface &table) +inline void array_construct(void *mem, std::size_t num, in_place_interface &table) { //Try constructors std::size_t constructed = 0; @@ -257,7 +261,7 @@ typedef instance_t anonymous_instance_t; typedef instance_t unique_instance_t; -template +template struct intrusive_value_type_impl : public Hook { @@ -268,34 +272,35 @@ struct intrusive_value_type_impl public: typedef CharType char_type; + typedef SizeType size_type; intrusive_value_type_impl(){} - enum { BlockHdrAlignment = detail::alignment_of::value }; + enum { BlockHdrAlignment = ::boost::alignment_of >::value }; - block_header *get_block_header() const + block_header *get_block_header() const { - return const_cast - (reinterpret_cast(reinterpret_cast(this) + - get_rounded_size(sizeof(*this), BlockHdrAlignment))); + return const_cast*> + (reinterpret_cast *>(reinterpret_cast(this) + + get_rounded_size(size_type(sizeof(*this)), size_type(BlockHdrAlignment)))); } - bool operator <(const intrusive_value_type_impl & other) const + bool operator <(const intrusive_value_type_impl & other) const { return (this->get_block_header())->template less_comp(*other.get_block_header()); } - bool operator ==(const intrusive_value_type_impl & other) const + bool operator ==(const intrusive_value_type_impl & other) const { return (this->get_block_header())->template equal_comp(*other.get_block_header()); } - static intrusive_value_type_impl *get_intrusive_value_type(block_header *hdr) + static intrusive_value_type_impl *get_intrusive_value_type(block_header *hdr) { return reinterpret_cast(reinterpret_cast(hdr) - - get_rounded_size(sizeof(intrusive_value_type_impl), BlockHdrAlignment)); + get_rounded_size(size_type(sizeof(intrusive_value_type_impl)), size_type(BlockHdrAlignment))); } CharType *name() const { return get_block_header()->template name(); } - std::size_t name_length() const + unsigned short name_length() const { return get_block_header()->name_length(); } void *value() const @@ -306,15 +311,15 @@ template class char_ptr_holder { public: - char_ptr_holder(const CharType *name) + char_ptr_holder(const CharType *name) : m_name(name) {} - char_ptr_holder(const detail::anonymous_instance_t *) + char_ptr_holder(const anonymous_instance_t *) : m_name(static_cast(0)) {} - char_ptr_holder(const detail::unique_instance_t *) + char_ptr_holder(const unique_instance_t *) : m_name(reinterpret_cast(-1)) {} @@ -325,55 +330,58 @@ class char_ptr_holder const CharType *m_name; }; -//!The key of the the named allocation information index. Stores an offset pointer +//!The key of the the named allocation information index. Stores an offset pointer //!to a null terminated string and the length of the string to speed up sorting template struct index_key { - typedef typename boost:: - pointer_to_other::type const_char_ptr_t; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_char_ptr_t; typedef CharT char_type; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; private: //Offset pointer to the object's name const_char_ptr_t mp_str; //Length of the name buffer (null NOT included) - std::size_t m_len; + size_type m_len; public: //!Constructor of the key - index_key (const char_type *name, std::size_t length) + index_key (const char_type *name, size_type length) : mp_str(name), m_len(length) {} //!Less than function for index ordering bool operator < (const index_key & right) const { - return (m_len < right.m_len) || - (m_len == right.m_len && - std::char_traits::compare - (detail::get_pointer(mp_str) - ,detail::get_pointer(right.mp_str), m_len) < 0); + return (m_len < right.m_len) || + (m_len == right.m_len && + std::char_traits::compare + (to_raw_pointer(mp_str) + ,to_raw_pointer(right.mp_str), m_len) < 0); } //!Equal to function for index ordering bool operator == (const index_key & right) const { - return m_len == right.m_len && - std::char_traits::compare - (detail::get_pointer(mp_str), - detail::get_pointer(right.mp_str), m_len) == 0; + return m_len == right.m_len && + std::char_traits::compare + (to_raw_pointer(mp_str), + to_raw_pointer(right.mp_str), m_len) == 0; } void name(const CharT *name) { mp_str = name; } - void name_length(std::size_t len) + void name_length(size_type len) { m_len = len; } const CharT *name() const - { return detail::get_pointer(mp_str); } + { return to_raw_pointer(mp_str); } - std::size_t name_length() const + size_type name_length() const { return m_len; } }; @@ -387,7 +395,7 @@ struct index_data index_data(void *ptr) : m_ptr(ptr){} void *value() const - { return static_cast(detail::get_pointer(m_ptr)); } + { return static_cast(to_raw_pointer(m_ptr)); } }; template @@ -399,14 +407,14 @@ struct index_config { typedef typename MemoryAlgorithm::void_pointer void_pointer; typedef CharT char_type; - typedef detail::index_key key_type; - typedef detail::index_data mapped_type; + typedef index_key key_type; + typedef index_data mapped_type; typedef typename segment_manager_base_type ::type segment_manager_base; template struct intrusive_value_type - { typedef detail::intrusive_value_type_impl type; }; + { typedef intrusive_value_type_impl type; }; typedef intrusive_compare_key intrusive_compare_key_type; }; @@ -425,7 +433,7 @@ class segment_manager_iterator_value_adaptor const char_type *name() const { return m_val->name(); } - std::size_t name_length() const + unsigned short name_length() const { return m_val->name_length(); } const void *value() const @@ -442,6 +450,7 @@ class segment_manager_iterator_value_adaptor typedef typename iterator_val_t::first_type first_type; typedef typename iterator_val_t::second_type second_type; typedef typename first_type::char_type char_type; + typedef typename first_type::size_type size_type; public: segment_manager_iterator_value_adaptor(const typename Iterator::value_type &val) @@ -451,13 +460,13 @@ class segment_manager_iterator_value_adaptor const char_type *name() const { return m_val->first.name(); } - std::size_t name_length() const + size_type name_length() const { return m_val->first.name_length(); } const void *value() const { - return reinterpret_cast - (detail::get_pointer(m_val->second.m_ptr))->value(); + return reinterpret_cast*> + (to_raw_pointer(m_val->second.m_ptr))->value(); } const typename Iterator::value_type *m_val; @@ -469,19 +478,19 @@ struct segment_manager_iterator_transform , segment_manager_iterator_value_adaptor > { typedef segment_manager_iterator_value_adaptor result_type; - + result_type operator()(const typename Iterator::value_type &arg) const { return result_type(arg); } }; -} //namespace detail { +} //namespace ipcdetail { -//These pointers are the ones the user will use to +//These pointers are the ones the user will use to //indicate previous allocation types -static const detail::anonymous_instance_t * anonymous_instance = 0; -static const detail::unique_instance_t * unique_instance = 0; +static const ipcdetail::anonymous_instance_t * anonymous_instance = 0; +static const ipcdetail::unique_instance_t * unique_instance = 0; -namespace detail_really_deep_namespace { +namespace ipcdetail_really_deep_namespace { //Otherwise, gcc issues a warning of previously defined //anonymous_instance and unique_instance diff --git a/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp b/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp index 5a2bef2f77..28e7341406 100644 --- a/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp +++ b/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-2011. 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) // @@ -18,79 +18,87 @@ #include #include -#if defined(BOOST_INTERPROCESS_WINDOWS) - #define BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME - #define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME - #include -#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) - #include - #if defined(CTL_KERN) && defined (KERN_BOOTTIME) - #define BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME - #define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME - #endif +#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) && defined(BOOST_INTERPROCESS_WINDOWS) + #include #endif namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { -#if defined (BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME) -inline void get_bootstamp(std::string &s, bool add = false) -{ - std::string bootstamp; - winapi::get_last_bootup_time(bootstamp); - if(add){ - s += bootstamp; - } - else{ - s = bootstamp; - } -} -#elif defined(BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME) -inline void get_bootstamp(std::string &s, bool add = false) -{ - // FreeBSD specific: sysctl "kern.boottime" - int request[2] = { CTL_KERN, KERN_BOOTTIME }; - struct ::timeval result; - size_t result_len = sizeof result; +#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) + #if defined(BOOST_INTERPROCESS_WINDOWS) + //This type will initialize the stamp + struct windows_bootstamp + { + windows_bootstamp() + { + winapi::get_last_bootup_time(stamp); + } + //Use std::string. Even if this will be constructed in shared memory, all + //modules/dlls are from this process so internal raw pointers to heap are always valid + std::string stamp; + }; - if (::sysctl (request, 2, &result, &result_len, NULL, 0) < 0) - return; - - char bootstamp_str[256]; - - const char Characters [] = - { '0', '1', '2', '3', '4', '5', '6', '7' - , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - - std::size_t char_counter = 0; - long fields[2] = { result.tv_sec, result.tv_usec }; - for(std::size_t field = 0; field != 2; ++field){ - for(std::size_t i = 0; i != sizeof(long); ++i){ - const char *ptr = (const char *)&fields[field]; - bootstamp_str[char_counter++] = Characters[(ptr[i]&0xF0)>>4]; - bootstamp_str[char_counter++] = Characters[(ptr[i]&0x0F)]; + inline void get_bootstamp(std::string &s, bool add = false) + { + const windows_bootstamp &bootstamp = windows_intermodule_singleton::get(); + if(add){ + s += bootstamp.stamp; + } + else{ + s = bootstamp.stamp; + } } - } - bootstamp_str[char_counter] = 0; - if(add){ - s += bootstamp_str; - } - else{ - s = bootstamp_str; - } -} -#endif + #elif defined(BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME) + inline void get_bootstamp(std::string &s, bool add = false) + { + // FreeBSD specific: sysctl "kern.boottime" + int request[2] = { CTL_KERN, KERN_BOOTTIME }; + struct ::timeval result; + std::size_t result_len = sizeof result; + + if (::sysctl (request, 2, &result, &result_len, NULL, 0) < 0) + return; + + char bootstamp_str[256]; + + const char Characters [] = + { '0', '1', '2', '3', '4', '5', '6', '7' + , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + std::size_t char_counter = 0; + //32 bit values to allow 32 and 64 bit process IPC + boost::uint32_t fields[2] = { boost::uint32_t(result.tv_sec), boost::uint32_t(result.tv_usec) }; + for(std::size_t field = 0; field != 2; ++field){ + for(std::size_t i = 0; i != sizeof(fields[0]); ++i){ + const char *ptr = (const char *)&fields[field]; + bootstamp_str[char_counter++] = Characters[(ptr[i]&0xF0)>>4]; + bootstamp_str[char_counter++] = Characters[(ptr[i]&0x0F)]; + } + } + bootstamp_str[char_counter] = 0; + if(add){ + s += bootstamp_str; + } + else{ + s = bootstamp_str; + } + } + #else + #error "BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME defined with no known implementation" + #endif +#endif //#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) inline void get_tmp_base_dir(std::string &tmp_name) { #if defined (BOOST_INTERPROCESS_WINDOWS) - winapi::get_shared_documents_folder(tmp_name); - if(tmp_name.empty()){ - tmp_name = get_temporary_path(); - } + winapi::get_shared_documents_folder(tmp_name); + if(tmp_name.empty() || !winapi::is_directory(tmp_name.c_str())){ + tmp_name = get_temporary_path(); + } #else - tmp_name = get_temporary_path(); + tmp_name = get_temporary_path(); #endif if(tmp_name.empty()){ error_info err = system_error_code(); @@ -103,9 +111,9 @@ inline void get_tmp_base_dir(std::string &tmp_name) inline void tmp_folder(std::string &tmp_name) { get_tmp_base_dir(tmp_name); - #ifdef BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME - tmp_name += "/"; - get_bootstamp(tmp_name, true); + #if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) + tmp_name += "/"; + get_bootstamp(tmp_name, true); #endif } @@ -130,29 +138,30 @@ inline void create_tmp_and_clean_old(std::string &tmp_name) } } - #ifdef BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME - tmp_folder(tmp_name); + #if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME) + tmp_folder(tmp_name); - //If fails, check that it's because already exists - if(!create_directory(tmp_name.c_str())){ - error_info info(system_error_code()); - if(info.get_error_code() != already_exists_error){ - throw interprocess_exception(info); + //If fails, check that it's because already exists + if(!create_directory(tmp_name.c_str())){ + error_info info(system_error_code()); + if(info.get_error_code() != already_exists_error){ + throw interprocess_exception(info); + } } - } - //Now erase all old directories created in the previous boot sessions - std::string subdir = tmp_name; - subdir.erase(0, root_tmp_name.size()+1); - delete_subdirectories(root_tmp_name, subdir.c_str()); + //Now erase all old directories created in the previous boot sessions + std::string subdir = tmp_name; + subdir.erase(0, root_tmp_name.size()+1); + delete_subdirectories(root_tmp_name, subdir.c_str()); #else - tmp_name = root_tmp_name; + tmp_name = root_tmp_name; #endif } inline void create_tmp_and_clean_old_and_get_filename(const char *filename, std::string &tmp_name) { create_tmp_and_clean_old(tmp_name); - tmp_filename(filename, tmp_name); + tmp_name += "/"; + tmp_name += filename; } inline void add_leading_slash(const char *name, std::string &new_name) @@ -165,7 +174,7 @@ inline void add_leading_slash(const char *name, std::string &new_name) } //namespace boost{ } //namespace interprocess { -} //namespace detail { +} //namespace ipcdetail { #include diff --git a/3party/boost/boost/interprocess/detail/transform_iterator.hpp b/3party/boost/boost/interprocess/detail/transform_iterator.hpp index 5578742762..922c875d6d 100644 --- a/3party/boost/boost/interprocess/detail/transform_iterator.hpp +++ b/3party/boost/boost/interprocess/detail/transform_iterator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2011. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. @@ -27,7 +27,7 @@ #include namespace boost { -namespace interprocess { +namespace interprocess { template struct operator_arrow_proxy @@ -62,7 +62,7 @@ class transform_iterator : public UnaryFunction , public std::iterator < typename Iterator::iterator_category - , typename detail::remove_reference::type + , typename ipcdetail::remove_reference::type , typename Iterator::difference_type , operator_arrow_proxy , typename UnaryFunction::result_type> @@ -77,7 +77,7 @@ class transform_iterator {} //Constructors - transform_iterator& operator++() + transform_iterator& operator++() { increment(); return *this; } transform_iterator operator++(int) @@ -87,7 +87,7 @@ class transform_iterator return result; } - transform_iterator& operator--() + transform_iterator& operator--() { decrement(); return *this; } transform_iterator operator--(int) @@ -186,7 +186,7 @@ make_transform_iterator(Iterator it, UnaryFunc fun) return transform_iterator(it, fun); } -} //namespace interprocess { +} //namespace interprocess { } //namespace boost { #include diff --git a/3party/boost/boost/interprocess/detail/type_traits.hpp b/3party/boost/boost/interprocess/detail/type_traits.hpp index 9c4579d1e5..7a582fee5c 100644 --- a/3party/boost/boost/interprocess/detail/type_traits.hpp +++ b/3party/boost/boost/interprocess/detail/type_traits.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // (C) Copyright John Maddock 2000. -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2011. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -8,8 +8,6 @@ // // See http://www.boost.org/libs/interprocess for documentation. // -// The alignment_of implementation comes from John Maddock's boost::alignment_of code -// ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP @@ -22,53 +20,11 @@ #include namespace boost { -namespace interprocess { -namespace detail { +namespace interprocess { +namespace ipcdetail { struct nat{}; -//boost::alignment_of yields to 10K lines of preprocessed code, so we -//need an alternative -template struct alignment_of; - -template -struct alignment_of_hack -{ - char c; - T t; - alignment_of_hack(); -}; - -template -struct alignment_logic -{ - enum{ value = A < S ? A : S }; -}; - -template< typename T > -struct alignment_of -{ - enum{ value = alignment_logic - < sizeof(alignment_of_hack) - sizeof(T) - , sizeof(T)>::value }; -}; - -//This is not standard, but should work with all compilers -union max_align -{ - char char_; - short short_; - int int_; - long long_; - #ifdef BOOST_HAS_LONG_LONG - long long long_long_; - #endif - float float_; - double double_; - long double long_double_; - void * void_ptr_; -}; - template struct remove_reference { @@ -84,25 +40,25 @@ struct remove_reference template struct is_reference { - enum { value = false }; + static const bool value = false; }; template struct is_reference { - enum { value = true }; + static const bool value = true; }; template struct is_pointer { - enum { value = false }; + static const bool value = false; }; template struct is_pointer { - enum { value = true }; + static const bool value = true; }; template @@ -137,6 +93,30 @@ template struct add_const_reference { typedef T& type; }; +template +struct remove_const +{ + typedef T type; +}; + +template +struct remove_const +{ + typedef T type; +}; + +template +struct remove_volatile +{ + typedef T type; +}; + +template +struct remove_volatile +{ + typedef T type; +}; + template struct is_same { @@ -156,11 +136,10 @@ struct is_same static const bool value = sizeof(yes_type) == sizeof(is_same_tester(t,u)); }; -} // namespace detail -} //namespace interprocess { +} // namespace ipcdetail +} //namespace interprocess { } //namespace boost { -#endif //#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP - #include +#endif //#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP diff --git a/3party/boost/boost/interprocess/detail/utilities.hpp b/3party/boost/boost/interprocess/detail/utilities.hpp index 2389effaca..fcb211fb09 100644 --- a/3party/boost/boost/interprocess/detail/utilities.hpp +++ b/3party/boost/boost/interprocess/detail/utilities.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. +// (C) Copyright Ion Gaztanaga 2005-2011. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. @@ -22,44 +22,30 @@ #include #include -#include +#include #include #include #include #include #include #include -#include +#include +#include #include #include namespace boost { -namespace interprocess { -namespace detail { +namespace interprocess { +namespace ipcdetail { -template -struct smart_ptr_type -{ - typedef typename SmartPtr::value_type value_type; - typedef value_type *pointer; - static pointer get (const SmartPtr &smartptr) - { return smartptr.get();} -}; +template +inline T* to_raw_pointer(T* p) +{ return p; } -template -struct smart_ptr_type -{ - typedef T value_type; - typedef value_type *pointer; - static pointer get (pointer ptr) - { return ptr;} -}; - -//!Overload for smart pointers to avoid ADL problems with get_pointer -template -inline typename smart_ptr_type::pointer -get_pointer(const Ptr &ptr) -{ return smart_ptr_type::get(ptr); } +template +inline typename boost::intrusive::pointer_traits::element_type* +to_raw_pointer(const Pointer &p) +{ return boost::interprocess::ipcdetail::to_raw_pointer(p.operator->()); } //!To avoid ADL problems with swap template @@ -70,25 +56,29 @@ inline void do_swap(T& x, T& y) } //Rounds "orig_size" by excess to round_to bytes -inline std::size_t get_rounded_size(std::size_t orig_size, std::size_t round_to) +template +inline SizeType get_rounded_size(SizeType orig_size, SizeType round_to) { return ((orig_size-1)/round_to+1)*round_to; } //Truncates "orig_size" to a multiple of "multiple" bytes. -inline std::size_t get_truncated_size(std::size_t orig_size, std::size_t multiple) +template +inline SizeType get_truncated_size(SizeType orig_size, SizeType multiple) { return orig_size/multiple*multiple; } //Rounds "orig_size" by excess to round_to bytes. round_to must be power of two -inline std::size_t get_rounded_size_po2(std::size_t orig_size, std::size_t round_to) +template +inline SizeType get_rounded_size_po2(SizeType orig_size, SizeType round_to) { return ((orig_size-1)&(~(round_to-1))) + round_to; } //Truncates "orig_size" to a multiple of "multiple" bytes. multiple must be power of two -inline std::size_t get_truncated_size_po2(std::size_t orig_size, std::size_t multiple) +template +inline SizeType get_truncated_size_po2(SizeType orig_size, SizeType multiple) { return (orig_size & (~(multiple-1))); } @@ -96,14 +86,14 @@ inline std::size_t get_truncated_size_po2(std::size_t orig_size, std::size_t mul template struct ct_rounded_size { - enum { value = ((OrigSize-1)/RoundTo+1)*RoundTo }; + static const std::size_t value = ((OrigSize-1)/RoundTo+1)*RoundTo; }; // Gennaro Prota wrote this. Thanks! template struct ct_max_pow2_less { - enum { c = 2*n < p }; + static const std::size_t c = 2*n < p; static const std::size_t value = c ? (ct_max_pow2_less< c*p, 2*c*n>::value) : n; @@ -115,7 +105,7 @@ struct ct_max_pow2_less<0, 0> static const std::size_t value = 0; }; -} //namespace detail { +} //namespace ipcdetail { //!Trait class to detect if an index is a node //!index. This allows more efficient operations @@ -123,7 +113,7 @@ struct ct_max_pow2_less<0, 0> template struct is_node_index { - enum { value = false }; + static const bool value = false; }; //!Trait class to detect if an index is an intrusive @@ -133,7 +123,7 @@ struct is_node_index template struct is_intrusive_index { - enum { value = false }; + static const bool value = false; }; template T* @@ -148,9 +138,9 @@ template class value_eraser { public: - value_eraser(Cont & cont, typename Cont::iterator it) + value_eraser(Cont & cont, typename Cont::iterator it) : m_cont(cont), m_index_it(it), m_erase(true){} - ~value_eraser() + ~value_eraser() { if(m_erase) m_cont.erase(m_index_it); } void release() { m_erase = false; } @@ -161,7 +151,7 @@ class value_eraser bool m_erase; }; -} //namespace interprocess { +} //namespace interprocess { } //namespace boost { #include diff --git a/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp b/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp index d2aa2faa36..482a0056a7 100644 --- a/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp +++ b/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -21,8 +21,8 @@ #include //std::size_t namespace boost { -namespace interprocess { -namespace detail { +namespace interprocess { +namespace ipcdetail { template class tuple; @@ -136,7 +136,7 @@ struct index_tuple{}; template > struct build_number_seq; -template +template struct build_number_seq > : build_number_seq > {}; @@ -146,7 +146,7 @@ struct build_number_seq<0, index_tuple > { typedef index_tuple type; }; -}}} //namespace boost { namespace interprocess { namespace detail { +}}} //namespace boost { namespace interprocess { namespace ipcdetail { #include diff --git a/3party/boost/boost/interprocess/detail/win32_api.hpp b/3party/boost/boost/interprocess/detail/win32_api.hpp index 6a4f1b72e6..c53725ca3b 100644 --- a/3party/boost/boost/interprocess/detail/win32_api.hpp +++ b/3party/boost/boost/interprocess/detail/win32_api.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -8,13 +8,15 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_INTERPROCESS_WIN32_SYNC_PRIMITIVES_HPP -#define BOOST_INTERPROCESS_WIN32_SYNC_PRIMITIVES_HPP +#ifndef BOOST_INTERPROCESS_WIN32_PRIMITIVES_HPP +#define BOOST_INTERPROCESS_WIN32_PRIMITIVES_HPP #include #include +#include #include #include +#include #include #include #include @@ -24,6 +26,7 @@ # pragma comment( lib, "advapi32.lib" ) # pragma comment( lib, "oleaut32.lib" ) # pragma comment( lib, "Ole32.lib" ) +# pragma comment( lib, "Psapi.lib" ) #endif #if (defined BOOST_INTERPROCESS_WINDOWS) @@ -43,12 +46,14 @@ namespace winapi { //Some used constants static const unsigned long infinite_time = 0xFFFFFFFF; static const unsigned long error_already_exists = 183L; +static const unsigned long error_invalid_handle = 6L; static const unsigned long error_sharing_violation = 32L; static const unsigned long error_file_not_found = 2u; static const unsigned long error_no_more_files = 18u; //Retries in CreateFile, see http://support.microsoft.com/kb/316609 static const unsigned int error_sharing_violation_tries = 3u; static const unsigned int error_sharing_violation_sleep_ms = 250u; +static const unsigned int error_file_too_large = 223u; static const unsigned long semaphore_all_access = (0x000F0000L)|(0x00100000L)|0x3; static const unsigned long mutex_all_access = (0x000F0000L)|(0x00100000L)|0x0001; @@ -132,7 +137,15 @@ static const unsigned long format_message_max_width_mask static const unsigned long lang_neutral = (unsigned long)0x00; static const unsigned long sublang_default = (unsigned long)0x01; static const unsigned long invalid_file_size = (unsigned long)0xFFFFFFFF; -static void * const invalid_handle_value = (void*)(long)(-1); +static const unsigned long invalid_file_attributes = ((unsigned long)-1); +static void * const invalid_handle_value = ((void*)(long)(-1)); + +static const unsigned long file_type_char = 0x0002L; +static const unsigned long file_type_disk = 0x0001L; +static const unsigned long file_type_pipe = 0x0003L; +static const unsigned long file_type_remote = 0x8000L; +static const unsigned long file_type_unknown = 0x0000L; + static const unsigned long create_new = 1; static const unsigned long create_always = 2; static const unsigned long open_existing = 3; @@ -154,22 +167,46 @@ static const long BootAndSystemstampLength = 16; static const long BootstampLength = 8; static const unsigned long MaxPath = 260; - //Keys static void * const hkey_local_machine = (void*)(unsigned long*)(long)(0x80000002); static unsigned long key_query_value = 0x0001; //COM API -const long RPC_C_AUTHN_LEVEL_PKT_IG = 4; -const long RPC_C_IMP_LEVEL_IMPERSONATE_IG = 3; -const long EOAC_NONE_IG = 0; -const long CLSCTX_INPROC_SERVER_IG = 0x1; -const long CLSCTX_LOCAL_SERVER_IG = 0x4; -const long WBEM_FLAG_RETURN_IMMEDIATELY_IG = 0x10; -const long WBEM_INFINITE_IG = 0xffffffffL; -const long RPC_E_TOO_LATE_IG = 0x80010119L; -const long S_OK_IG = 0L; -const long S_FALSE_IG = 1; +const unsigned long RPC_C_AUTHN_LEVEL_PKT_BIPC = 4; +const unsigned long RPC_C_AUTHN_DEFAULT_BIPC = 0xffffffffL; +const unsigned long RPC_C_AUTHZ_DEFAULT_BIPC = 0xffffffffL; +const unsigned long RPC_C_IMP_LEVEL_IMPERSONATE_BIPC = 3; +const signed long EOAC_NONE_BIPC = 0; +const signed long CLSCTX_INPROC_SERVER_BIPC = 0x1; +const signed long CLSCTX_LOCAL_SERVER_BIPC = 0x4; +const signed long WBEM_FLAG_RETURN_IMMEDIATELY_BIPC = 0x10; +const signed long WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC = 0x0; +const signed long WBEM_FLAG_FORWARD_ONLY_BIPC = 0x20; +const signed long WBEM_INFINITE_BIPC = 0xffffffffL; +const signed long RPC_E_TOO_LATE_BIPC = 0x80010119L; +const signed long S_OK_BIPC = 0L; +const signed long S_FALSE_BIPC = 1; +const signed long RPC_E_CHANGED_MODE_BIPC = 0x80010106L; +const unsigned long COINIT_APARTMENTTHREADED_BIPC = 0x2; +const unsigned long COINIT_MULTITHREADED_BIPC = 0x0; +const unsigned long COINIT_DISABLE_OLE1DDE_BIPC = 0x4; +const unsigned long COINIT_SPEED_OVER_MEMORY_BIPC = 0x4; + +//If the user needs to change default COM initialization model, +//it can define BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL to one of these: +// +// COINIT_APARTMENTTHREADED_BIPC +// COINIT_MULTITHREADED_BIPC +// COINIT_DISABLE_OLE1DDE_BIPC +// COINIT_SPEED_OVER_MEMORY_BIPC +#if !defined(BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL) + #define BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL COINIT_APARTMENTTHREADED_BIPC +#elif (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_APARTMENTTHREADED_BIPC) &&\ + (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_MULTITHREADED_BIPC) &&\ + (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_DISABLE_OLE1DDE_BIPC) &&\ + (BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL != COINIT_SPEED_OVER_MEMORY_BIPC) + #error "Wrong value for BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL macro" +#endif } //namespace winapi { } //namespace interprocess { @@ -180,7 +217,7 @@ namespace boost { namespace interprocess { namespace winapi { -struct GUID_IG +struct GUID_BIPC { unsigned long Data1; unsigned short Data2; @@ -188,10 +225,10 @@ struct GUID_IG unsigned char Data4[8]; }; -const GUID_IG CLSID_WbemAdministrativeLocator = +const GUID_BIPC CLSID_WbemAdministrativeLocator = { 0xcb8555cc, 0x9128, 0x11d1, {0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0xfd, 0xff}}; -const GUID_IG IID_IUnknown = { 0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}; +const GUID_BIPC IID_IUnknown = { 0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}; struct wchar_variant { @@ -202,341 +239,341 @@ struct wchar_variant } value; }; - struct IUnknown_IG + struct IUnknown_BIPC { public: - virtual long __stdcall QueryInterface( - /* [in] */ const GUID_IG &riid, + virtual long __stdcall QueryInterface( + /* [in] */ const GUID_BIPC &riid, /* [iid_is][out] */ void **ppvObject) = 0; - + virtual unsigned long __stdcall AddRef( void) = 0; - + virtual unsigned long __stdcall Release( void) = 0; }; -struct IWbemClassObject_IG : public IUnknown_IG +struct IWbemClassObject_BIPC : public IUnknown_BIPC { public: - virtual long __stdcall GetQualifierSet( + virtual long __stdcall GetQualifierSet( /* [out] */ void **ppQualSet) = 0; - - virtual long __stdcall Get( + + virtual long __stdcall Get( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags, /* [unique][in][out] */ wchar_variant *pVal, /* [unique][in][out] */ long *pType, /* [unique][in][out] */ long *plFlavor) = 0; - - virtual long __stdcall Put( + + virtual long __stdcall Put( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags, /* [in] */ wchar_variant *pVal, /* [in] */ long Type) = 0; - - virtual long __stdcall Delete( + + virtual long __stdcall Delete( /* [string][in] */ const wchar_t * wszName) = 0; - - virtual long __stdcall GetNames( + + virtual long __stdcall GetNames( /* [string][in] */ const wchar_t * wszQualifierName, /* [in] */ long lFlags, /* [in] */ wchar_variant *pQualifierVal, /* [out] */ void * *pNames) = 0; - - virtual long __stdcall BeginEnumeration( + + virtual long __stdcall BeginEnumeration( /* [in] */ long lEnumFlags) = 0; - - virtual long __stdcall Next( + + virtual long __stdcall Next( /* [in] */ long lFlags, /* [unique][in][out] */ wchar_t * *strName, /* [unique][in][out] */ wchar_variant *pVal, /* [unique][in][out] */ long *pType, /* [unique][in][out] */ long *plFlavor) = 0; - + virtual long __stdcall EndEnumeration( void) = 0; - - virtual long __stdcall GetPropertyQualifierSet( + + virtual long __stdcall GetPropertyQualifierSet( /* [string][in] */ const wchar_t * wszProperty, /* [out] */ void **ppQualSet) = 0; - - virtual long __stdcall Clone( - /* [out] */ IWbemClassObject_IG **ppCopy) = 0; - - virtual long __stdcall GetObjectText( + + virtual long __stdcall Clone( + /* [out] */ IWbemClassObject_BIPC **ppCopy) = 0; + + virtual long __stdcall GetObjectText( /* [in] */ long lFlags, /* [out] */ wchar_t * *pstrObjectText) = 0; - - virtual long __stdcall SpawnDerivedClass( + + virtual long __stdcall SpawnDerivedClass( /* [in] */ long lFlags, - /* [out] */ IWbemClassObject_IG **ppNewClass) = 0; - - virtual long __stdcall SpawnInstance( + /* [out] */ IWbemClassObject_BIPC **ppNewClass) = 0; + + virtual long __stdcall SpawnInstance( /* [in] */ long lFlags, - /* [out] */ IWbemClassObject_IG **ppNewInstance) = 0; - - virtual long __stdcall CompareTo( + /* [out] */ IWbemClassObject_BIPC **ppNewInstance) = 0; + + virtual long __stdcall CompareTo( /* [in] */ long lFlags, - /* [in] */ IWbemClassObject_IG *pCompareTo) = 0; - - virtual long __stdcall GetPropertyOrigin( + /* [in] */ IWbemClassObject_BIPC *pCompareTo) = 0; + + virtual long __stdcall GetPropertyOrigin( /* [string][in] */ const wchar_t * wszName, /* [out] */ wchar_t * *pstrClassName) = 0; - - virtual long __stdcall InheritsFrom( + + virtual long __stdcall InheritsFrom( /* [in] */ const wchar_t * strAncestor) = 0; - - virtual long __stdcall GetMethod( + + virtual long __stdcall GetMethod( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags, - /* [out] */ IWbemClassObject_IG **ppInSignature, - /* [out] */ IWbemClassObject_IG **ppOutSignature) = 0; - - virtual long __stdcall PutMethod( + /* [out] */ IWbemClassObject_BIPC **ppInSignature, + /* [out] */ IWbemClassObject_BIPC **ppOutSignature) = 0; + + virtual long __stdcall PutMethod( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags, - /* [in] */ IWbemClassObject_IG *pInSignature, - /* [in] */ IWbemClassObject_IG *pOutSignature) = 0; - - virtual long __stdcall DeleteMethod( + /* [in] */ IWbemClassObject_BIPC *pInSignature, + /* [in] */ IWbemClassObject_BIPC *pOutSignature) = 0; + + virtual long __stdcall DeleteMethod( /* [string][in] */ const wchar_t * wszName) = 0; - - virtual long __stdcall BeginMethodEnumeration( + + virtual long __stdcall BeginMethodEnumeration( /* [in] */ long lEnumFlags) = 0; - - virtual long __stdcall NextMethod( + + virtual long __stdcall NextMethod( /* [in] */ long lFlags, /* [unique][in][out] */ wchar_t * *pstrName, - /* [unique][in][out] */ IWbemClassObject_IG **ppInSignature, - /* [unique][in][out] */ IWbemClassObject_IG **ppOutSignature) = 0; - + /* [unique][in][out] */ IWbemClassObject_BIPC **ppInSignature, + /* [unique][in][out] */ IWbemClassObject_BIPC **ppOutSignature) = 0; + virtual long __stdcall EndMethodEnumeration( void) = 0; - - virtual long __stdcall GetMethodQualifierSet( + + virtual long __stdcall GetMethodQualifierSet( /* [string][in] */ const wchar_t * wszMethod, /* [out] */ void **ppQualSet) = 0; - - virtual long __stdcall GetMethodOrigin( + + virtual long __stdcall GetMethodOrigin( /* [string][in] */ const wchar_t * wszMethodName, /* [out] */ wchar_t * *pstrClassName) = 0; - + }; -struct IWbemContext_IG : public IUnknown_IG +struct IWbemContext_BIPC : public IUnknown_BIPC { public: - virtual long __stdcall Clone( - /* [out] */ IWbemContext_IG **ppNewCopy) = 0; - - virtual long __stdcall GetNames( + virtual long __stdcall Clone( + /* [out] */ IWbemContext_BIPC **ppNewCopy) = 0; + + virtual long __stdcall GetNames( /* [in] */ long lFlags, /* [out] */ void * *pNames) = 0; - - virtual long __stdcall BeginEnumeration( + + virtual long __stdcall BeginEnumeration( /* [in] */ long lFlags) = 0; - - virtual long __stdcall Next( + + virtual long __stdcall Next( /* [in] */ long lFlags, /* [out] */ wchar_t * *pstrName, /* [out] */ wchar_variant *pValue) = 0; - + virtual long __stdcall EndEnumeration( void) = 0; - - virtual long __stdcall SetValue( + + virtual long __stdcall SetValue( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags, /* [in] */ wchar_variant *pValue) = 0; - - virtual long __stdcall GetValue( + + virtual long __stdcall GetValue( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags, /* [out] */ wchar_variant *pValue) = 0; - - virtual long __stdcall DeleteValue( + + virtual long __stdcall DeleteValue( /* [string][in] */ const wchar_t * wszName, /* [in] */ long lFlags) = 0; - + virtual long __stdcall DeleteAll( void) = 0; - + }; -struct IEnumWbemClassObject_IG : public IUnknown_IG +struct IEnumWbemClassObject_BIPC : public IUnknown_BIPC { public: virtual long __stdcall Reset( void) = 0; - - virtual long __stdcall Next( + + virtual long __stdcall Next( /* [in] */ long lTimeout, /* [in] */ unsigned long uCount, - /* [length_is][size_is][out] */ IWbemClassObject_IG **apObjects, + /* [length_is][size_is][out] */ IWbemClassObject_BIPC **apObjects, /* [out] */ unsigned long *puReturned) = 0; - - virtual long __stdcall NextAsync( + + virtual long __stdcall NextAsync( /* [in] */ unsigned long uCount, /* [in] */ void *pSink) = 0; - - virtual long __stdcall Clone( + + virtual long __stdcall Clone( /* [out] */ void **ppEnum) = 0; - - virtual long __stdcall Skip( + + virtual long __stdcall Skip( /* [in] */ long lTimeout, /* [in] */ unsigned long nCount) = 0; - + }; -struct IWbemServices_IG : public IUnknown_IG +struct IWbemServices_BIPC : public IUnknown_BIPC { public: - virtual long __stdcall OpenNamespace( + virtual long __stdcall OpenNamespace( /* [in] */ const wchar_t * strNamespace, /* [in] */ long lFlags, /* [in] */ void *pCtx, /* [unique][in][out] */ void **ppWorkingNamespace, /* [unique][in][out] */ void **ppResult) = 0; - - virtual long __stdcall CancelAsyncCall( + + virtual long __stdcall CancelAsyncCall( /* [in] */ void *pSink) = 0; - - virtual long __stdcall QueryObjectSink( + + virtual long __stdcall QueryObjectSink( /* [in] */ long lFlags, /* [out] */ void **ppResponseHandler) = 0; - - virtual long __stdcall GetObject( + + virtual long __stdcall GetObject( /* [in] */ const wchar_t * strObjectPath, /* [in] */ long lFlags, /* [in] */ void *pCtx, /* [unique][in][out] */ void **ppObject, /* [unique][in][out] */ void **ppCallResult) = 0; - - virtual long __stdcall GetObjectAsync( - /* [in] */ const wchar_t * strObjectPath, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall PutClass( - /* [in] */ IWbemClassObject_IG *pObject, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [unique][in][out] */ void **ppCallResult) = 0; - - virtual long __stdcall PutClassAsync( - /* [in] */ IWbemClassObject_IG *pObject, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall DeleteClass( - /* [in] */ const wchar_t * strClass, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [unique][in][out] */ void **ppCallResult) = 0; - - virtual long __stdcall DeleteClassAsync( - /* [in] */ const wchar_t * strClass, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall CreateClassEnum( - /* [in] */ const wchar_t * strSuperclass, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [out] */ void **ppEnum) = 0; - - virtual long __stdcall CreateClassEnumAsync( - /* [in] */ const wchar_t * strSuperclass, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall PutInstance( - /* [in] */ void *pInst, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [unique][in][out] */ void **ppCallResult) = 0; - - virtual long __stdcall PutInstanceAsync( - /* [in] */ void *pInst, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall DeleteInstance( - /* [in] */ const wchar_t * strObjectPath, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [unique][in][out] */ void **ppCallResult) = 0; - - virtual long __stdcall DeleteInstanceAsync( - /* [in] */ const wchar_t * strObjectPath, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall CreateInstanceEnum( - /* [in] */ const wchar_t * strFilter, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [out] */ void **ppEnum) = 0; - - virtual long __stdcall CreateInstanceEnumAsync( - /* [in] */ const wchar_t * strFilter, - /* [in] */ long lFlags, - /* [in] */ void *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall ExecQuery( - /* [in] */ const wchar_t * strQueryLanguage, - /* [in] */ const wchar_t * strQuery, - /* [in] */ long lFlags, - /* [in] */ IWbemContext_IG *pCtx, - /* [out] */ IEnumWbemClassObject_IG **ppEnum) = 0; - virtual long __stdcall ExecQueryAsync( - /* [in] */ const wchar_t * strQueryLanguage, - /* [in] */ const wchar_t * strQuery, - /* [in] */ long lFlags, - /* [in] */ IWbemContext_IG *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall ExecNotificationQuery( - /* [in] */ const wchar_t * strQueryLanguage, - /* [in] */ const wchar_t * strQuery, - /* [in] */ long lFlags, - /* [in] */ IWbemContext_IG *pCtx, - /* [out] */ void **ppEnum) = 0; - - virtual long __stdcall ExecNotificationQueryAsync( - /* [in] */ const wchar_t * strQueryLanguage, - /* [in] */ const wchar_t * strQuery, - /* [in] */ long lFlags, - /* [in] */ IWbemContext_IG *pCtx, - /* [in] */ void *pResponseHandler) = 0; - - virtual long __stdcall ExecMethod( + virtual long __stdcall GetObjectAsync( /* [in] */ const wchar_t * strObjectPath, - /* [in] */ const wchar_t * strMethodName, /* [in] */ long lFlags, - /* [in] */ IWbemContext_IG *pCtx, - /* [in] */ IWbemClassObject_IG *pInParams, - /* [unique][in][out] */ IWbemClassObject_IG **ppOutParams, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall PutClass( + /* [in] */ IWbemClassObject_BIPC *pObject, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, /* [unique][in][out] */ void **ppCallResult) = 0; - - virtual long __stdcall ExecMethodAsync( + + virtual long __stdcall PutClassAsync( + /* [in] */ IWbemClassObject_BIPC *pObject, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall DeleteClass( + /* [in] */ const wchar_t * strClass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall DeleteClassAsync( + /* [in] */ const wchar_t * strClass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall CreateClassEnum( + /* [in] */ const wchar_t * strSuperclass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall CreateClassEnumAsync( + /* [in] */ const wchar_t * strSuperclass, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall PutInstance( + /* [in] */ void *pInst, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall PutInstanceAsync( + /* [in] */ void *pInst, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall DeleteInstance( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall DeleteInstanceAsync( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall CreateInstanceEnum( + /* [in] */ const wchar_t * strFilter, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall CreateInstanceEnumAsync( + /* [in] */ const wchar_t * strFilter, + /* [in] */ long lFlags, + /* [in] */ void *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall ExecQuery( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [out] */ IEnumWbemClassObject_BIPC **ppEnum) = 0; + + virtual long __stdcall ExecQueryAsync( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall ExecNotificationQuery( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [out] */ void **ppEnum) = 0; + + virtual long __stdcall ExecNotificationQueryAsync( + /* [in] */ const wchar_t * strQueryLanguage, + /* [in] */ const wchar_t * strQuery, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ void *pResponseHandler) = 0; + + virtual long __stdcall ExecMethod( /* [in] */ const wchar_t * strObjectPath, /* [in] */ const wchar_t * strMethodName, /* [in] */ long lFlags, - /* [in] */ IWbemContext_IG *pCtx, - /* [in] */ IWbemClassObject_IG *pInParams, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ IWbemClassObject_BIPC *pInParams, + /* [unique][in][out] */ IWbemClassObject_BIPC **ppOutParams, + /* [unique][in][out] */ void **ppCallResult) = 0; + + virtual long __stdcall ExecMethodAsync( + /* [in] */ const wchar_t * strObjectPath, + /* [in] */ const wchar_t * strMethodName, + /* [in] */ long lFlags, + /* [in] */ IWbemContext_BIPC *pCtx, + /* [in] */ IWbemClassObject_BIPC *pInParams, /* [in] */ void *pResponseHandler) = 0; - + }; -struct IWbemLocator_IG : public IUnknown_IG +struct IWbemLocator_BIPC : public IUnknown_BIPC { public: - virtual long __stdcall ConnectServer( + virtual long __stdcall ConnectServer( /* [in] */ const wchar_t * strNetworkResource, /* [in] */ const wchar_t * strUser, /* [in] */ const wchar_t * strPassword, @@ -544,13 +581,13 @@ public: /* [in] */ long lSecurityFlags, /* [in] */ const wchar_t * strAuthority, /* [in] */ void *pCtx, - /* [out] */ IWbemServices_IG **ppNamespace) = 0; - + /* [out] */ IWbemServices_BIPC **ppNamespace) = 0; + }; - -struct interprocess_overlapped + +struct interprocess_overlapped { unsigned long *internal; unsigned long *internal_high; @@ -565,9 +602,22 @@ struct interprocess_overlapped void *h_event; }; +struct interprocess_semaphore_basic_information +{ + unsigned int count; // current semaphore count + unsigned int limit; // max semaphore count +}; + +struct interprocess_section_basic_information +{ + void * base_address; + unsigned long section_attributes; + __int64 section_size; +}; + struct interprocess_filetime -{ - unsigned long dwLowDateTime; +{ + unsigned long dwLowDateTime; unsigned long dwHighDateTime; }; @@ -611,16 +661,16 @@ struct system_info { unsigned short wProcessorRevision; }; -struct interprocess_memory_basic_information +typedef struct _interprocess_memory_basic_information { - void * BaseAddress; + void * BaseAddress; void * AllocationBase; unsigned long AllocationProtect; unsigned long RegionSize; unsigned long State; unsigned long Protect; unsigned long Type; -}; +} interprocess_memory_basic_information; typedef struct _interprocess_acl { @@ -686,6 +736,10 @@ enum file_information_class_t { file_maximum_information }; +enum semaphore_information_class { + semaphore_basic_information = 0 +}; + struct file_name_information_t { unsigned long FileNameLength; wchar_t FileName[1]; @@ -770,6 +824,12 @@ enum object_information_class object_data_information }; +enum section_information_class +{ + section_basic_information, + section_image_information +}; + struct object_name_information_t { unicode_string_t Name; @@ -784,7 +844,9 @@ extern "C" __declspec(dllimport) int __stdcall GetProcessTimes , interprocess_filetime *lpExitTime,interprocess_filetime *lpKernelTime , interprocess_filetime *lpUserTime ); extern "C" __declspec(dllimport) void __stdcall Sleep(unsigned long); +extern "C" __declspec(dllimport) int __stdcall SwitchToThread(); extern "C" __declspec(dllimport) unsigned long __stdcall GetLastError(); +extern "C" __declspec(dllimport) void __stdcall SetLastError(unsigned long); extern "C" __declspec(dllimport) void * __stdcall GetCurrentProcess(); extern "C" __declspec(dllimport) int __stdcall CloseHandle(void*); extern "C" __declspec(dllimport) int __stdcall DuplicateHandle @@ -792,11 +854,12 @@ extern "C" __declspec(dllimport) int __stdcall DuplicateHandle , void *hTargetProcessHandle, void **lpTargetHandle , unsigned long dwDesiredAccess, int bInheritHandle , unsigned long dwOptions); +extern "C" __declspec(dllimport) long __stdcall GetFileType(void *hFile); extern "C" __declspec(dllimport) void *__stdcall FindFirstFileA(const char *lpFileName, win32_find_data_t *lpFindFileData); extern "C" __declspec(dllimport) int __stdcall FindNextFileA(void *hFindFile, win32_find_data_t *lpFindFileData); extern "C" __declspec(dllimport) int __stdcall FindClose(void *hFindFile); -extern "C" __declspec(dllimport) void __stdcall GetSystemTimeAsFileTime(interprocess_filetime*); -extern "C" __declspec(dllimport) int __stdcall FileTimeToLocalFileTime(const interprocess_filetime *in, const interprocess_filetime *out); +//extern "C" __declspec(dllimport) void __stdcall GetSystemTimeAsFileTime(interprocess_filetime*); +//extern "C" __declspec(dllimport) int __stdcall FileTimeToLocalFileTime(const interprocess_filetime *in, const interprocess_filetime *out); extern "C" __declspec(dllimport) void * __stdcall CreateMutexA(interprocess_security_attributes*, int, const char *); extern "C" __declspec(dllimport) void * __stdcall OpenMutexA(unsigned long, int, const char *); extern "C" __declspec(dllimport) unsigned long __stdcall WaitForSingleObject(void *, unsigned long); @@ -816,10 +879,11 @@ extern "C" __declspec(dllimport) int __stdcall FlushViewOfFile (void *, std::siz extern "C" __declspec(dllimport) int __stdcall FlushFileBuffers (void *); extern "C" __declspec(dllimport) int __stdcall GetFileSizeEx (void *, __int64 *size); extern "C" __declspec(dllimport) unsigned long __stdcall FormatMessageA - (unsigned long dwFlags, const void *lpSource, unsigned long dwMessageId, - unsigned long dwLanguageId, char *lpBuffer, unsigned long nSize, + (unsigned long dwFlags, const void *lpSource, unsigned long dwMessageId, + unsigned long dwLanguageId, char *lpBuffer, unsigned long nSize, std::va_list *Arguments); extern "C" __declspec(dllimport) void *__stdcall LocalFree (void *); +extern "C" __declspec(dllimport) unsigned long __stdcall GetFileAttributesA(const char *); extern "C" __declspec(dllimport) int __stdcall CreateDirectoryA(const char *, interprocess_security_attributes*); extern "C" __declspec(dllimport) int __stdcall RemoveDirectoryA(const char *lpPathName); extern "C" __declspec(dllimport) int __stdcall GetTempPathA(unsigned long length, char *buffer); @@ -832,6 +896,7 @@ extern "C" __declspec(dllimport) int __stdcall UnlockFile(void *hnd, unsigned lo extern "C" __declspec(dllimport) int __stdcall LockFileEx(void *hnd, unsigned long flags, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped* overlapped); extern "C" __declspec(dllimport) int __stdcall UnlockFileEx(void *hnd, unsigned long reserved, unsigned long size_low, unsigned long size_high, interprocess_overlapped* overlapped); extern "C" __declspec(dllimport) int __stdcall WriteFile(void *hnd, const void *buffer, unsigned long bytes_to_write, unsigned long *bytes_written, interprocess_overlapped* overlapped); +extern "C" __declspec(dllimport) int __stdcall ReadFile(void *hnd, void *buffer, unsigned long bytes_to_read, unsigned long *bytes_read, interprocess_overlapped* overlapped); extern "C" __declspec(dllimport) int __stdcall InitializeSecurityDescriptor(interprocess_security_descriptor *pSecurityDescriptor, unsigned long dwRevision); extern "C" __declspec(dllimport) int __stdcall SetSecurityDescriptorDacl(interprocess_security_descriptor *pSecurityDescriptor, int bDaclPresent, interprocess_acl *pDacl, int bDaclDefaulted); extern "C" __declspec(dllimport) void *__stdcall LoadLibraryA(const char *); @@ -839,32 +904,50 @@ extern "C" __declspec(dllimport) int __stdcall FreeLibrary(void *); extern "C" __declspec(dllimport) void *__stdcall GetProcAddress(void *, const char*); extern "C" __declspec(dllimport) void *__stdcall GetModuleHandleA(const char*); extern "C" __declspec(dllimport) void *__stdcall GetFileInformationByHandle(void *, interprocess_by_handle_file_information*); - +extern "C" __declspec(dllimport) unsigned long __stdcall GetMappedFileNameW(void *, void *, wchar_t *, unsigned long); +extern "C" __declspec(dllimport) long __stdcall RegOpenKeyExA(void *, const char *, unsigned long, unsigned long, void **); +extern "C" __declspec(dllimport) long __stdcall RegQueryValueExA(void *, const char *, unsigned long*, unsigned long*, unsigned char *, unsigned long*); +extern "C" __declspec(dllimport) long __stdcall RegCloseKey(void *); +extern "C" __declspec(dllimport) int __stdcall QueryPerformanceCounter(__int64 *lpPerformanceCount); //COM API -extern "C" __declspec(dllimport) long __stdcall CoInitialize(void *pvReserved); +extern "C" __declspec(dllimport) long __stdcall CoInitializeEx(void *pvReserved, unsigned long dwCoInit); extern "C" __declspec(dllimport) long __stdcall CoInitializeSecurity( - void* pSecDesc, - long cAuthSvc, - void *asAuthSvc, - void *pReserved1, - unsigned long dwAuthnLevel, - unsigned long dwImpLevel, - void *pAuthList, - unsigned long dwCapabilities, - void *pReserved3 ); + void* pSecDesc, + long cAuthSvc, + void * asAuthSvc, + void *pReserved1, + unsigned long dwAuthnLevel, + unsigned long dwImpLevel, + void *pAuthList, + unsigned long dwCapabilities, + void *pReserved3 ); + + extern "C" __declspec(dllimport) long __stdcall CoSetProxyBlanket( + IUnknown_BIPC *pProxy, + unsigned long dwAuthnSvc, + unsigned long dwAuthzSvc, + wchar_t *pServerPrincName, + unsigned long dwAuthnLevel, + unsigned long dwImpLevel, + void *pAuthInfo, + unsigned long dwCapabilities); extern "C" __declspec(dllimport) long __stdcall VariantClear(wchar_variant * pvarg); -extern "C" __declspec(dllimport) long __stdcall CoCreateInstance(const GUID_IG & rclsid, IUnknown_IG *pUnkOuter, - unsigned long dwClsContext, const GUID_IG & riid, void** ppv); +extern "C" __declspec(dllimport) long __stdcall CoCreateInstance(const GUID_BIPC & rclsid, IUnknown_BIPC *pUnkOuter, + unsigned long dwClsContext, const GUID_BIPC & riid, void** ppv); extern "C" __declspec(dllimport) void __stdcall CoUninitialize(void); //API function typedefs //Pointer to functions -typedef long (__stdcall *NtDeleteFile_t)(object_attributes_t *ObjectAttributes); -typedef long (__stdcall *NtSetInformationFile_t)(void *FileHandle, io_status_block_t *IoStatusBlock, void *FileInformation, unsigned long Length, int FileInformationClass ); +typedef long (__stdcall *NtDeleteFile_t)(object_attributes_t *ObjectAttributes); +typedef long (__stdcall *NtSetInformationFile_t)(void *FileHandle, io_status_block_t *IoStatusBlock, void *FileInformation, unsigned long Length, int FileInformationClass ); +typedef long (__stdcall *NtQuerySystemInformation_t)(int, void*, unsigned long, unsigned long *); +typedef long (__stdcall *NtQueryObject_t)(void*, object_information_class, void *, unsigned long, unsigned long *); +typedef long (__stdcall *NtQuerySemaphore_t)(void*, unsigned int info_class, interprocess_semaphore_basic_information *pinfo, unsigned int info_size, unsigned int *ret_len); +typedef long (__stdcall *NtQuerySection_t)(void*, section_information_class, interprocess_section_basic_information *pinfo, unsigned long info_size, unsigned long *ret_len); typedef long (__stdcall *NtQueryInformationFile_t)(void *,io_status_block_t *,void *, long, int); typedef long (__stdcall *NtOpenFile_t)(void*,unsigned long ,object_attributes_t*,io_status_block_t*,unsigned long,unsigned long); typedef long (__stdcall *NtClose_t) (void*); @@ -872,13 +955,8 @@ typedef long (__stdcall *RtlCreateUnicodeStringFromAsciiz_t)(unicode_string_t *, typedef void (__stdcall *RtlFreeUnicodeString_t)(unicode_string_t *); typedef void (__stdcall *RtlInitUnicodeString_t)( unicode_string_t *, const wchar_t * ); typedef long (__stdcall *RtlAppendUnicodeToString_t)(unicode_string_t *Destination, const wchar_t *Source); -typedef long (__stdcall * NtQuerySystemInformation_t)(int, void*, unsigned long, unsigned long *); -typedef long (__stdcall * NtQueryObject_t)(void*, object_information_class, void *, unsigned long, unsigned long *); typedef unsigned long (__stdcall * GetMappedFileName_t)(void *, void *, wchar_t *, unsigned long); -typedef unsigned long (__stdcall * GetMappedFileName_t)(void *, void *, wchar_t *, unsigned long); -typedef long (__stdcall * RegOpenKey_t)(void *, const char *, void **); typedef long (__stdcall * RegOpenKeyEx_t)(void *, const char *, unsigned long, unsigned long, void **); -typedef long (__stdcall * RegQueryValue_t)(void *, const char *, char *, long*); typedef long (__stdcall * RegQueryValueEx_t)(void *, const char *, unsigned long*, unsigned long*, unsigned char *, unsigned long*); typedef long (__stdcall * RegCloseKey_t)(void *); @@ -893,6 +971,9 @@ namespace winapi { inline unsigned long get_last_error() { return GetLastError(); } +inline void set_last_error(unsigned long err) +{ return SetLastError(err); } + inline unsigned long format_message (unsigned long dwFlags, const void *lpSource, unsigned long dwMessageId, unsigned long dwLanguageId, @@ -910,7 +991,14 @@ inline unsigned long make_lang_id(unsigned long p, unsigned long s) { return ((((unsigned short)(s)) << 10) | (unsigned short)(p)); } inline void sched_yield() -{ Sleep(1); } +{ + if(!SwitchToThread()){ + Sleep(1); + } +} + +inline void sleep(unsigned long ms) +{ Sleep(ms); } inline unsigned long get_current_thread_id() { return GetCurrentThreadId(); } @@ -945,18 +1033,21 @@ inline bool duplicate_current_process_handle , duplicate_same_access); } +inline long get_file_type(void *hFile) +{ + return GetFileType(hFile); +} + +/* inline void get_system_time_as_file_time(interprocess_filetime *filetime) { GetSystemTimeAsFileTime(filetime); } inline bool file_time_to_local_file_time (const interprocess_filetime *in, const interprocess_filetime *out) { return 0 != FileTimeToLocalFileTime(in, out); } - -inline void *create_mutex(const char *name) -{ return CreateMutexA(0, 0, name); } - -inline void *open_mutex(const char *name) -{ return OpenMutexA(mutex_all_access, 0, name); } +*/ +inline void *open_or_create_mutex(const char *name, bool initial_owner, interprocess_security_attributes *attr) +{ return CreateMutexA(attr, (int)initial_owner, name); } inline unsigned long wait_for_single_object(void *handle, unsigned long time) { return WaitForSingleObject(handle, time); } @@ -967,19 +1058,19 @@ inline int release_mutex(void *handle) inline int unmap_view_of_file(void *address) { return UnmapViewOfFile(address); } -inline void *create_semaphore(long initialCount, const char *name) -{ return CreateSemaphoreA(0, initialCount, (long)(((unsigned long)(-1))>>1), name); } +inline void *open_or_create_semaphore(const char *name, long initial_count, long maximum_count, interprocess_security_attributes *attr) +{ return CreateSemaphoreA(attr, initial_count, maximum_count, name); } + +inline void *open_semaphore(const char *name) +{ return OpenSemaphoreA(semaphore_all_access, 0, name); } inline int release_semaphore(void *handle, long release_count, long *prev_count) { return ReleaseSemaphore(handle, release_count, prev_count); } -inline void *open_semaphore(const char *name) -{ return OpenSemaphoreA(semaphore_all_access, 1, name); } - class interprocess_all_access_security { interprocess_security_attributes sa; - interprocess_security_descriptor sd; + interprocess_security_descriptor sd; bool initialized; public: @@ -1000,16 +1091,21 @@ class interprocess_all_access_security { return &sa; } }; -inline void * create_file_mapping (void * handle, unsigned long access, unsigned long high_size, unsigned long low_size, const char * name, interprocess_security_attributes *psec) +inline void * create_file_mapping (void * handle, unsigned long access, unsigned __int64 file_offset, const char * name, interprocess_security_attributes *psec) { - return CreateFileMappingA (handle, psec, access, high_size, low_size, name); + const unsigned long high_size(file_offset >> 32), low_size((boost::uint32_t)file_offset); + return CreateFileMappingA (handle, psec, access, high_size, low_size, name); } inline void * open_file_mapping (unsigned long access, const char *name) { return OpenFileMappingA (access, 0, name); } -inline void *map_view_of_file_ex(void *handle, unsigned long file_access, unsigned long highoffset, unsigned long lowoffset, std::size_t numbytes, void *base_addr) -{ return MapViewOfFileEx(handle, file_access, highoffset, lowoffset, numbytes, base_addr); } +inline void *map_view_of_file_ex(void *handle, unsigned long file_access, unsigned __int64 offset, std::size_t numbytes, void *base_addr) +{ + const unsigned long offset_low = (unsigned long)(offset & ((unsigned __int64)0xFFFFFFFF)); + const unsigned long offset_high = offset >> 32; + return MapViewOfFileEx(handle, file_access, offset_high, offset_low, numbytes, base_addr); +} inline void *create_file(const char *name, unsigned long access, unsigned long creation_flags, unsigned long attributes, interprocess_security_attributes *psec) { @@ -1024,7 +1120,7 @@ inline void *create_file(const char *name, unsigned long access, unsigned long c if (error_sharing_violation != get_last_error()){ return handle; } - Sleep(error_sharing_violation_sleep_ms); + sleep(error_sharing_violation_sleep_ms); } return invalid_handle_value; } @@ -1048,9 +1144,9 @@ inline bool get_file_size(void *handle, __int64 &size) { return 0 != GetFileSizeEx(handle, &size); } inline bool create_directory(const char *name) -{ +{ interprocess_all_access_security sec; - return 0 != CreateDirectoryA(name, sec.get_attributes()); + return 0 != CreateDirectoryA(name, sec.get_attributes()); } inline bool remove_directory(const char *lpPathName) @@ -1074,6 +1170,9 @@ inline bool unlock_file_ex(void *hnd, unsigned long reserved, unsigned long size inline bool write_file(void *hnd, const void *buffer, unsigned long bytes_to_write, unsigned long *bytes_written, interprocess_overlapped* overlapped) { return 0 != WriteFile(hnd, buffer, bytes_to_write, bytes_written, overlapped); } +inline bool read_file(void *hnd, void *buffer, unsigned long bytes_to_read, unsigned long *bytes_read, interprocess_overlapped* overlapped) +{ return 0 != ReadFile(hnd, buffer, bytes_to_read, bytes_read, overlapped); } + inline bool get_file_information_by_handle(void *hnd, interprocess_by_handle_file_information *info) { return 0 != GetFileInformationByHandle(hnd, info); } @@ -1108,6 +1207,23 @@ inline void *get_current_process() inline void *get_module_handle(const char *name) { return GetModuleHandleA(name); } +inline unsigned long get_mapped_file_name(void *process, void *lpv, wchar_t *lpfilename, unsigned long nSize) +{ return GetMappedFileNameW(process, lpv, lpfilename, nSize); } + +inline long reg_open_key_ex(void *hKey, const char *lpSubKey, unsigned long ulOptions, unsigned long samDesired, void **phkResult) +{ return RegOpenKeyExA(hKey, lpSubKey, ulOptions, samDesired, phkResult); } + +inline long reg_query_value_ex(void *hKey, const char *lpValueName, unsigned long*lpReserved, unsigned long*lpType, unsigned char *lpData, unsigned long*lpcbData) +{ return RegQueryValueExA(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData); } + +inline long reg_close_key(void *hKey) +{ return RegCloseKey(hKey); } + +inline bool query_performance_counter(__int64 *lpPerformanceCount) +{ + return 0 != QueryPerformanceCounter(lpPerformanceCount); +} + inline void initialize_object_attributes ( object_attributes_t *pobject_attr, unicode_string_t *name , unsigned long attr, void *rootdir, void *security_descr) @@ -1128,6 +1244,88 @@ inline void rtl_init_empty_unicode_string(unicode_string_t *ucStr, wchar_t *buf, ucStr->MaximumLength = bufSize; } +//A class that locates and caches loaded DLL function addresses. +template +struct function_address_holder +{ + enum { NtSetInformationFile, NtQuerySystemInformation, NtQueryObject, NtQuerySemaphore, NtQuerySection, NumFunction }; + enum { NtDll_dll, NumModule }; + + private: + static void *FunctionAddresses[NumFunction]; + static volatile long FunctionStates[NumFunction]; + static void *ModuleAddresses[NumModule]; + static volatile long ModuleStates[NumModule]; + + static void *get_module_from_id(unsigned int id) + { + assert(id < (unsigned int)NumModule); + const char *module[] = { "ntdll.dll" }; + bool compile_check[sizeof(module)/sizeof(module[0]) == NumModule]; + (void)compile_check; + return get_module_handle(module[id]); + } + + static void *get_module(const unsigned int id) + { + assert(id < (unsigned int)NumModule); + while(ModuleStates[id] < 2){ + if(interlocked_compare_exchange(&ModuleStates[id], 1, 0) == 0){ + ModuleAddresses[id] = get_module_from_id(id); + interlocked_increment(&ModuleStates[id]); + break; + } + else{ + sched_yield(); + } + } + return ModuleAddresses[id]; + } + + static void *get_address_from_dll(const unsigned int id) + { + assert(id < (unsigned int)NumFunction); + const char *function[] = { "NtSetInformationFile", "NtQuerySystemInformation", "NtQueryObject", "NtQuerySemaphore", "NtQuerySection" }; + bool compile_check[sizeof(function)/sizeof(function[0]) == NumFunction]; + (void)compile_check; + return get_proc_address(get_module(NtDll_dll), function[id]); + } + + public: + static void *get(const unsigned int id) + { + assert(id < (unsigned int)NumFunction); + while(FunctionStates[id] < 2){ + if(interlocked_compare_exchange(&FunctionStates[id], 1, 0) == 0){ + FunctionAddresses[id] = get_address_from_dll(id); + interlocked_increment(&FunctionStates[id]); + break; + } + else{ + sched_yield(); + } + } + return FunctionAddresses[id]; + } +}; + +template +void *function_address_holder::FunctionAddresses[function_address_holder::NumFunction]; + +template +volatile long function_address_holder::FunctionStates[function_address_holder::NumFunction]; + +template +void *function_address_holder::ModuleAddresses[function_address_holder::NumModule]; + +template +volatile long function_address_holder::ModuleStates[function_address_holder::NumModule]; + + +struct dll_func + : public function_address_holder<0> +{}; + //Complex winapi based functions... struct library_unloader { @@ -1138,39 +1336,38 @@ struct library_unloader //pszFilename must have room for at least MaxPath+1 characters inline bool get_file_name_from_handle_function - (void * hFile, wchar_t *pszFilename, std::size_t length, std::size_t &out_length) + (void * hFile, wchar_t *pszFilename, std::size_t length, std::size_t &out_length) { if(length <= MaxPath){ return false; } - void *hiPSAPI = load_library("PSAPI.DLL"); - if (0 == hiPSAPI) - return 0; +// void *hiPSAPI = load_library("PSAPI.DLL"); +// if (0 == hiPSAPI) +// return 0; +// library_unloader unloader(hiPSAPI); - library_unloader unloader(hiPSAPI); - - // Pointer to function getMappedFileName() in PSAPI.DLL - GetMappedFileName_t pfGMFN = - (GetMappedFileName_t)get_proc_address(hiPSAPI, "GetMappedFileNameW"); - if (! pfGMFN){ - return 0; // Failed: unexpected error - } +// Pointer to function getMappedFileName() in PSAPI.DLL +// GetMappedFileName_t pfGMFN = +// (GetMappedFileName_t)get_proc_address(hiPSAPI, "GetMappedFileNameW"); +// if (! pfGMFN){ +// return 0; // Failed: unexpected error +// } bool bSuccess = false; // Create a file mapping object. - void * hFileMap = create_file_mapping(hFile, page_readonly, 0, 1, 0, 0); - if(hFileMap) - { + void * hFileMap = create_file_mapping(hFile, page_readonly, 1, 0, 0); + if(hFileMap){ // Create a file mapping to get the file name. - void* pMem = map_view_of_file_ex(hFileMap, file_map_read, 0, 0, 1, 0); + void* pMem = map_view_of_file_ex(hFileMap, file_map_read, 0, 1, 0); if (pMem){ - out_length = pfGMFN(get_current_process(), pMem, pszFilename, MaxPath); + //out_length = pfGMFN(get_current_process(), pMem, pszFilename, MaxPath); + out_length = get_mapped_file_name(get_current_process(), pMem, pszFilename, MaxPath); if(out_length){ bSuccess = true; - } + } unmap_view_of_file(pMem); } close_handle(hFileMap); @@ -1182,7 +1379,7 @@ inline bool get_file_name_from_handle_function inline bool get_system_time_of_day_information(system_timeofday_information &info) { NtQuerySystemInformation_t pNtQuerySystemInformation = (NtQuerySystemInformation_t) - get_proc_address(get_module_handle("ntdll.dll"), "NtQuerySystemInformation"); + dll_func::get(dll_func::NtQuerySystemInformation); unsigned long res; long status = pNtQuerySystemInformation(system_time_of_day_information, &info, sizeof(info), &res); if(status){ @@ -1258,9 +1455,12 @@ inline bool get_boot_and_system_time_wstr(wchar_t *bootsystemstamp, std::size_t class handle_closer { void *handle_; + handle_closer(const handle_closer &); + handle_closer& operator=(const handle_closer &); public: - handle_closer(void *handle) : handle_(handle){} - ~handle_closer(){ close_handle(handle_); } + explicit handle_closer(void *handle) : handle_(handle){} + ~handle_closer() + { close_handle(handle_); } }; union ntquery_mem_t @@ -1275,19 +1475,34 @@ union ntquery_mem_t inline bool unlink_file(const char *filename) { + //Don't try to optimize doing a DeleteFile first + //as there are interactions with permissions and + //in-use files. + // + //if(!delete_file(filename)){ + // (...) + // + + //This functions tries to emulate UNIX unlink semantics in windows. + // + //- Open the file and mark the handle as delete-on-close + //- Rename the file to an arbitrary name based on a random number + //- Close the handle. If there are no file users, it will be deleted. + // Otherwise it will be used by already connected handles but the + // file name can't be used to open this file again try{ NtSetInformationFile_t pNtSetInformationFile = - (NtSetInformationFile_t)get_proc_address(get_module_handle("ntdll.dll"), "NtSetInformationFile"); + (NtSetInformationFile_t)dll_func::get(dll_func::NtSetInformationFile); if(!pNtSetInformationFile){ return false; } NtQueryObject_t pNtQueryObject = - (NtQueryObject_t)get_proc_address(get_module_handle("ntdll.dll"), "NtQueryObject"); + (NtQueryObject_t)dll_func::get(dll_func::NtQueryObject); //First step: Obtain a handle to the file using Win32 rules. This resolves relative paths void *fh = create_file(filename, generic_read | delete_access, open_existing, - file_flag_backup_semantics | file_flag_delete_on_close, 0); + file_flag_backup_semantics | file_flag_delete_on_close, 0); if(fh == invalid_handle_value){ return false; } @@ -1295,7 +1510,7 @@ inline bool unlink_file(const char *filename) handle_closer h_closer(fh); std::auto_ptr pmem(new ntquery_mem_t); - file_rename_information_t *pfri = (file_rename_information_t*)&pmem->ren.info; + file_rename_information_t *pfri = &pmem->ren.info; const std::size_t RenMaxNumChars = ((char*)pmem.get() - (char*)&pmem->ren.info.FileName[0])/sizeof(wchar_t); @@ -1347,113 +1562,93 @@ inline bool unlink_file(const char *filename) catch(...){ return false; } + return true; } struct reg_closer { - RegCloseKey_t func_; + //reg_closer(RegCloseKey_t func, void *key) : func_(func), key_(key){} + //~reg_closer(){ (*func_)(key_); } + //RegCloseKey_t func_; void *key_; - reg_closer(RegCloseKey_t func, void *key) : func_(func), key_(key){} - ~reg_closer(){ (*func_)(key_); } + reg_closer(void *key) : key_(key){} + ~reg_closer(){ reg_close_key(key_); } }; inline void get_shared_documents_folder(std::string &s) { s.clear(); - void *hAdvapi = load_library("Advapi32.dll"); - if (hAdvapi){ - library_unloader unloader(hAdvapi); - // Pointer to function RegOpenKeyA - RegOpenKeyEx_t pRegOpenKey = - (RegOpenKeyEx_t)get_proc_address(hAdvapi, "RegOpenKeyExA"); - if (pRegOpenKey){ - // Pointer to function RegCloseKey - RegCloseKey_t pRegCloseKey = - (RegCloseKey_t)get_proc_address(hAdvapi, "RegCloseKey"); - if (pRegCloseKey){ - // Pointer to function RegQueryValueA - RegQueryValueEx_t pRegQueryValue = - (RegQueryValueEx_t)get_proc_address(hAdvapi, "RegQueryValueExA"); - if (pRegQueryValue){ - //Open the key - void *key; - if ((*pRegOpenKey)( hkey_local_machine - , "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" - , 0 - , key_query_value - , &key) == 0){ - reg_closer key_closer(pRegCloseKey, key); + void *key; + if (reg_open_key_ex( hkey_local_machine + , "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" + , 0 + , key_query_value + , &key) == 0){ + reg_closer key_closer(key); - //Obtain the value - unsigned long size; - unsigned long type; - const char *const reg_value = "Common AppData"; - long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); - if(!err){ - //Size includes terminating NULL - s.resize(size); - err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); - if(!err) - s.erase(s.end()-1); - (void)err; - } - } - } - } + //Obtain the value + unsigned long size; + unsigned long type; + const char *const reg_value = "Common AppData"; + //long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); + long err = reg_query_value_ex( key, reg_value, 0, &type, 0, &size); + if(!err){ + //Size includes terminating NULL + s.resize(size); + //err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + err = reg_query_value_ex( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + if(!err) + s.erase(s.end()-1); + (void)err; } } } - inline void get_registry_value(const char *folder, const char *value_key, std::vector &s) { s.clear(); - void *hAdvapi = load_library("Advapi32.dll"); - if (hAdvapi){ - library_unloader unloader(hAdvapi); - // Pointer to function RegOpenKeyA - RegOpenKeyEx_t pRegOpenKey = - (RegOpenKeyEx_t)get_proc_address(hAdvapi, "RegOpenKeyExA"); - if (pRegOpenKey){ - // Pointer to function RegCloseKey - RegCloseKey_t pRegCloseKey = - (RegCloseKey_t)get_proc_address(hAdvapi, "RegCloseKey"); - if (pRegCloseKey){ - // Pointer to function RegQueryValueA - RegQueryValueEx_t pRegQueryValue = - (RegQueryValueEx_t)get_proc_address(hAdvapi, "RegQueryValueExA"); - if (pRegQueryValue){ - //Open the key - void *key; - if ((*pRegOpenKey)( hkey_local_machine - , folder - , 0 - , key_query_value - , &key) == 0){ - reg_closer key_closer(pRegCloseKey, key); + void *key; + if (reg_open_key_ex( hkey_local_machine + , folder + , 0 + , key_query_value + , &key) == 0){ + reg_closer key_closer(key); - //Obtain the value - unsigned long size; - unsigned long type; - const char *const reg_value = value_key; - long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); - if(!err){ - //Size includes terminating NULL - s.resize(size); - err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); - if(!err) - s.erase(s.end()-1); - (void)err; - } - } - } - } + //Obtain the value + unsigned long size; + unsigned long type; + const char *const reg_value = value_key; + //long err = (*pRegQueryValue)( key, reg_value, 0, &type, 0, &size); + long err = reg_query_value_ex( key, reg_value, 0, &type, 0, &size); + if(!err){ + //Size includes terminating NULL + s.resize(size); + //err = (*pRegQueryValue)( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + err = reg_query_value_ex( key, reg_value, 0, &type, (unsigned char*)(&s[0]), &size); + if(!err) + s.erase(s.end()-1); + (void)err; } } } struct co_uninitializer -{ ~co_uninitializer() { CoUninitialize(); } }; +{ + co_uninitializer(bool b_uninitialize) + : m_b_uninitialize(b_uninitialize) + {} + + ~co_uninitializer() + { + if(m_b_uninitialize){ + CoUninitialize(); + } + } + + private: + const bool m_b_uninitialize; +}; template struct com_releaser @@ -1466,39 +1661,43 @@ struct com_releaser inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_class, const wchar_t *wmi_class_var) { //See example http://msdn.microsoft.com/en-us/library/aa390423%28v=VS.85%29.aspx - long co_init_ret = CoInitialize(0); - if(co_init_ret != S_OK_IG && co_init_ret != S_FALSE_IG) + // + //See BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL definition if you need to change the + //default value of this macro in your application + long co_init_ret = CoInitializeEx(0, BOOST_INTERPROCESS_WINDOWS_COINIT_MODEL); + if(co_init_ret != S_OK_BIPC && co_init_ret != S_FALSE_BIPC && co_init_ret != RPC_E_CHANGED_MODE_BIPC) return false; - co_uninitializer co_initialize_end; + co_uninitializer co_initialize_end(co_init_ret != RPC_E_CHANGED_MODE_BIPC); + (void)co_initialize_end; bool bRet = false; long sec_init_ret = CoInitializeSecurity - ( 0 //pVoid - ,-1 //cAuthSvc - , 0 //asAuthSvc - , 0 //pReserved1 - , RPC_C_AUTHN_LEVEL_PKT_IG //dwAuthnLevel - , RPC_C_IMP_LEVEL_IMPERSONATE_IG //dwImpLevel - , 0 //pAuthList - , EOAC_NONE_IG //dwCapabilities - , 0 //pReserved3 + ( 0 //pVoid + ,-1 //cAuthSvc + , 0 //asAuthSvc + , 0 //pReserved1 + , RPC_C_AUTHN_LEVEL_PKT_BIPC //dwAuthnLevel + , RPC_C_IMP_LEVEL_IMPERSONATE_BIPC //dwImpLevel + , 0 //pAuthList + , EOAC_NONE_BIPC //dwCapabilities + , 0 //pReserved3 ); - if( 0 == sec_init_ret || RPC_E_TOO_LATE_IG == sec_init_ret) + if( 0 == sec_init_ret || RPC_E_TOO_LATE_BIPC == sec_init_ret) { - IWbemLocator_IG * pIWbemLocator = 0; + IWbemLocator_BIPC * pIWbemLocator = 0; const wchar_t * bstrNamespace = L"root\\cimv2"; - + if( 0 != CoCreateInstance( CLSID_WbemAdministrativeLocator, 0, - CLSCTX_INPROC_SERVER_IG | CLSCTX_LOCAL_SERVER_IG, + CLSCTX_INPROC_SERVER_BIPC | CLSCTX_LOCAL_SERVER_BIPC, IID_IUnknown, (void **)&pIWbemLocator)){ return false; } - - com_releaser IWbemLocator_releaser(pIWbemLocator); - IWbemServices_IG *pWbemServices = 0; + com_releaser IWbemLocator_releaser(pIWbemLocator); + + IWbemServices_BIPC *pWbemServices = 0; if( 0 != pIWbemLocator->ConnectServer( bstrNamespace, // Namespace @@ -1514,7 +1713,21 @@ inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_ return false; } - com_releaser IWbemServices_releaser(pWbemServices); + if( S_OK_BIPC != CoSetProxyBlanket( + pWbemServices, + RPC_C_AUTHN_DEFAULT_BIPC, + RPC_C_AUTHZ_DEFAULT_BIPC, + 0, + RPC_C_AUTHN_LEVEL_PKT_BIPC, + RPC_C_IMP_LEVEL_IMPERSONATE_BIPC, + 0, + EOAC_NONE_BIPC + ) + ){ + return false; + } + + com_releaser IWbemServices_releaser(pWbemServices); strValue.clear(); strValue += L"Select "; @@ -1522,12 +1735,13 @@ inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_ strValue += L" from "; strValue += wmi_class; - IEnumWbemClassObject_IG * pEnumObject = 0; + IEnumWbemClassObject_BIPC * pEnumObject = 0; if ( 0 != pWbemServices->ExecQuery( L"WQL", strValue.c_str(), - WBEM_FLAG_RETURN_IMMEDIATELY_IG, + //WBEM_FLAG_RETURN_IMMEDIATELY_BIPC, + WBEM_FLAG_RETURN_WHEN_COMPLETE_BIPC | WBEM_FLAG_FORWARD_ONLY_BIPC, 0, &pEnumObject ) @@ -1535,18 +1749,19 @@ inline bool get_wmi_class_attribute( std::wstring& strValue, const wchar_t *wmi_ return false; } - com_releaser IEnumWbemClassObject_releaser(pEnumObject); + com_releaser IEnumWbemClassObject_releaser(pEnumObject); - if ( 0 != pEnumObject->Reset() ){ - return false; - } + //WBEM_FLAG_FORWARD_ONLY_BIPC incompatible with Reset + //if ( 0 != pEnumObject->Reset() ){ + //return false; + //} wchar_variant vwchar; unsigned long uCount = 1, uReturned; - IWbemClassObject_IG * pClassObject = 0; - while( 0 == pEnumObject->Next( WBEM_INFINITE_IG, uCount, &pClassObject, &uReturned ) ) + IWbemClassObject_BIPC * pClassObject = 0; + while( 0 == pEnumObject->Next( WBEM_INFINITE_BIPC, uCount, &pClassObject, &uReturned ) ) { - com_releaser IWbemClassObject_releaser(pClassObject); + com_releaser IWbemClassObject_releaser(pClassObject); if ( 0 == pClassObject->Get( L"LastBootUpTime", 0, &vwchar, 0, 0 ) ){ bRet = true; strValue = vwchar.value.pbstrVal; @@ -1583,11 +1798,49 @@ inline bool get_last_bootup_time( std::string& str ) return ret; } +inline bool is_directory(const char *path) +{ + unsigned long attrib = GetFileAttributesA(path); -} //namespace winapi + return (attrib != invalid_file_attributes && + (attrib & file_attribute_directory)); +} + +inline bool get_file_mapping_size(void *file_mapping_hnd, __int64 &size) +{ + NtQuerySection_t pNtQuerySection = + (NtQuerySection_t)dll_func::get(dll_func::NtQuerySection); + //Obtain file name + interprocess_section_basic_information info; + unsigned long ntstatus = + pNtQuerySection(file_mapping_hnd, section_basic_information, &info, sizeof(info), 0); + if(ntstatus){ + return false; + } + size = info.section_size; + return true; +} + +inline bool get_semaphore_info(void *handle, long &count, long &limit) +{ + winapi::interprocess_semaphore_basic_information info; + winapi::NtQuerySemaphore_t pNtQuerySemaphore = + (winapi::NtQuerySemaphore_t)dll_func::get(winapi::dll_func::NtQuerySemaphore); + unsigned int ret_len; + long status = pNtQuerySemaphore(handle, winapi::semaphore_basic_information, &info, sizeof(info), &ret_len); + if(status){ + return false; + } + count = info.count; + limit = info.limit; + return true; +} + + +} //namespace winapi } //namespace interprocess -} //namespace boost +} //namespace boost #include -#endif //#ifdef BOOST_INTERPROCESS_WIN32_SYNC_PRIMITIVES_HPP +#endif //#ifdef BOOST_INTERPROCESS_WIN32_PRIMITIVES_HPP diff --git a/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp new file mode 100644 index 0000000000..a716e270a7 --- /dev/null +++ b/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp @@ -0,0 +1,306 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2009-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_WINDOWS_INTERMODULE_SINGLETON_HPP +#define BOOST_INTERPROCESS_WINDOWS_INTERMODULE_SINGLETON_HPP + +#if defined(_MSC_VER)&&(_MSC_VER>=1200) +#pragma once +#endif + +#include +#include + +#if !defined(BOOST_INTERPROCESS_WINDOWS) + #error "This header can't be included from non-windows operating systems" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost{ +namespace interprocess{ +namespace ipcdetail{ + +namespace intermodule_singleton_helpers { + +//This global map will be implemented using 3 sync primitives: +// +//1) A named mutex that will implement global mutual exclusion between +// threads from different modules/dlls +// +//2) A semaphore that will act as a global counter for modules attached to the global map +// so that the global map can be destroyed when the last module is detached. +// +//3) A semaphore that will be hacked to hold the address of a heap-allocated map in the +// max and current semaphore count. +class windows_semaphore_based_map +{ + typedef std::map map_type; + + public: + windows_semaphore_based_map() + { + map_type *m = new map_type; + boost::uint32_t initial_count = 0; + boost::uint32_t max_count = 0; + + //Windows user address space sizes: + //32 bit windows: [32 bit processes] 2GB or 3GB (31/32 bits) + //64 bit windows: [32 bit processes] 2GB or 4GB (31/32 bits) + // [64 bit processes] 2GB or 8TB (31/43 bits) + // + //Windows semaphores use 'long' parameters (32 bits in LLP64 data model) and + //those values can't be negative, so we have 31 bits to store something + //in max_count and initial count parameters. + //Also, max count must be bigger than 0 and bigger or equal than initial count. + if(sizeof(void*) == sizeof(boost::uint32_t)){ + //This means that for 32 bit processes, a semaphore count (31 usable bits) is + //enough to store 4 byte aligned memory (4GB -> 32 bits - 2 bits = 30 bits). + //The max count will hold the pointer value and current semaphore count + //will be zero. + // + //Relying in UB with a cast through union, but all known windows compilers + //accept this (C11 also accepts this). + union caster_union + { + void *addr; + boost::uint32_t addr_uint32; + } caster; + caster.addr = m; + //memory is at least 4 byte aligned in windows + BOOST_ASSERT((caster.addr_uint32 & boost::uint32_t(3)) == 0); + max_count = caster.addr_uint32 >> 2; + } + else if(sizeof(void*) == sizeof(boost::uint64_t)){ + //Relying in UB with a cast through union, but all known windows compilers + //accept this (C11 accepts this). + union caster_union + { + void *addr; + boost::uint64_t addr_uint64; + } caster; + caster.addr = m; + //We'll encode the address using 30 bits in each 32 bit high and low parts. + //High part will be the sem max count, low part will be the sem initial count. + //(restrictions: max count > 0, initial count >= 0 and max count >= initial count): + // + // - Low part will be shifted two times (4 byte alignment) so that top + // two bits are cleared (the top one for sign, the next one to + // assure low part value is always less than the high part value. + // - The top bit of the high part will be cleared and the next bit will be 1 + // (so high part is always bigger than low part due to the quasi-top bit). + // + // This means that the addresses we can store must be 4 byte aligned + // and less than 1 ExbiBytes ( 2^60 bytes, ~1 ExaByte). User-level address space in Windows 64 + // is much less than this (8TB, 2^43 bytes): "1 EByte (or it was 640K?) ought to be enough for anybody" ;-). + caster.addr = m; + BOOST_ASSERT((caster.addr_uint64 & boost::uint64_t(3)) == 0); + max_count = boost::uint32_t(caster.addr_uint64 >> 32); + initial_count = boost::uint32_t(caster.addr_uint64); + initial_count = initial_count/4; + //Make sure top two bits are zero + BOOST_ASSERT((max_count & boost::uint32_t(0xC0000000)) == 0); + //Set quasi-top bit + max_count |= boost::uint32_t(0x40000000); + } + bool created = false; + const permissions & perm = permissions(); + std::string pid_creation_time, name; + get_pid_creation_time_str(pid_creation_time); + name = "bipc_gmap_sem_lock_"; + name += pid_creation_time; + bool success = m_mtx_lock.open_or_create(name.c_str(), perm); + name = "bipc_gmap_sem_count_"; + name += pid_creation_time; + scoped_lock lck(m_mtx_lock); + { + success = success && m_sem_count.open_or_create + ( name.c_str(), static_cast(0), winapi_semaphore_wrapper::MaxCount, perm, created); + name = "bipc_gmap_sem_map_"; + name += pid_creation_time; + success = success && m_sem_map.open_or_create + (name.c_str(), initial_count, max_count, perm, created); + if(!success){ + //winapi_xxx wrappers do the cleanup... + throw int(0); + } + if(!created){ + delete m; + } + else{ + BOOST_ASSERT(&get_map_unlocked() == m); + } + m_sem_count.post(); + } + } + + map_type &get_map_unlocked() + { + if(sizeof(void*) == sizeof(boost::uint32_t)){ + union caster_union + { + void *addr; + boost::uint32_t addr_uint32; + } caster; + caster.addr = 0; + caster.addr_uint32 = m_sem_map.limit(); + caster.addr_uint32 = caster.addr_uint32 << 2; + return *static_cast(caster.addr); + } + else{ + union caster_union + { + void *addr; + boost::uint64_t addr_uint64; + } caster; + boost::uint32_t max_count(m_sem_map.limit()), initial_count(m_sem_map.value()); + //Clear quasi-top bit + max_count &= boost::uint32_t(0xBFFFFFFF); + caster.addr_uint64 = max_count; + caster.addr_uint64 = caster.addr_uint64 << 32; + caster.addr_uint64 |= boost::uint64_t(initial_count) << 2; + return *static_cast(caster.addr); + } + } + + ref_count_ptr *find(const char *name) + { + scoped_lock lck(m_mtx_lock); + map_type &map = this->get_map_unlocked(); + map_type::iterator it = map.find(std::string(name)); + if(it != map.end()){ + return &it->second; + } + else{ + return 0; + } + } + + ref_count_ptr * insert(const char *name, const ref_count_ptr &ref) + { + scoped_lock lck(m_mtx_lock); + map_type &map = this->get_map_unlocked(); + map_type::iterator it = map.insert(map_type::value_type(std::string(name), ref)).first; + return &it->second; + } + + bool erase(const char *name) + { + scoped_lock lck(m_mtx_lock); + map_type &map = this->get_map_unlocked(); + return map.erase(std::string(name)) != 0; + } + + template + void atomic_func(F &f) + { + scoped_lock lck(m_mtx_lock); + f(); + } + + ~windows_semaphore_based_map() + { + scoped_lock lck(m_mtx_lock); + m_sem_count.wait(); + if(0 == m_sem_count.value()){ + delete &this->get_map_unlocked(); + } + //First close sems to protect this with the external mutex + m_sem_map.close(); + m_sem_count.close(); + //Once scoped_lock unlocks the mutex, the destructor will close the handle... + } + + private: + winapi_mutex_wrapper m_mtx_lock; + winapi_semaphore_wrapper m_sem_map; + winapi_semaphore_wrapper m_sem_count; +}; + +template<> +struct thread_safe_global_map_dependant +{ + static void apply_gmem_erase_logic(const char *, const char *){} + + static bool remove_old_gmem() + { return true; } + + struct lock_file_logic + { + lock_file_logic(windows_semaphore_based_map &) + : retry_with_new_map(false) + {} + + void operator()(void){} + bool retry() const { return retry_with_new_map; } + private: + const bool retry_with_new_map; + }; + + static void construct_map(void *addr) + { + ::new (addr)windows_semaphore_based_map; + } + + struct unlink_map_logic + { + unlink_map_logic(windows_semaphore_based_map &) + {} + void operator()(){} + }; + + static ref_count_ptr *find(windows_semaphore_based_map &map, const char *name) + { + return map.find(name); + } + + static ref_count_ptr * insert(windows_semaphore_based_map &map, const char *name, const ref_count_ptr &ref) + { + return map.insert(name, ref); + } + + static bool erase(windows_semaphore_based_map &map, const char *name) + { + return map.erase(name); + } + + template + static void atomic_func(windows_semaphore_based_map &map, F &f) + { + map.atomic_func(f); + } +}; + +} //namespace intermodule_singleton_helpers { + +template +class windows_intermodule_singleton + : public intermodule_singleton_impl + < C + , LazyInit + , Phoenix + , intermodule_singleton_helpers::windows_semaphore_based_map + > +{}; + +} //namespace ipcdetail{ +} //namespace interprocess{ +} //namespace boost{ + +#include + +#endif //#ifndef BOOST_INTERPROCESS_WINDOWS_INTERMODULE_SINGLETON_HPP diff --git a/3party/boost/boost/interprocess/detail/workaround.hpp b/3party/boost/boost/interprocess/detail/workaround.hpp index cb3d4a5aff..884b8680a6 100644 --- a/3party/boost/boost/interprocess/detail/workaround.hpp +++ b/3party/boost/boost/interprocess/detail/workaround.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -13,43 +13,34 @@ #include -#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) - -#define BOOST_INTERPROCESS_WINDOWS - -/* -#if !defined(_MSC_EXTENSIONS) -#error "Turn on Microsoft language extensions (_MSC_EXTENSIONS) to be able to call Windows API functions" -#endif -*/ - -#endif - -#if !(defined BOOST_INTERPROCESS_WINDOWS) - +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + #define BOOST_INTERPROCESS_WINDOWS + #define BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION + #define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME +#else #include - #if ((_POSIX_THREAD_PROCESS_SHARED - 0) > 0) - //Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not implement it. - //Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but does not seems to work. - # if !defined(__CYGWIN__) && !defined(__APPLE__) - # define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED - # endif + #if defined(_POSIX_THREAD_PROCESS_SHARED) && ((_POSIX_THREAD_PROCESS_SHARED - 0) > 0) + //Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not implement it. + //Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but does not seems to work. + #if !defined(__CYGWIN__) && !defined(__APPLE__) + #define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED + #endif + #endif + + #if defined(_POSIX_BARRIERS) && ((_POSIX_BARRIERS - 0) > 0) + #define BOOST_INTERPROCESS_POSIX_BARRIERS #endif - - #if ((_POSIX_BARRIERS - 0) > 0) - # define BOOST_INTERPROCESS_POSIX_BARRIERS - # endif - #if ((_POSIX_SEMAPHORES - 0) > 0) - # define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES - # if defined(__CYGWIN__) - #define BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK - # endif + #if defined(_POSIX_SEMAPHORES) && ((_POSIX_SEMAPHORES - 0) > 0) + #define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES + #if defined(__CYGWIN__) + #define BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK + #endif //Some platforms have a limited (name length) named semaphore support #elif (defined(__FreeBSD__) && (__FreeBSD__ >= 4)) || defined(__APPLE__) - # define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES - #endif + #define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES + #endif #if ((defined _V6_ILP32_OFFBIG) &&(_V6_ILP32_OFFBIG - 0 > 0)) ||\ ((defined _V6_LP64_OFF64) &&(_V6_LP64_OFF64 - 0 > 0)) ||\ @@ -60,82 +51,83 @@ ((defined _FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64))||\ ((defined _FILE_OFFSET_BITS) &&(_FILE_OFFSET_BITS - 0 >= 64)) #define BOOST_INTERPROCESS_UNIX_64_BIT_OR_BIGGER_OFF_T - #else #endif //Check for XSI shared memory objects. They are available in nearly all UNIX platforms #if !defined(__QNXNTO__) - # define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS + #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS #endif - #if ((_POSIX_SHARED_MEMORY_OBJECTS - 0) > 0) - # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS + #if defined(_POSIX_SHARED_MEMORY_OBJECTS) && ((_POSIX_SHARED_MEMORY_OBJECTS - 0) > 0) + #define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS #else - //VMS and MACOS don't define it but the have shm_open/close interface - # if defined(__vms) - # if __CRTL_VER >= 70200000 - # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS - # endif - //Mac OS has some non-conformant features like names limited to SHM_NAME_MAX - # elif defined (__APPLE__) -// # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS -// # define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS_NO_GROW - # endif + //VMS and MACOS don't define it but they have shm_open/close interface + #if defined(__vms) + #if __CRTL_VER >= 70200000 + #define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS + #endif + //Mac OS has some non-conformant features like names limited to SHM_NAME_MAX + #elif defined (__APPLE__) + //#define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS + //#define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS_NO_GROW + #endif #endif //Now check if we have only XSI shared memory #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS) &&\ !defined(BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS) - //# define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS_ONLY + //#define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS_ONLY #endif - #if ((_POSIX_TIMEOUTS - 0) > 0) - # define BOOST_INTERPROCESS_POSIX_TIMEOUTS - #endif - + #if defined(_POSIX_TIMEOUTS) && ((_POSIX_TIMEOUTS - 0) > 0) + #define BOOST_INTERPROCESS_POSIX_TIMEOUTS + #endif #ifdef BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS //Some systems have filesystem-based resources, so the //portable "/shmname" format does not work due to permission issues //For those systems we need to form a path to a temporary directory: // hp-ux tru64 vms freebsd - #if defined(__hpux) || defined(__osf__) || defined(__vms) || (defined(__FreeBSD__) && (__FreeBSD__ < 7)) - #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY + #if defined(__hpux) || defined(__osf__) || defined(__vms) || (defined(__FreeBSD__) && (__FreeBSD__ < 7)) + #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY #elif defined(__FreeBSD__) - #define BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY + #define BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY #endif #endif #ifdef BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES #if defined(__osf__) || defined(__vms) - #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES + #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES #endif #endif - #if ((_POSIX_VERSION + 0)>= 200112L || (_XOPEN_VERSION + 0)>= 500) - #define BOOST_INTERPROCESS_POSIX_RECURSIVE_MUTEXES + #if defined(_POSIX_VERSION) && defined(_XOPEN_VERSION) && \ + (((_POSIX_VERSION + 0)>= 200112L || (_XOPEN_VERSION + 0)>= 500)) + #define BOOST_INTERPROCESS_POSIX_RECURSIVE_MUTEXES #endif -#endif + #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) + #define BOOST_INTERPROCESS_BSD_DERIVATIVE + #include + #if defined(CTL_KERN) && defined (KERN_BOOTTIME) + //#define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME + #endif + #endif +#endif //!defined(BOOST_INTERPROCESS_WINDOWS) -#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)\ - && !defined(BOOST_INTERPROCESS_DISABLE_VARIADIC_TMPL) -#define BOOST_INTERPROCESS_PERFECT_FORWARDING +#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES) + #define BOOST_INTERPROCESS_PERFECT_FORWARDING #endif //Now declare some Boost.Interprocess features depending on the implementation - #if defined(BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES) && !defined(BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK) - -#define BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES - + #define BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES + #define BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES #endif -#if defined(BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES) && !defined(BOOST_INTERPROCESS_POSIX_SEMAPHORES_NO_UNLINK) - -#define BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES -#define BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES - +// Timeout duration use if BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING is set +#ifndef BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS + #define BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS 10000 #endif #include diff --git a/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp b/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp index 59ec2ca032..ef4b009bc1 100644 --- a/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp +++ b/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2010. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-2011. 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) // @@ -45,39 +45,39 @@ namespace interprocess { class xsi_shared_memory_device { /// @cond - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory_file_wrapper) - /// @endcond + BOOST_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory_file_wrapper) + /// @endcond public: xsi_shared_memory_device(); xsi_shared_memory_device(create_only_t, const char *name, mode_t mode, std::size_t size) - { this->priv_open_or_create_name_only(detail::DoCreate, name, mode, size); } + { this->priv_open_or_create_name_only(ipcdetail::DoCreate, name, mode, size); } xsi_shared_memory_device(open_or_create_t, const char *name, mode_t mode, std::size_t size) - { this->priv_open_or_create_name_only(detail::DoOpenOrCreate, name, mode, size); } + { this->priv_open_or_create_name_only(ipcdetail::DoOpenOrCreate, name, mode, size); } xsi_shared_memory_device(open_only_t, const char *name, mode_t mode) - { this->priv_open_or_create_name_only(detail::DoOpen, name, mode, 0); } + { this->priv_open_or_create_name_only(ipcdetail::DoOpen, name, mode, 0); } xsi_shared_memory_device(create_only_t, const char *filepath, boost::uint8_t id, mode_t mode, std::size_t size) - { this->priv_open_or_create_name_id(detail::DoCreate, name, id, mode, size); } + { this->priv_open_or_create_name_id(ipcdetail::DoCreate, name, id, mode, size); } xsi_shared_memory_device(open_or_create_t, const char *filepath, boost::uint8_t id, mode_t mode, std::size_t size) - { this->priv_open_or_create_name_id(detail::DoOpenOrCreate, id, name, mode, size); } + { this->priv_open_or_create_name_id(ipcdetail::DoOpenOrCreate, id, name, mode, size); } xsi_shared_memory_device(open_only_t, const char *filepath, boost::uint8_t id, mode_t mode) - { this->priv_open_or_create_name_id(detail::DoOpen, name, id, mode, 0); } + { this->priv_open_or_create_name_id(ipcdetail::DoOpen, name, id, mode, 0); } - xsi_shared_memory_device(BOOST_INTERPROCESS_RV_REF(xsi_shared_memory_device) moved) + xsi_shared_memory_device(BOOST_RV_REF(xsi_shared_memory_device) moved) { this->swap(moved); } - xsi_shared_memory_device &operator=(BOOST_INTERPROCESS_RV_REF(xsi_shared_memory_device) moved) - { - xsi_shared_memory_device tmp(boost::interprocess::move(moved)); + xsi_shared_memory_device &operator=(BOOST_RV_REF(xsi_shared_memory_device) moved) + { + xsi_shared_memory_device tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_shared_memory_device. Does not throw @@ -135,11 +135,11 @@ class xsi_shared_memory_device static void priv_obtain_index(mapped_region &m, xsi_named_mutex &m, std::string &path); static bool priv_remove_dead_memory(info_t *info, const char *path); - bool priv_open_or_create_name_only( detail::create_enum_t type + bool priv_open_or_create_name_only( ipcdetail::create_enum_t type , const char *shmname , mode_t mode , std::size_t size); - bool priv_open_or_create_name_id( detail::create_enum_t type + bool priv_open_or_create_name_id( ipcdetail::create_enum_t type , const char *shmname , boost::uint8_t id , mode_t mode @@ -168,7 +168,7 @@ inline xsi_shared_memory_device::xsi_shared_memory_device() : m_shm(), m_mode(invalid_mode), m_name() {} -inline xsi_shared_memory_device::~xsi_shared_memory_device() +inline xsi_shared_memory_device::~xsi_shared_memory_device() {} inline const char *xsi_shared_memory_device::get_name() const @@ -178,7 +178,7 @@ inline void xsi_shared_memory_device::swap(xsi_shared_memory_device &other) { m_shm.swap(other.m_shm); std::swap(m_mode, other.m_mode); - m_name.swap(other.m_name); + m_name.swap(other.m_name); } inline mapping_handle_t xsi_shared_memory_device::get_mapping_handle() const @@ -197,15 +197,15 @@ inline void xsi_shared_memory_device::priv_obtain_index permissions p; p.set_unrestricted(); std::string xsi_shm_emulation_file_path; - detail::create_tmp_and_clean_old_and_get_filename(filename, xsi_shm_emulation_file_path); - detail::create_or_open_file(xsi_shm_emulation_file_path.c_str(), read_write, p); + ipcdetail::create_tmp_and_clean_old_and_get_filename(filename, xsi_shm_emulation_file_path); + ipcdetail::create_or_open_file(xsi_shm_emulation_file_path.c_str(), read_write, p); const std::size_t MemSize = sizeof(info_t); xsi_shared_memory index_shm(open_or_create, xsi_shm_emulation_file_path.c_str(), 1, MemSize, 0666); mapped_region r(index_shm, read_write, 0, MemSize, 0); xsi_named_mutex m(open_or_create, xsi_shm_emulation_file_path.c_str(), 2, 0666); - reg = boost::interprocess::move(r); - mut = boost::interprocess::move(m); + reg = boost::move(r); + mut = boost::move(m); path.swap(xsi_shm_emulation_file_path); } @@ -230,7 +230,7 @@ inline bool xsi_shared_memory_device::priv_remove_dead_memory } inline bool xsi_shared_memory_device::priv_open_or_create_name_id - (detail::create_enum_t type, const char *filepath, mode_t mode, std::size_t size) + (ipcdetail::create_enum_t type, const char *filepath, mode_t mode, std::size_t size) { //Set accesses if (mode != read_write && mode != read_only){ @@ -240,23 +240,23 @@ inline bool xsi_shared_memory_device::priv_open_or_create_name_id int perm = (mode == read_only) ? (0444) : (0666); - if(type == detail::DoOpen){ + if(type == ipcdetail::DoOpen){ if(!found){ error_info err = not_found_error; throw interprocess_exception(err); } xsi_shared_memory temp(open_only, filepath, id, perm); - m_shm = boost::interprocess::move(temp); + m_shm = boost::move(temp); } - else if(type == detail::DoCreate){ + else if(type == ipcdetail::DoCreate){ //Try to reuse slot xsi_shared_memory temp(create_only, filepath, id, size, perm); std::strcpy(info->names[target_entry].buf, shmname); - m_shm = boost::interprocess::move(temp); + m_shm = boost::move(temp); } - else{ // if(type == detail::DoOpenOrCreate){ + else{ // if(type == ipcdetail::DoOpenOrCreate){ xsi_shared_memory temp(open_or_create, filepath, id, size, perm); - m_shm = boost::interprocess::move(temp); + m_shm = boost::move(temp); } m_mode = mode; @@ -265,7 +265,7 @@ inline bool xsi_shared_memory_device::priv_open_or_create_name_id } inline bool xsi_shared_memory_device::priv_open_or_create_name_only - (detail::create_enum_t type, const char *shmname, mode_t mode, std::size_t size) + (ipcdetail::create_enum_t type, const char *shmname, mode_t mode, std::size_t size) { //Set accesses if (mode != read_write && mode != read_only){ @@ -311,32 +311,32 @@ inline bool xsi_shared_memory_device::priv_open_or_create_name_only } //Now handle the result int perm = (mode == read_only) ? (0444) : (0666); - if(type == detail::DoOpen){ + if(type == ipcdetail::DoOpen){ if(!found){ error_info err = not_found_error; throw interprocess_exception(err); } xsi_shared_memory temp( open_only, xsi_shm_emulation_file_path.c_str() , target_entry+info_constants_t<0>::FirstID, perm); - m_shm = boost::interprocess::move(temp); + m_shm = boost::move(temp); } else{ - if(type == detail::DoCreate){ + if(type == ipcdetail::DoCreate){ //Try to reuse slot xsi_shared_memory temp( create_only, xsi_shm_emulation_file_path.c_str() , target_entry+info_constants_t<0>::FirstID, size, perm); std::strcpy(info->names[target_entry].buf, shmname); - m_shm = boost::interprocess::move(temp); + m_shm = boost::move(temp); } - else{ // if(type == detail::DoOpenOrCreate){ + else{ // if(type == ipcdetail::DoOpenOrCreate){ xsi_shared_memory temp( open_or_create, xsi_shm_emulation_file_path.c_str() , target_entry+info_constants_t<0>::FirstID, size, perm); if(!found){ std::memset(info->names[target_entry].buf, 0, info_constants_t<0>::MaxName); std::strcpy(info->names[target_entry].buf, shmname); } - m_shm = boost::interprocess::move(temp); + m_shm = boost::move(temp); } } } diff --git a/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp b/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp index d09ca37c46..14811e7e62 100644 --- a/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp +++ b/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2010. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-2011. 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) // @@ -39,8 +39,8 @@ class xsi_shared_memory_file_wrapper : public xsi_shared_memory { /// @cond - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory_file_wrapper) - /// @endcond + BOOST_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory_file_wrapper) + /// @endcond public: xsi_shared_memory_file_wrapper() : xsi_shared_memory() {} @@ -57,14 +57,14 @@ class xsi_shared_memory_file_wrapper : xsi_shared_memory(open_only_t(), key) {} - xsi_shared_memory_file_wrapper(BOOST_INTERPROCESS_RV_REF(xsi_shared_memory_file_wrapper) moved) + xsi_shared_memory_file_wrapper(BOOST_RV_REF(xsi_shared_memory_file_wrapper) moved) { this->swap(moved); } - xsi_shared_memory_file_wrapper &operator=(BOOST_INTERPROCESS_RV_REF(xsi_shared_memory_file_wrapper) moved) - { - xsi_shared_memory_file_wrapper tmp(boost::interprocess::move(moved)); + xsi_shared_memory_file_wrapper &operator=(BOOST_RV_REF(xsi_shared_memory_file_wrapper) moved) + { + xsi_shared_memory_file_wrapper tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_shared_memory_file_wrapper. Does not throw diff --git a/3party/boost/boost/interprocess/errors.hpp b/3party/boost/boost/interprocess/errors.hpp index 5b7cd3b4e4..9eed55a29b 100644 --- a/3party/boost/boost/interprocess/errors.hpp +++ b/3party/boost/boost/interprocess/errors.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -11,7 +11,7 @@ ////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2002 Beman Dawes -// Copyright (C) 2001 Dietmar Kuehl +// Copyright (C) 2001 Dietmar Kuehl // Use, modification, and distribution is subject to 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) @@ -64,16 +64,16 @@ inline int system_error_code() // artifact of POSIX and WINDOWS error reporting inline void fill_system_message(int sys_err_code, std::string &str) { void *lpMsgBuf; - winapi::format_message( - winapi::format_message_allocate_buffer | - winapi::format_message_from_system | + winapi::format_message( + winapi::format_message_allocate_buffer | + winapi::format_message_from_system | winapi::format_message_ignore_inserts, 0, sys_err_code, winapi::make_lang_id(winapi::lang_neutral, winapi::sublang_default), // Default language reinterpret_cast(&lpMsgBuf), 0, - 0 + 0 ); str += static_cast(lpMsgBuf); winapi::local_free( lpMsgBuf ); // free the buffer @@ -112,7 +112,9 @@ enum error_code_t size_error, corrupted_error, not_such_file_or_directory, - invalid_argument + invalid_argument, + timeout_when_locking_error, + timeout_when_waiting_error, }; typedef int native_error_t; @@ -121,7 +123,7 @@ typedef int native_error_t; struct ec_xlate { native_error_t sys_ec; - error_code_t ec; + error_code_t ec; }; static const ec_xlate ec_table[] = @@ -157,7 +159,8 @@ static const ec_xlate ec_table[] = { /*ERROR_DISK_FULL*/112L, out_of_space_error }, { /*ERROR_OUTOFMEMORY*/14L, out_of_memory_error }, { /*ERROR_NOT_ENOUGH_MEMORY*/8L, out_of_memory_error }, - { /*ERROR_TOO_MANY_OPEN_FILES*/4L, out_of_resource_error } + { /*ERROR_TOO_MANY_OPEN_FILES*/4L, out_of_resource_error }, + { /*ERROR_INVALID_ADDRESS*/487L, busy_error } #else //#if (defined BOOST_INTERPROCESS_WINDOWS) { EACCES, security_error }, { EROFS, read_only_error }, @@ -180,9 +183,9 @@ static const ec_xlate ec_table[] = }; inline error_code_t lookup_error(native_error_t err) -{ +{ const ec_xlate *cur = &ec_table[0], - *end = cur + sizeof(ec_table)/sizeof(ec_xlate); + *end = cur + sizeof(ec_table)/sizeof(ec_xlate); for (;cur != end; ++cur ){ if ( err == cur->sys_ec ) return cur->ec; } diff --git a/3party/boost/boost/interprocess/exceptions.hpp b/3party/boost/boost/interprocess/exceptions.hpp index 5fd894cb88..a4f196f0be 100644 --- a/3party/boost/boost/interprocess/exceptions.hpp +++ b/3party/boost/boost/interprocess/exceptions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // diff --git a/3party/boost/boost/interprocess/file_mapping.hpp b/3party/boost/boost/interprocess/file_mapping.hpp index c3cfa191fd..2a4e4cca00 100644 --- a/3party/boost/boost/interprocess/file_mapping.hpp +++ b/3party/boost/boost/interprocess/file_mapping.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include //std::string //!\file @@ -33,7 +33,7 @@ namespace interprocess { class file_mapping { /// @cond - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(file_mapping) + BOOST_MOVABLE_BUT_NOT_COPYABLE(file_mapping) /// @endcond public: @@ -41,27 +41,27 @@ class file_mapping //!Does not throw file_mapping(); - //!Opens a file mapping of file "filename", starting in offset - //!"file_offset", and the mapping's size will be "size". The mapping + //!Opens a file mapping of file "filename", starting in offset + //!"file_offset", and the mapping's size will be "size". The mapping //!can be opened for read-only "read_only" or read-write "read_write" //!modes. Throws interprocess_exception on error. file_mapping(const char *filename, mode_t mode); - //!Moves the ownership of "moved"'s file mapping object to *this. - //!After the call, "moved" does not represent any file mapping object. + //!Moves the ownership of "moved"'s file mapping object to *this. + //!After the call, "moved" does not represent any file mapping object. //!Does not throw - file_mapping(BOOST_INTERPROCESS_RV_REF(file_mapping) moved) - : m_handle(file_handle_t(detail::invalid_file())) + file_mapping(BOOST_RV_REF(file_mapping) moved) + : m_handle(file_handle_t(ipcdetail::invalid_file())) { this->swap(moved); } //!Moves the ownership of "moved"'s file mapping to *this. - //!After the call, "moved" does not represent any file mapping. + //!After the call, "moved" does not represent any file mapping. //!Does not throw - file_mapping &operator=(BOOST_INTERPROCESS_RV_REF(file_mapping) moved) + file_mapping &operator=(BOOST_RV_REF(file_mapping) moved) { - file_mapping tmp(boost::interprocess::move(moved)); + file_mapping tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps to file_mappings. @@ -100,25 +100,25 @@ class file_mapping /// @endcond }; -inline file_mapping::file_mapping() - : m_handle(file_handle_t(detail::invalid_file())) +inline file_mapping::file_mapping() + : m_handle(file_handle_t(ipcdetail::invalid_file())) {} -inline file_mapping::~file_mapping() +inline file_mapping::~file_mapping() { this->priv_close(); } inline const char *file_mapping::get_name() const { return m_filename.c_str(); } inline void file_mapping::swap(file_mapping &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_filename.swap(other.m_filename); + m_filename.swap(other.m_filename); } inline mapping_handle_t file_mapping::get_mapping_handle() const -{ return detail::mapping_handle_from_file_handle(m_handle); } +{ return ipcdetail::mapping_handle_from_file_handle(m_handle); } inline mode_t file_mapping::get_mode() const { return m_mode; } @@ -134,10 +134,10 @@ inline file_mapping::file_mapping } //Open file - m_handle = detail::open_existing_file(filename, mode); + m_handle = ipcdetail::open_existing_file(filename, mode); //Check for error - if(m_handle == detail::invalid_file()){ + if(m_handle == ipcdetail::invalid_file()){ error_info err = system_error_code(); this->priv_close(); throw interprocess_exception(err); @@ -146,15 +146,15 @@ inline file_mapping::file_mapping } inline bool file_mapping::remove(const char *filename) -{ return detail::delete_file(filename); } +{ return ipcdetail::delete_file(filename); } ///@cond inline void file_mapping::priv_close() { - if(m_handle != detail::invalid_file()){ - detail::close_file(m_handle); - m_handle = detail::invalid_file(); + if(m_handle != ipcdetail::invalid_file()){ + ipcdetail::close_file(m_handle); + m_handle = ipcdetail::invalid_file(); } } @@ -173,7 +173,7 @@ class remove_file_on_destroy {} ~remove_file_on_destroy() - { detail::delete_file(m_name); } + { ipcdetail::delete_file(m_name); } }; } //namespace interprocess { diff --git a/3party/boost/boost/interprocess/indexes/flat_map_index.hpp b/3party/boost/boost/interprocess/indexes/flat_map_index.hpp index 8caa7da67f..bac387e268 100644 --- a/3party/boost/boost/interprocess/indexes/flat_map_index.hpp +++ b/3party/boost/boost/interprocess/indexes/flat_map_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -63,7 +63,7 @@ class flat_map_index {} //!This reserves memory to optimize the insertion of n elements in the index - void reserve(std::size_t n) + void reserve(typename segment_manager_base::size_type n) { base_type::reserve(n); } //!This frees all unnecessary memory diff --git a/3party/boost/boost/interprocess/indexes/iset_index.hpp b/3party/boost/boost/interprocess/indexes/iset_index.hpp index df1aeb5736..8fc91466f3 100644 --- a/3party/boost/boost/interprocess/indexes/iset_index.hpp +++ b/3party/boost/boost/interprocess/indexes/iset_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -34,17 +34,17 @@ namespace interprocess { template struct iset_index_aux { - typedef typename + typedef typename MapConfig::segment_manager_base segment_manager_base; - typedef typename + typedef typename segment_manager_base::void_pointer void_pointer; typedef typename bi::make_set_base_hook < bi::void_pointer , bi::optimize_size >::type derivation_hook; - typedef typename MapConfig::template + typedef typename MapConfig::template intrusive_value_type::type value_type; typedef std::less value_compare; typedef typename bi::make_set @@ -82,20 +82,20 @@ class iset_index struct intrusive_key_value_less { bool operator()(const intrusive_compare_key_type &i, const value_type &b) const - { + { std::size_t blen = b.name_length(); - return (i.m_len < blen) || - (i.m_len == blen && - std::char_traits::compare + return (i.m_len < blen) || + (i.m_len == blen && + std::char_traits::compare (i.mp_str, b.name(), i.m_len) < 0); } bool operator()(const value_type &b, const intrusive_compare_key_type &i) const - { + { std::size_t blen = b.name_length(); - return (blen < i.m_len) || + return (blen < i.m_len) || (blen == i.m_len && - std::char_traits::compare + std::char_traits::compare (b.name(), i.mp_str, i.m_len) < 0); } }; @@ -112,7 +112,7 @@ class iset_index //!This reserves memory to optimize the insertion of n //!elements in the index - void reserve(std::size_t) + void reserve(typename MapConfig::segment_manager_base::size_type) { /*Does nothing, map has not reserve or rehash*/ } //!This frees all unnecessary memory @@ -138,12 +138,12 @@ template struct is_intrusive_index > { - enum{ value = true }; + static const bool value = true; }; /// @endcond } //namespace interprocess { -} //namespace boost +} //namespace boost #include diff --git a/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp b/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp index 1db07c882d..3c5f85526c 100644 --- a/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp +++ b/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -16,7 +16,7 @@ #include #include -#include + #include #include #include @@ -35,17 +35,17 @@ namespace boost { namespace interprocess { template struct iunordered_set_index_aux { - typedef typename + typedef typename MapConfig::segment_manager_base segment_manager_base; - typedef typename + typedef typename segment_manager_base::void_pointer void_pointer; typedef typename bi::make_unordered_set_base_hook < bi::void_pointer >::type derivation_hook; - typedef typename MapConfig::template + typedef typename MapConfig::template intrusive_value_type::type value_type; typedef typename MapConfig:: @@ -58,23 +58,23 @@ struct iunordered_set_index_aux struct equal_function { bool operator()(const intrusive_compare_key_type &i, const value_type &b) const - { + { return (i.m_len == b.name_length()) && - (std::char_traits::compare + (std::char_traits::compare (i.mp_str, b.name(), i.m_len) == 0); } bool operator()(const value_type &b, const intrusive_compare_key_type &i) const - { + { return (i.m_len == b.name_length()) && - (std::char_traits::compare + (std::char_traits::compare (i.mp_str, b.name(), i.m_len) == 0); } bool operator()(const value_type &b1, const value_type &b2) const - { + { return (b1.name_length() == b2.name_length()) && - (std::char_traits::compare + (std::char_traits::compare (b1.name(), b2.name(), b1.name_length()) == 0); } }; @@ -84,7 +84,7 @@ struct iunordered_set_index_aux { std::size_t operator()(const value_type &val) const { - const char_type *beg = detail::get_pointer(val.name()), + const char_type *beg = ipcdetail::to_raw_pointer(val.name()), *end = beg + val.name_length(); return boost::hash_range(beg, end); } @@ -101,6 +101,7 @@ struct iunordered_set_index_aux < value_type , bi::hash , bi::equal + , bi::size_type >::type index_t; typedef typename index_t::bucket_type bucket_type; typedef allocator @@ -118,7 +119,7 @@ struct iunordered_set_index_aux /// @endcond //!Index type based in boost::intrusive::set. -//!Just derives from boost::intrusive::set +//!Just derives from boost::intrusive::set //!and defines the interface needed by managed memory segments template class iunordered_set_index @@ -134,9 +135,9 @@ class iunordered_set_index typedef typename index_aux::equal_function equal_function; typedef typename index_aux::hash_function hash_function; typedef typename MapConfig::char_type char_type; - typedef typename + typedef typename iunordered_set_index_aux::allocator_type allocator_type; - typedef typename + typedef typename iunordered_set_index_aux::allocator_holder allocator_holder; /// @endcond @@ -155,33 +156,33 @@ class iunordered_set_index typedef typename index_aux:: segment_manager_base segment_manager_base; - enum { InitBufferSize = 64}; + static const std::size_t InitBufferSize = 64; - static bucket_ptr create_buckets(allocator_type &alloc, std::size_t num) + static bucket_ptr create_buckets(allocator_type &alloc, size_type num) { num = index_type::suggested_upper_bucket_count(num); bucket_ptr buckets = alloc.allocate(num); bucket_ptr buckets_init = buckets; - for(std::size_t i = 0; i < num; ++i){ - new(get_pointer(buckets_init++))bucket_type(); + for(size_type i = 0; i < num; ++i){ + new(to_raw_pointer(buckets_init++))bucket_type(); } return buckets; } - static std::size_t shrink_buckets - ( bucket_ptr buckets, std::size_t old_size - , allocator_type &alloc, std::size_t new_size) + static size_type shrink_buckets + ( bucket_ptr buckets, size_type old_size + , allocator_type &alloc, size_type new_size) { if(old_size <= new_size ) return old_size; - std::size_t received_size; + size_type received_size; if(!alloc.allocation_command (boost::interprocess::try_shrink_in_place | boost::interprocess::nothrow_allocation, old_size, new_size, received_size, buckets).first){ return old_size; } - for( bucket_type *p = detail::get_pointer(buckets) + received_size - , *pend = detail::get_pointer(buckets) + old_size + for( bucket_type *p = ipcdetail::to_raw_pointer(buckets) + received_size + , *pend = ipcdetail::to_raw_pointer(buckets) + old_size ; p != pend ; ++p){ p->~bucket_type(); @@ -192,30 +193,30 @@ class iunordered_set_index BOOST_ASSERT(buckets == shunk_p); bucket_ptr buckets_init = buckets + received_size; - for(std::size_t i = 0; i < (old_size - received_size); ++i){ - get_pointer(buckets_init++)->~bucket_type(); + for(size_type i = 0; i < (old_size - received_size); ++i){ + to_raw_pointer(buckets_init++)->~bucket_type(); } return received_size; } static bucket_ptr expand_or_create_buckets - ( bucket_ptr old_buckets, const std::size_t old_num - , allocator_type &alloc, const std::size_t new_num) + ( bucket_ptr old_buckets, const size_type old_num + , allocator_type &alloc, const size_type new_num) { - std::size_t received_size; + size_type received_size; std::pair ret = alloc.allocation_command (boost::interprocess::expand_fwd | boost::interprocess::allocate_new, new_num, new_num, received_size, old_buckets); if(ret.first == old_buckets){ bucket_ptr buckets_init = old_buckets + old_num; - for(std::size_t i = 0; i < (new_num - old_num); ++i){ - new(get_pointer(buckets_init++))bucket_type(); + for(size_type i = 0; i < (new_num - old_num); ++i){ + new(to_raw_pointer(buckets_init++))bucket_type(); } } else{ bucket_ptr buckets_init = ret.first; - for(std::size_t i = 0; i < new_num; ++i){ - new(get_pointer(buckets_init++))bucket_type(); + for(size_type i = 0; i < new_num; ++i){ + new(to_raw_pointer(buckets_init++))bucket_type(); } } @@ -223,11 +224,11 @@ class iunordered_set_index } static void destroy_buckets - (allocator_type &alloc, bucket_ptr buckets, std::size_t num) + (allocator_type &alloc, bucket_ptr buckets, size_type num) { bucket_ptr buckets_destroy = buckets; - for(std::size_t i = 0; i < num; ++i){ - get_pointer(buckets_destroy++)->~bucket_type(); + for(size_type i = 0; i < num; ++i){ + to_raw_pointer(buckets_destroy++)->~bucket_type(); } alloc.deallocate(buckets, num); } @@ -255,7 +256,7 @@ class iunordered_set_index //!This reserves memory to optimize the insertion of n //!elements in the index - void reserve(std::size_t new_n) + void reserve(size_type new_n) { //Let's maintain a 1.0f load factor size_type old_n = this->bucket_count(); @@ -289,7 +290,7 @@ class iunordered_set_index size_type cur_size = this->size(); size_type cur_count = this->bucket_count(); bucket_ptr old_p = this->bucket_pointer(); - + if(!this->size() && old_p != bucket_ptr(&this->init_bucket)){ this->rehash(bucket_traits(bucket_ptr(&this->init_bucket), 1)); destroy_buckets(this->alloc, old_p, cur_count); @@ -336,7 +337,7 @@ class iunordered_set_index //Strong guarantee: if something goes wrong //we should remove the insertion. // - //We can use the iterator because the hash function + //We can use the iterator because the hash function //can't throw and this means that "reserve" will //throw only because of the memory allocation: //the iterator has not been invalidated. @@ -356,7 +357,7 @@ template struct is_intrusive_index > { - enum{ value = true }; + static const bool value = true; }; /// @endcond diff --git a/3party/boost/boost/interprocess/indexes/map_index.hpp b/3party/boost/boost/interprocess/indexes/map_index.hpp index baf0403a04..1bfc7ce310 100644 --- a/3party/boost/boost/interprocess/indexes/map_index.hpp +++ b/3party/boost/boost/interprocess/indexes/map_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -25,7 +25,7 @@ namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ //!Helper class to define typedefs from IndexTraits template @@ -46,17 +46,17 @@ struct map_index_aux key_less, allocator_type> index_t; }; -} //namespace detail { +} //namespace ipcdetail { -//!Index type based in boost::interprocess::map. Just derives from boost::interprocess::map +//!Index type based in boost::interprocess::map. Just derives from boost::interprocess::map //!and defines the interface needed by managed memory segments template class map_index //Derive class from map specialization - : public detail::map_index_aux::index_t + : public ipcdetail::map_index_aux::index_t { /// @cond - typedef detail::map_index_aux index_aux; + typedef ipcdetail::map_index_aux index_aux; typedef typename index_aux::index_t base_type; typedef typename MapConfig:: segment_manager_base segment_manager_base; @@ -71,7 +71,7 @@ class map_index //!This reserves memory to optimize the insertion of n //!elements in the index - void reserve(std::size_t) + void reserve(typename segment_manager_base::size_type) { /*Does nothing, map has not reserve or rehash*/ } //!This tries to free previously allocate @@ -89,7 +89,7 @@ template struct is_node_index > { - enum { value = true }; + static const bool value = true; }; /// @endcond diff --git a/3party/boost/boost/interprocess/indexes/null_index.hpp b/3party/boost/boost/interprocess/indexes/null_index.hpp index dc3a623dce..a0353b101c 100644 --- a/3party/boost/boost/interprocess/indexes/null_index.hpp +++ b/3party/boost/boost/interprocess/indexes/null_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -16,7 +16,7 @@ #include //!\file -//!Describes a null index adaptor, so that if we don't want to construct +//!Describes a null index adaptor, so that if we don't want to construct //!named objects, we can use this null index type to save resources. namespace boost { diff --git a/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp b/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp index a438939c39..7cf4b85e65 100644 --- a/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp +++ b/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -48,7 +48,7 @@ struct unordered_map_index_aux std::size_t operator()(const key_type &val) const { typedef typename key_type::char_type char_type; - const char_type *beg = detail::get_pointer(val.mp_str), + const char_type *beg = ipcdetail::to_raw_pointer(val.mp_str), *end = beg + val.m_len; return boost::hash_range(beg, end); } @@ -69,7 +69,7 @@ class unordered_map_index /// @cond typedef unordered_map_index_aux index_aux; typedef typename index_aux::index_t base_type; - typedef typename + typedef typename MapConfig::segment_manager_base segment_manager_base; /// @endcond @@ -84,7 +84,7 @@ class unordered_map_index //!This reserves memory to optimize the insertion of n //!elements in the index - void reserve(std::size_t n) + void reserve(typename segment_manager_base::size_type n) { base_type::rehash(n); } //!This tries to free previously allocate @@ -102,7 +102,7 @@ template struct is_node_index > { - enum { value = true }; + static const bool value = true; }; /// @endcond diff --git a/3party/boost/boost/interprocess/interprocess_fwd.hpp b/3party/boost/boost/interprocess/interprocess_fwd.hpp index 0d8d44e3e5..68fd89fb91 100644 --- a/3party/boost/boost/interprocess/interprocess_fwd.hpp +++ b/3party/boost/boost/interprocess/interprocess_fwd.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -35,21 +35,11 @@ namespace interprocess{ namespace bi = boost::intrusive; }} -namespace std { - -template -class allocator; - -template -struct less; - -template -struct pair; - -template -struct char_traits; - -} //namespace std { +#include +#include +#include +#include +#include /// @endcond @@ -158,7 +148,9 @@ class cached_adaptive_pool; // offset_ptr ////////////////////////////////////////////////////////////////////////////// -template +static const std::size_t offset_type_alignment = 0; + +template class offset_ptr; ////////////////////////////////////////////////////////////////////////////// @@ -222,7 +214,7 @@ template class IndexType> class basic_managed_shared_memory; -typedef basic_managed_shared_memory +typedef basic_managed_shared_memory ,iset_index> @@ -246,7 +238,7 @@ template class IndexType> class basic_managed_windows_shared_memory; -typedef basic_managed_windows_shared_memory +typedef basic_managed_windows_shared_memory ,iset_index> @@ -267,7 +259,7 @@ template class IndexType> class basic_managed_xsi_shared_memory; -typedef basic_managed_xsi_shared_memory +typedef basic_managed_xsi_shared_memory ,iset_index> @@ -410,7 +402,10 @@ class weak_ptr; // IPC ////////////////////////////////////////////////////////////////////////////// -class message_queue; +template +class message_queue_t; + +typedef message_queue_t > message_queue; }} //namespace boost { namespace interprocess { diff --git a/3party/boost/boost/interprocess/ipc/message_queue.hpp b/3party/boost/boost/interprocess/ipc/message_queue.hpp index 7f86fe4f5c..67dd574f61 100644 --- a/3party/boost/boost/interprocess/ipc/message_queue.hpp +++ b/3party/boost/boost/interprocess/ipc/message_queue.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -25,7 +26,10 @@ #include #include #include - +#include +#include +#include +#include #include //std::lower_bound #include //std::size_t #include //memcpy @@ -40,41 +44,48 @@ namespace boost{ namespace interprocess{ //!A class that allows sending messages //!between processes. -class message_queue +template +class message_queue_t { /// @cond //Blocking modes enum block_t { blocking, timed, non_blocking }; - message_queue(); + message_queue_t(); /// @endcond public: + typedef VoidPointer void_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type char_ptr; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; //!Creates a process shared message queue with name "name". For this message queue, //!the maximum number of messages will be "max_num_msg" and the maximum message size //!will be "max_msg_size". Throws on error and if the queue was previously created. - message_queue(create_only_t create_only, - const char *name, - std::size_t max_num_msg, - std::size_t max_msg_size, + message_queue_t(create_only_t create_only, + const char *name, + size_type max_num_msg, + size_type max_msg_size, const permissions &perm = permissions()); - //!Opens or creates a process shared message queue with name "name". - //!If the queue is created, the maximum number of messages will be "max_num_msg" - //!and the maximum message size will be "max_msg_size". If queue was previously + //!Opens or creates a process shared message queue with name "name". + //!If the queue is created, the maximum number of messages will be "max_num_msg" + //!and the maximum message size will be "max_msg_size". If queue was previously //!created the queue will be opened and "max_num_msg" and "max_msg_size" parameters //!are ignored. Throws on error. - message_queue(open_or_create_t open_or_create, - const char *name, - std::size_t max_num_msg, - std::size_t max_msg_size, + message_queue_t(open_or_create_t open_or_create, + const char *name, + size_type max_num_msg, + size_type max_msg_size, const permissions &perm = permissions()); - //!Opens a previously created process shared message queue with name "name". - //!If the was not previously created or there are no free resources, + //!Opens a previously created process shared message queue with name "name". + //!If the queue was not previously created or there are no free resources, //!throws an error. - message_queue(open_only_t open_only, + message_queue_t(open_only_t open_only, const char *name); //!Destroys *this and indicates that the calling process is finished using @@ -84,140 +95,153 @@ class message_queue //!this resource. The resource can still be opened again calling //!the open constructor overload. To erase the message queue from the system //!use remove(). - ~message_queue(); + ~message_queue_t(); - //!Sends a message stored in buffer "buffer" with size "buffer_size" in the + //!Sends a message stored in buffer "buffer" with size "buffer_size" in the //!message queue with priority "priority". If the message queue is full //!the sender is blocked. Throws interprocess_error on error.*/ - void send (const void *buffer, std::size_t buffer_size, + void send (const void *buffer, size_type buffer_size, unsigned int priority); - //!Sends a message stored in buffer "buffer" with size "buffer_size" through the + //!Sends a message stored in buffer "buffer" with size "buffer_size" through the //!message queue with priority "priority". If the message queue is full //!the sender is not blocked and returns false, otherwise returns true. //!Throws interprocess_error on error. - bool try_send (const void *buffer, std::size_t buffer_size, + bool try_send (const void *buffer, size_type buffer_size, unsigned int priority); - //!Sends a message stored in buffer "buffer" with size "buffer_size" in the + //!Sends a message stored in buffer "buffer" with size "buffer_size" in the //!message queue with priority "priority". If the message queue is full //!the sender retries until time "abs_time" is reached. Returns true if //!the message has been successfully sent. Returns false if timeout is reached. //!Throws interprocess_error on error. - bool timed_send (const void *buffer, std::size_t buffer_size, + bool timed_send (const void *buffer, size_type buffer_size, unsigned int priority, const boost::posix_time::ptime& abs_time); - //!Receives a message from the message queue. The message is stored in buffer - //!"buffer", which has size "buffer_size". The received message has size + //!Receives a message from the message queue. The message is stored in buffer + //!"buffer", which has size "buffer_size". The received message has size //!"recvd_size" and priority "priority". If the message queue is empty //!the receiver is blocked. Throws interprocess_error on error. - void receive (void *buffer, std::size_t buffer_size, - std::size_t &recvd_size,unsigned int &priority); + void receive (void *buffer, size_type buffer_size, + size_type &recvd_size,unsigned int &priority); - //!Receives a message from the message queue. The message is stored in buffer - //!"buffer", which has size "buffer_size". The received message has size + //!Receives a message from the message queue. The message is stored in buffer + //!"buffer", which has size "buffer_size". The received message has size //!"recvd_size" and priority "priority". If the message queue is empty //!the receiver is not blocked and returns false, otherwise returns true. //!Throws interprocess_error on error. - bool try_receive (void *buffer, std::size_t buffer_size, - std::size_t &recvd_size,unsigned int &priority); + bool try_receive (void *buffer, size_type buffer_size, + size_type &recvd_size,unsigned int &priority); - //!Receives a message from the message queue. The message is stored in buffer - //!"buffer", which has size "buffer_size". The received message has size + //!Receives a message from the message queue. The message is stored in buffer + //!"buffer", which has size "buffer_size". The received message has size //!"recvd_size" and priority "priority". If the message queue is empty //!the receiver retries until time "abs_time" is reached. Returns true if //!the message has been successfully sent. Returns false if timeout is reached. //!Throws interprocess_error on error. - bool timed_receive (void *buffer, std::size_t buffer_size, - std::size_t &recvd_size,unsigned int &priority, + bool timed_receive (void *buffer, size_type buffer_size, + size_type &recvd_size,unsigned int &priority, const boost::posix_time::ptime &abs_time); //!Returns the maximum number of messages allowed by the queue. The message - //!queue must be opened or created previously. Otherwise, returns 0. + //!queue must be opened or created previously. Otherwise, returns 0. //!Never throws - std::size_t get_max_msg() const; + size_type get_max_msg() const; //!Returns the maximum size of message allowed by the queue. The message - //!queue must be opened or created previously. Otherwise, returns 0. + //!queue must be opened or created previously. Otherwise, returns 0. //!Never throws - std::size_t get_max_msg_size() const; + size_type get_max_msg_size() const; - //!Returns the number of messages currently stored. + //!Returns the number of messages currently stored. //!Never throws - std::size_t get_num_msg(); + size_type get_num_msg(); //!Removes the message queue from the system. //!Returns false on error. Never throws static bool remove(const char *name); - /// @cond + /// @cond private: typedef boost::posix_time::ptime ptime; bool do_receive(block_t block, - void *buffer, std::size_t buffer_size, - std::size_t &recvd_size, unsigned int &priority, + void *buffer, size_type buffer_size, + size_type &recvd_size, unsigned int &priority, const ptime &abs_time); bool do_send(block_t block, - const void *buffer, std::size_t buffer_size, + const void *buffer, size_type buffer_size, unsigned int priority, const ptime &abs_time); //!Returns the needed memory size for the shared message queue. //!Never throws - static std::size_t get_mem_size(std::size_t max_msg_size, std::size_t max_num_msg); + static size_type get_mem_size(size_type max_msg_size, size_type max_num_msg); - detail::managed_open_or_create_impl m_shmem; + ipcdetail::managed_open_or_create_impl m_shmem; /// @endcond }; /// @cond -namespace detail { +namespace ipcdetail { //!This header is the prefix of each message in the queue -class msg_hdr_t +template +class msg_hdr_t { + typedef VoidPointer void_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type char_ptr; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; + public: - std::size_t len; // Message length + size_type len; // Message length unsigned int priority;// Message priority //!Returns the data buffer associated with this this message void * data(){ return this+1; } // }; //!This functor is the predicate to order stored messages by priority +template class priority_functor { + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer >::type msg_hdr_ptr_t; + public: - bool operator()(const offset_ptr &msg1, - const offset_ptr &msg2) const + bool operator()(const msg_hdr_ptr_t &msg1, + const msg_hdr_ptr_t &msg2) const { return msg1->priority < msg2->priority; } }; -//!This header is placed in the beginning of the shared memory and contains -//!the data to control the queue. This class initializes the shared memory +//!This header is placed in the beginning of the shared memory and contains +//!the data to control the queue. This class initializes the shared memory //!in the following way: in ascending memory address with proper alignment //!fillings: //! -//!-> mq_hdr_t: +//!-> mq_hdr_t: //! Main control block that controls the rest of the elements //! //!-> offset_ptr index [max_num_msg] -//! An array of pointers with size "max_num_msg" called index. Each pointer -//! points to a preallocated message. The elements of this array are +//! An array of pointers with size "max_num_msg" called index. Each pointer +//! points to a preallocated message. The elements of this array are //! reordered in runtime in the following way: //! -//! When the current number of messages is "cur_num_msg", the first +//! When the current number of messages is "cur_num_msg", the first //! "cur_num_msg" pointers point to inserted messages and the rest //! point to free messages. The first "cur_num_msg" pointers are -//! ordered by the priority of the pointed message and by insertion order -//! if two messages have the same priority. So the next message to be +//! ordered by the priority of the pointed message and by insertion order +//! if two messages have the same priority. So the next message to be //! used in a "receive" is pointed by index [cur_num_msg-1] and the first free //! message ready to be used in a "send" operation is index [cur_num_msg]. //! This transforms index in a fixed size priority queue with an embedded free //! message queue. //! //!-> struct message_t -//! { +//! { //! msg_hdr_t header; //! char[max_msg_size] data; //! } messages [max_num_msg]; @@ -225,23 +249,35 @@ class priority_functor //! An array of buffers of preallocated messages, each one prefixed with the //! msg_hdr_t structure. Each of this message is pointed by one pointer of //! the index structure. +template class mq_hdr_t - : public detail::priority_functor -{ - typedef offset_ptr msg_hdr_ptr_t; + : public ipcdetail::priority_functor +{ + typedef VoidPointer void_pointer; + typedef msg_hdr_t msg_header; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type msg_hdr_ptr_t; + typedef typename boost::intrusive::pointer_traits + ::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type msg_hdr_ptr_ptr_t; + public: - //!Constructor. This object must be constructed in the beginning of the + //!Constructor. This object must be constructed in the beginning of the //!shared memory of the size returned by the function "get_mem_size". //!This constructor initializes the needed resources and creates //!the internal structures like the priority index. This can throw.*/ - mq_hdr_t(std::size_t max_num_msg, std::size_t max_msg_size) - : m_max_num_msg(max_num_msg), + mq_hdr_t(size_type max_num_msg, size_type max_msg_size) + : m_max_num_msg(max_num_msg), m_max_msg_size(max_msg_size), m_cur_num_msg(0) { this->initialize_memory(); } //!Returns the inserted message with top priority - msg_hdr_t * top_msg() + msg_header * top_msg() { return mp_index[m_cur_num_msg-1].get(); } //!Returns true if the message queue is full @@ -257,18 +293,18 @@ class mq_hdr_t { --m_cur_num_msg; } //!Returns the first free msg of the free message queue - msg_hdr_t * free_msg() + msg_header * free_msg() { return mp_index[m_cur_num_msg].get(); } //!Inserts the first free message in the priority queue void queue_free_msg() - { + { //Get free msg msg_hdr_ptr_t free = mp_index[m_cur_num_msg]; //Get priority queue's range msg_hdr_ptr_t *it = &mp_index[0], *it_end = &mp_index[m_cur_num_msg]; //Check where the free message should be placed - it = std::lower_bound(it, it_end, free, static_cast(*this)); + it = std::lower_bound(it, it_end, free, static_cast&>(*this)); //Make room in that position std::copy_backward(it, it_end, it_end+1); //Insert the free message in the correct position @@ -276,61 +312,61 @@ class mq_hdr_t ++m_cur_num_msg; } - //!Returns the number of bytes needed to construct a message queue with - //!"max_num_size" maximum number of messages and "max_msg_size" maximum + //!Returns the number of bytes needed to construct a message queue with + //!"max_num_size" maximum number of messages and "max_msg_size" maximum //!message size. Never throws. - static std::size_t get_mem_size - (std::size_t max_msg_size, std::size_t max_num_msg) + static size_type get_mem_size + (size_type max_msg_size, size_type max_num_msg) { - const std::size_t - msg_hdr_align = detail::alignment_of::value, - index_align = detail::alignment_of::value, - r_hdr_size = detail::ct_rounded_size::value, - r_index_size = detail::get_rounded_size(sizeof(msg_hdr_ptr_t)*max_num_msg, msg_hdr_align), - r_max_msg_size = detail::get_rounded_size(max_msg_size, msg_hdr_align) + sizeof(detail::msg_hdr_t); - return r_hdr_size + r_index_size + (max_num_msg*r_max_msg_size) + - detail::managed_open_or_create_impl::ManagedOpenOrCreateUserOffset; + const size_type + msg_hdr_align = ::boost::alignment_of::value, + index_align = ::boost::alignment_of::value, + r_hdr_size = ipcdetail::ct_rounded_size::value, + r_index_size = ipcdetail::get_rounded_size(sizeof(msg_hdr_ptr_t)*max_num_msg, msg_hdr_align), + r_max_msg_size = ipcdetail::get_rounded_size(max_msg_size, msg_hdr_align) + sizeof(msg_header); + return r_hdr_size + r_index_size + (max_num_msg*r_max_msg_size) + + ipcdetail::managed_open_or_create_impl::ManagedOpenOrCreateUserOffset; } //!Initializes the memory structures to preallocate messages and constructs the //!message index. Never throws. void initialize_memory() { - const std::size_t - msg_hdr_align = detail::alignment_of::value, - index_align = detail::alignment_of::value, - r_hdr_size = detail::ct_rounded_size::value, - r_index_size = detail::get_rounded_size(sizeof(msg_hdr_ptr_t)*m_max_num_msg, msg_hdr_align), - r_max_msg_size = detail::get_rounded_size(m_max_msg_size, msg_hdr_align) + sizeof(detail::msg_hdr_t); + const size_type + msg_hdr_align = ::boost::alignment_of::value, + index_align = ::boost::alignment_of::value, + r_hdr_size = ipcdetail::ct_rounded_size::value, + r_index_size = ipcdetail::get_rounded_size(sizeof(msg_hdr_ptr_t)*m_max_num_msg, msg_hdr_align), + r_max_msg_size = ipcdetail::get_rounded_size(m_max_msg_size, msg_hdr_align) + sizeof(msg_header); //Pointer to the index msg_hdr_ptr_t *index = reinterpret_cast (reinterpret_cast(this)+r_hdr_size); //Pointer to the first message header - detail::msg_hdr_t *msg_hdr = reinterpret_cast - (reinterpret_cast(this)+r_hdr_size+r_index_size); + msg_header *msg_hdr = reinterpret_cast + (reinterpret_cast(this)+r_hdr_size+r_index_size); //Initialize the pointer to the index mp_index = index; //Initialize the index so each slot points to a preallocated message - for(std::size_t i = 0; i < m_max_num_msg; ++i){ + for(size_type i = 0; i < m_max_num_msg; ++i){ index[i] = msg_hdr; - msg_hdr = reinterpret_cast + msg_hdr = reinterpret_cast (reinterpret_cast(msg_hdr)+r_max_msg_size); } } public: //Pointer to the index - offset_ptr mp_index; + msg_hdr_ptr_ptr_t mp_index; //Maximum number of messages of the queue - const std::size_t m_max_num_msg; + const size_type m_max_num_msg; //Maximum size of messages of the queue - const std::size_t m_max_msg_size; + const size_type m_max_msg_size; //Current number of messages - std::size_t m_cur_num_msg; + size_type m_cur_num_msg; //Mutex to protect data structures interprocess_mutex m_mutex; //Condition block receivers when there are no messages @@ -340,16 +376,23 @@ class mq_hdr_t }; -//!This is the atomic functor to be executed when creating or opening +//!This is the atomic functor to be executed when creating or opening //!shared memory. Never throws +template class initialization_func_t { public: - initialization_func_t(std::size_t maxmsg = 0, - std::size_t maxmsgsize = 0) + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type char_ptr; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; + + initialization_func_t(size_type maxmsg = 0, + size_type maxmsgsize = 0) : m_maxmsg (maxmsg), m_maxmsgsize(maxmsgsize) {} - bool operator()(void *address, std::size_t, bool created) + bool operator()(void *address, size_type, bool created) { char *mptr; @@ -357,81 +400,89 @@ class initialization_func_t mptr = reinterpret_cast(address); //Construct the message queue header at the beginning BOOST_TRY{ - new (mptr) mq_hdr_t(m_maxmsg, m_maxmsgsize); + new (mptr) mq_hdr_t(m_maxmsg, m_maxmsgsize); } BOOST_CATCH(...){ - return false; + return false; } BOOST_CATCH_END } return true; } - const std::size_t m_maxmsg; - const std::size_t m_maxmsgsize; + const size_type m_maxmsg; + const size_type m_maxmsgsize; }; -} //namespace detail { +} //namespace ipcdetail { -inline message_queue::~message_queue() +template +inline message_queue_t::~message_queue_t() {} -inline std::size_t message_queue::get_mem_size - (std::size_t max_msg_size, std::size_t max_num_msg) -{ return detail::mq_hdr_t::get_mem_size(max_msg_size, max_num_msg); } +template +inline typename message_queue_t::size_type message_queue_t::get_mem_size + (size_type max_msg_size, size_type max_num_msg) +{ return ipcdetail::mq_hdr_t::get_mem_size(max_msg_size, max_num_msg); } -inline message_queue::message_queue(create_only_t create_only, - const char *name, - std::size_t max_num_msg, - std::size_t max_msg_size, +template +inline message_queue_t::message_queue_t(create_only_t create_only, + const char *name, + size_type max_num_msg, + size_type max_msg_size, const permissions &perm) //Create shared memory and execute functor atomically - : m_shmem(create_only, - name, + : m_shmem(create_only, + name, + get_mem_size(max_msg_size, max_num_msg), + read_write, + static_cast(0), + //Prepare initialization functor + ipcdetail::initialization_func_t (max_num_msg, max_msg_size), + perm) +{} + +template +inline message_queue_t::message_queue_t(open_or_create_t open_or_create, + const char *name, + size_type max_num_msg, + size_type max_msg_size, + const permissions &perm) + //Create shared memory and execute functor atomically + : m_shmem(open_or_create, + name, get_mem_size(max_msg_size, max_num_msg), read_write, static_cast(0), //Prepare initialization functor - detail::initialization_func_t (max_num_msg, max_msg_size), + ipcdetail::initialization_func_t (max_num_msg, max_msg_size), perm) {} -inline message_queue::message_queue(open_or_create_t open_or_create, - const char *name, - std::size_t max_num_msg, - std::size_t max_msg_size, - const permissions &perm) - //Create shared memory and execute functor atomically - : m_shmem(open_or_create, - name, - get_mem_size(max_msg_size, max_num_msg), - read_write, - static_cast(0), - //Prepare initialization functor - detail::initialization_func_t (max_num_msg, max_msg_size), - perm) -{} - -inline message_queue::message_queue(open_only_t open_only, +template +inline message_queue_t::message_queue_t(open_only_t open_only, const char *name) //Create shared memory and execute functor atomically - : m_shmem(open_only, + : m_shmem(open_only, name, read_write, static_cast(0), //Prepare initialization functor - detail::initialization_func_t ()) + ipcdetail::initialization_func_t ()) {} -inline void message_queue::send - (const void *buffer, std::size_t buffer_size, unsigned int priority) +template +inline void message_queue_t::send + (const void *buffer, size_type buffer_size, unsigned int priority) { this->do_send(blocking, buffer, buffer_size, priority, ptime()); } -inline bool message_queue::try_send - (const void *buffer, std::size_t buffer_size, unsigned int priority) +template +inline bool message_queue_t::try_send + (const void *buffer, size_type buffer_size, unsigned int priority) { return this->do_send(non_blocking, buffer, buffer_size, priority, ptime()); } -inline bool message_queue::timed_send - (const void *buffer, std::size_t buffer_size +template +inline bool message_queue_t::timed_send + (const void *buffer, size_type buffer_size ,unsigned int priority, const boost::posix_time::ptime &abs_time) { if(abs_time == boost::posix_time::pos_infin){ @@ -441,11 +492,12 @@ inline bool message_queue::timed_send return this->do_send(timed, buffer, buffer_size, priority, abs_time); } -inline bool message_queue::do_send(block_t block, - const void *buffer, std::size_t buffer_size, +template +inline bool message_queue_t::do_send(block_t block, + const void *buffer, size_type buffer_size, unsigned int priority, const boost::posix_time::ptime &abs_time) { - detail::mq_hdr_t *p_hdr = static_cast(m_shmem.get_user_address()); + ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); //Check if buffer is smaller than maximum allowed if (buffer_size > p_hdr->m_max_msg_size) { throw interprocess_exception(size_error); @@ -484,9 +536,9 @@ inline bool message_queue::do_send(block_t block, break; } } - + //Get the first free message from free message queue - detail::msg_hdr_t *free_msg = p_hdr->free_msg(); + ipcdetail::msg_hdr_t *free_msg = p_hdr->free_msg(); if (free_msg == 0) { throw interprocess_exception("boost::interprocess::message_queue corrupted"); } @@ -501,7 +553,7 @@ inline bool message_queue::do_send(block_t block, // bool was_empty = p_hdr->is_empty(); //Insert the first free message in the priority queue p_hdr->queue_free_msg(); - + //If this message changes the queue empty state, notify it to receivers // if (was_empty){ p_hdr->m_cond_recv.notify_one(); @@ -511,18 +563,21 @@ inline bool message_queue::do_send(block_t block, return true; } -inline void message_queue::receive(void *buffer, std::size_t buffer_size, - std::size_t &recvd_size, unsigned int &priority) +template +inline void message_queue_t::receive(void *buffer, size_type buffer_size, + size_type &recvd_size, unsigned int &priority) { this->do_receive(blocking, buffer, buffer_size, recvd_size, priority, ptime()); } +template inline bool - message_queue::try_receive(void *buffer, std::size_t buffer_size, - std::size_t &recvd_size, unsigned int &priority) + message_queue_t::try_receive(void *buffer, size_type buffer_size, + size_type &recvd_size, unsigned int &priority) { return this->do_receive(non_blocking, buffer, buffer_size, recvd_size, priority, ptime()); } +template inline bool - message_queue::timed_receive(void *buffer, std::size_t buffer_size, - std::size_t &recvd_size, unsigned int &priority, + message_queue_t::timed_receive(void *buffer, size_type buffer_size, + size_type &recvd_size, unsigned int &priority, const boost::posix_time::ptime &abs_time) { if(abs_time == boost::posix_time::pos_infin){ @@ -532,13 +587,14 @@ inline bool return this->do_receive(timed, buffer, buffer_size, recvd_size, priority, abs_time); } +template inline bool - message_queue::do_receive(block_t block, - void *buffer, std::size_t buffer_size, - std::size_t &recvd_size, unsigned int &priority, + message_queue_t::do_receive(block_t block, + void *buffer, size_type buffer_size, + size_type &recvd_size, unsigned int &priority, const boost::posix_time::ptime &abs_time) { - detail::mq_hdr_t *p_hdr = static_cast(m_shmem.get_user_address()); + ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); //Check if buffer is big enough for any message if (buffer_size < p_hdr->m_max_msg_size) { throw interprocess_exception(size_error); @@ -580,7 +636,7 @@ inline bool } //Thre is at least message ready to pick, get the top one - detail::msg_hdr_t *top_msg = p_hdr->top_msg(); + ipcdetail::msg_hdr_t *top_msg = p_hdr->top_msg(); //Paranoia check if (top_msg == 0) { @@ -592,7 +648,7 @@ inline bool priority = top_msg->priority; //Copy data to receiver's bufers - std::memcpy(buffer, top_msg->data(), recvd_size); + std::memcpy(buffer, top_msg->data(), recvd_size); // bool was_full = p_hdr->is_full(); @@ -608,20 +664,23 @@ inline bool return true; } -inline std::size_t message_queue::get_max_msg() const -{ - detail::mq_hdr_t *p_hdr = static_cast(m_shmem.get_user_address()); +template +inline typename message_queue_t::size_type message_queue_t::get_max_msg() const +{ + ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); return p_hdr ? p_hdr->m_max_num_msg : 0; } -inline std::size_t message_queue::get_max_msg_size() const -{ - detail::mq_hdr_t *p_hdr = static_cast(m_shmem.get_user_address()); - return p_hdr ? p_hdr->m_max_msg_size : 0; +template +inline typename message_queue_t::size_type message_queue_t::get_max_msg_size() const +{ + ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); + return p_hdr ? p_hdr->m_max_msg_size : 0; } -inline std::size_t message_queue::get_num_msg() -{ - detail::mq_hdr_t *p_hdr = static_cast(m_shmem.get_user_address()); +template +inline typename message_queue_t::size_type message_queue_t::get_num_msg() +{ + ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); if(p_hdr){ //--------------------------------------------- scoped_lock lock(p_hdr->m_mutex); @@ -629,10 +688,11 @@ inline std::size_t message_queue::get_num_msg() return p_hdr->m_cur_num_msg; } - return 0; + return 0; } -inline bool message_queue::remove(const char *name) +template +inline bool message_queue_t::remove(const char *name) { return shared_memory_object::remove(name); } /// @endcond diff --git a/3party/boost/boost/interprocess/managed_external_buffer.hpp b/3party/boost/boost/interprocess/managed_external_buffer.hpp index c4c70f030b..e268e57601 100644 --- a/3party/boost/boost/interprocess/managed_external_buffer.hpp +++ b/3party/boost/boost/interprocess/managed_external_buffer.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,34 +19,40 @@ #include #include #include -#include +#include #include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include +#include //!\file -//!Describes a named user memory allocation user class. +//!Describes a named user memory allocation user class. namespace boost { namespace interprocess { -//!A basic user memory named object creation class. Inherits all -//!basic functionality from +//!A basic user memory named object creation class. Inherits all +//!basic functionality from //!basic_managed_memory_impl*/ template < - class CharType, - class AllocationAlgorithm, + class CharType, + class AllocationAlgorithm, template class IndexType > -class basic_managed_external_buffer - : public detail::basic_managed_memory_impl +class basic_managed_external_buffer + : public ipcdetail::basic_managed_memory_impl { /// @cond - typedef detail::basic_managed_memory_impl + typedef ipcdetail::basic_managed_memory_impl base_t; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(basic_managed_external_buffer) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_external_buffer) /// @endcond - + public: + typedef typename base_t::size_type size_type; //!Default constructor. Does nothing. //!Useful in combination with move semantics @@ -55,10 +61,10 @@ class basic_managed_external_buffer //!Creates and places the segment manager. This can throw basic_managed_external_buffer - (create_only_t, void *addr, std::size_t size) + (create_only_t, void *addr, size_type size) { //Check if alignment is correct - BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - std::size_t(1u))))); + BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - size_type(1u))))); if(!base_t::create_impl(addr, size)){ throw interprocess_exception("Could not initialize buffer in basic_managed_external_buffer constructor"); } @@ -66,30 +72,30 @@ class basic_managed_external_buffer //!Creates and places the segment manager. This can throw basic_managed_external_buffer - (open_only_t, void *addr, std::size_t size) + (open_only_t, void *addr, size_type size) { //Check if alignment is correct - BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - std::size_t(1u))))); + BOOST_ASSERT((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - size_type(1u))))); if(!base_t::open_impl(addr, size)){ throw interprocess_exception("Could not initialize buffer in basic_managed_external_buffer constructor"); } } //!Moves the ownership of "moved"'s managed memory to *this. Does not throw - basic_managed_external_buffer(BOOST_INTERPROCESS_RV_REF(basic_managed_external_buffer) moved) + basic_managed_external_buffer(BOOST_RV_REF(basic_managed_external_buffer) moved) { this->swap(moved); } //!Moves the ownership of "moved"'s managed memory to *this. Does not throw - basic_managed_external_buffer &operator=(BOOST_INTERPROCESS_RV_REF(basic_managed_external_buffer) moved) + basic_managed_external_buffer &operator=(BOOST_RV_REF(basic_managed_external_buffer) moved) { - basic_managed_external_buffer tmp(boost::interprocess::move(moved)); + basic_managed_external_buffer tmp(boost::move(moved)); this->swap(tmp); return *this; } - void grow(std::size_t extra_bytes) + void grow(size_type extra_bytes) { base_t::grow(extra_bytes); } //!Swaps the ownership of the managed heap memories managed by *this and other. diff --git a/3party/boost/boost/interprocess/managed_heap_memory.hpp b/3party/boost/boost/interprocess/managed_heap_memory.hpp index 7a60b9f637..87107855f2 100644 --- a/3party/boost/boost/interprocess/managed_heap_memory.hpp +++ b/3party/boost/boost/interprocess/managed_heap_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,38 +18,44 @@ #include #include #include -#include +#include #include #include #include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include +#include //!\file -//!Describes a named heap memory allocation user class. +//!Describes a named heap memory allocation user class. namespace boost { namespace interprocess { -//!A basic heap memory named object creation class. Initializes the -//!heap memory segment. Inherits all basic functionality from +//!A basic heap memory named object creation class. Initializes the +//!heap memory segment. Inherits all basic functionality from //!basic_managed_memory_impl*/ template < - class CharType, - class AllocationAlgorithm, + class CharType, + class AllocationAlgorithm, template class IndexType > -class basic_managed_heap_memory - : public detail::basic_managed_memory_impl +class basic_managed_heap_memory + : public ipcdetail::basic_managed_memory_impl { /// @cond private: - typedef detail::basic_managed_memory_impl + typedef ipcdetail::basic_managed_memory_impl base_t; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(basic_managed_heap_memory) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_heap_memory) /// @endcond public: //functions + typedef typename base_t::size_type size_type; //!Default constructor. Does nothing. //!Useful in combination with move semantics @@ -62,7 +68,7 @@ class basic_managed_heap_memory //!Creates heap memory and initializes the segment manager. //!This can throw. - basic_managed_heap_memory(std::size_t size) + basic_managed_heap_memory(size_type size) : m_heapmem(size, char(0)) { if(!base_t::create_impl(&m_heapmem[0], size)){ @@ -72,32 +78,32 @@ class basic_managed_heap_memory } //!Moves the ownership of "moved"'s managed memory to *this. Does not throw - basic_managed_heap_memory(BOOST_INTERPROCESS_RV_REF(basic_managed_heap_memory) moved) + basic_managed_heap_memory(BOOST_RV_REF(basic_managed_heap_memory) moved) { this->swap(moved); } //!Moves the ownership of "moved"'s managed memory to *this. Does not throw - basic_managed_heap_memory &operator=(BOOST_INTERPROCESS_RV_REF(basic_managed_heap_memory) moved) + basic_managed_heap_memory &operator=(BOOST_RV_REF(basic_managed_heap_memory) moved) { - basic_managed_heap_memory tmp(boost::interprocess::move(moved)); + basic_managed_heap_memory tmp(boost::move(moved)); this->swap(tmp); return *this; } //!Tries to resize internal heap memory so that - //!we have room for more objects. - //!WARNING: If memory is reallocated, all the objects will + //!we have room for more objects. + //!WARNING: If memory is reallocated, all the objects will //!be binary-copied to the new buffer. To be able to use //!this function, all pointers constructed in this buffer //!must be offset pointers. Otherwise, the result is undefined. //!Returns true if the growth has been successful, so you will - //!have some extra bytes to allocate new objects. If returns + //!have some extra bytes to allocate new objects. If returns //!false, the heap allocation has failed. - bool grow(std::size_t extra_bytes) - { + bool grow(size_type extra_bytes) + { //If memory is reallocated, data will //be automatically copied BOOST_TRY{ - m_heapmem.resize(m_heapmem.size()+extra_bytes); + m_heapmem.resize(m_heapmem.size()+extra_bytes); } BOOST_CATCH(...){ return false; @@ -123,7 +129,7 @@ class basic_managed_heap_memory private: //!Frees resources. Never throws. void priv_close() - { + { base_t::destroy_impl(); std::vector().swap(m_heapmem); } diff --git a/3party/boost/boost/interprocess/managed_mapped_file.hpp b/3party/boost/boost/interprocess/managed_mapped_file.hpp index d548259715..5a351adfa5 100644 --- a/3party/boost/boost/interprocess/managed_mapped_file.hpp +++ b/3party/boost/boost/interprocess/managed_mapped_file.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -21,60 +21,71 @@ #include #include #include -#include +#include #include #include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include +#include namespace boost { namespace interprocess { -//!A basic mapped file named object creation class. Initializes the -//!mapped file. Inherits all basic functionality from +//!A basic mapped file named object creation class. Initializes the +//!mapped file. Inherits all basic functionality from //!basic_managed_memory_impl template < - class CharType, - class AllocationAlgorithm, + class CharType, + class AllocationAlgorithm, template class IndexType > -class basic_managed_mapped_file - : public detail::basic_managed_memory_impl +class basic_managed_mapped_file + : public ipcdetail::basic_managed_memory_impl ::ManagedOpenOrCreateUserOffset> + ,ipcdetail::managed_open_or_create_impl< ipcdetail::file_wrapper + , AllocationAlgorithm::Alignment>::ManagedOpenOrCreateUserOffset + > { /// @cond public: - typedef detail::basic_managed_memory_impl + typedef ipcdetail::basic_managed_memory_impl ::ManagedOpenOrCreateUserOffset> base_t; - typedef detail::file_wrapper device_type; + ipcdetail::managed_open_or_create_impl + ::ManagedOpenOrCreateUserOffset + > base_t; + typedef ipcdetail::file_wrapper device_type; + typedef typename base_t::size_type size_type; private: - typedef detail::create_open_func create_open_func_t; - typedef detail::managed_open_or_create_impl managed_open_or_create_type; + typedef ipcdetail::create_open_func create_open_func_t; + typedef ipcdetail::managed_open_or_create_impl< ipcdetail::file_wrapper + , AllocationAlgorithm::Alignment> managed_open_or_create_type; basic_managed_mapped_file *get_this_pointer() { return this; } private: typedef typename base_t::char_ptr_holder_t char_ptr_holder_t; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(basic_managed_mapped_file) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_mapped_file) /// @endcond public: //functions - //!Creates mapped file and creates and places the segment manager. + //!Creates mapped file and creates and places the segment manager. //!This can throw. basic_managed_mapped_file() {} - //!Creates mapped file and creates and places the segment manager. + //!Creates mapped file and creates and places the segment manager. //!This can throw. basic_managed_mapped_file(create_only_t create_only, const char *name, - std::size_t size, const void *addr = 0, const permissions &perm = permissions()) - : m_mfile(create_only, name, size, read_write, addr, - create_open_func_t(get_this_pointer(), detail::DoCreate), perm) + size_type size, const void *addr = 0, const permissions &perm = permissions()) + : m_mfile(create_only, name, size, read_write, addr, + create_open_func_t(get_this_pointer(), ipcdetail::DoCreate), perm) {} //!Creates mapped file and creates and places the segment manager if @@ -82,54 +93,54 @@ class basic_managed_mapped_file //!segment. //!This can throw. basic_managed_mapped_file (open_or_create_t open_or_create, - const char *name, std::size_t size, + const char *name, size_type size, const void *addr = 0, const permissions &perm = permissions()) : m_mfile(open_or_create, name, size, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpenOrCreate), perm) + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpenOrCreate), perm) {} //!Connects to a created mapped file and its segment manager. //!This can throw. - basic_managed_mapped_file (open_only_t open_only, const char* name, + basic_managed_mapped_file (open_only_t open_only, const char* name, const void *addr = 0) : m_mfile(open_only, name, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Connects to a created mapped file and its segment manager //!in copy_on_write mode. //!This can throw. - basic_managed_mapped_file (open_copy_on_write_t, const char* name, + basic_managed_mapped_file (open_copy_on_write_t, const char* name, const void *addr = 0) - : m_mfile(open_only, name, copy_on_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + : m_mfile(open_only, name, copy_on_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Connects to a created mapped file and its segment manager //!in read-only mode. //!This can throw. - basic_managed_mapped_file (open_read_only_t, const char* name, + basic_managed_mapped_file (open_read_only_t, const char* name, const void *addr = 0) - : m_mfile(open_only, name, read_only, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + : m_mfile(open_only, name, read_only, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_mapped_file(BOOST_INTERPROCESS_RV_REF(basic_managed_mapped_file) moved) + basic_managed_mapped_file(BOOST_RV_REF(basic_managed_mapped_file) moved) { this->swap(moved); } //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_mapped_file &operator=(BOOST_INTERPROCESS_RV_REF(basic_managed_mapped_file) moved) + basic_managed_mapped_file &operator=(BOOST_RV_REF(basic_managed_mapped_file) moved) { - basic_managed_mapped_file tmp(boost::interprocess::move(moved)); + basic_managed_mapped_file tmp(boost::move(moved)); this->swap(tmp); return *this; } @@ -156,12 +167,12 @@ class basic_managed_mapped_file bool flush() { return m_mfile.flush(); } - //!Tries to resize mapped file so that we have room for - //!more objects. + //!Tries to resize mapped file so that we have room for + //!more objects. //! //!This function is not synchronized so no other thread or process should //!be reading or writing the file - static bool grow(const char *filename, std::size_t extra_bytes) + static bool grow(const char *filename, size_type extra_bytes) { return base_t::template grow (filename, extra_bytes); @@ -183,7 +194,7 @@ class basic_managed_mapped_file //!buffer and the object count. If not found returned pointer is 0. //!Never throws. template - std::pair find (char_ptr_holder_t name) + std::pair find (char_ptr_holder_t name) { if(m_mfile.get_mapped_region().get_mode() == read_only){ return base_t::template find_no_lock(name); diff --git a/3party/boost/boost/interprocess/managed_shared_memory.hpp b/3party/boost/boost/interprocess/managed_shared_memory.hpp index 5884cf6391..0f74c1a0b9 100644 --- a/3party/boost/boost/interprocess/managed_shared_memory.hpp +++ b/3party/boost/boost/interprocess/managed_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,50 +19,56 @@ #include #include -#include #include #include #include #include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include namespace boost { namespace interprocess { -//!A basic shared memory named object creation class. Initializes the -//!shared memory segment. Inherits all basic functionality from +//!A basic shared memory named object creation class. Initializes the +//!shared memory segment. Inherits all basic functionality from //!basic_managed_memory_impl*/ template < - class CharType, - class AllocationAlgorithm, + class CharType, + class AllocationAlgorithm, template class IndexType > -class basic_managed_shared_memory - : public detail::basic_managed_memory_impl +class basic_managed_shared_memory + : public ipcdetail::basic_managed_memory_impl ::ManagedOpenOrCreateUserOffset> - , private detail::managed_open_or_create_impl + ,ipcdetail::managed_open_or_create_impl::ManagedOpenOrCreateUserOffset> + , private ipcdetail::managed_open_or_create_impl { /// @cond - public: - typedef shared_memory_object device_type; - - private: - typedef detail::basic_managed_memory_impl + typedef ipcdetail::basic_managed_memory_impl ::ManagedOpenOrCreateUserOffset> base_t; - typedef detail::managed_open_or_create_impl - base2_t; + ipcdetail::managed_open_or_create_impl + < shared_memory_object, AllocationAlgorithm::Alignment>::ManagedOpenOrCreateUserOffset> base_t; + typedef ipcdetail::managed_open_or_create_impl + base2_t; - typedef detail::create_open_func create_open_func_t; + typedef ipcdetail::create_open_func create_open_func_t; basic_managed_shared_memory *get_this_pointer() { return this; } + public: + typedef shared_memory_object device_type; + typedef typename base_t::size_type size_type; + private: typedef typename base_t::char_ptr_holder_t char_ptr_holder_t; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(basic_managed_shared_memory) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_shared_memory) /// @endcond public: //functions @@ -81,13 +87,13 @@ class basic_managed_shared_memory basic_managed_shared_memory() {} - //!Creates shared memory and creates and places the segment manager. + //!Creates shared memory and creates and places the segment manager. //!This can throw. basic_managed_shared_memory(create_only_t create_only, const char *name, - std::size_t size, const void *addr = 0, const permissions& perm = permissions()) + size_type size, const void *addr = 0, const permissions& perm = permissions()) : base_t() - , base2_t(create_only, name, size, read_write, addr, - create_open_func_t(get_this_pointer(), detail::DoCreate), perm) + , base2_t(create_only, name, size, read_write, addr, + create_open_func_t(get_this_pointer(), ipcdetail::DoCreate), perm) {} //!Creates shared memory and creates and places the segment manager if @@ -95,49 +101,49 @@ class basic_managed_shared_memory //!segment. //!This can throw. basic_managed_shared_memory (open_or_create_t open_or_create, - const char *name, std::size_t size, + const char *name, size_type size, const void *addr = 0, const permissions& perm = permissions()) : base_t() - , base2_t(open_or_create, name, size, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpenOrCreate), perm) + , base2_t(open_or_create, name, size, read_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpenOrCreate), perm) {} //!Connects to a created shared memory and its segment manager. //!in copy_on_write mode. //!This can throw. - basic_managed_shared_memory (open_copy_on_write_t, const char* name, + basic_managed_shared_memory (open_copy_on_write_t, const char* name, const void *addr = 0) : base_t() - , base2_t(open_only, name, copy_on_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + , base2_t(open_only, name, copy_on_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Connects to a created shared memory and its segment manager. //!in read-only mode. //!This can throw. - basic_managed_shared_memory (open_read_only_t, const char* name, + basic_managed_shared_memory (open_read_only_t, const char* name, const void *addr = 0) : base_t() - , base2_t(open_only, name, read_only, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + , base2_t(open_only, name, read_only, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Connects to a created shared memory and its segment manager. //!This can throw. - basic_managed_shared_memory (open_only_t open_only, const char* name, + basic_managed_shared_memory (open_only_t open_only, const char* name, const void *addr = 0) : base_t() - , base2_t(open_only, name, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + , base2_t(open_only, name, read_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_shared_memory(BOOST_INTERPROCESS_RV_REF(basic_managed_shared_memory) moved) + basic_managed_shared_memory(BOOST_RV_REF(basic_managed_shared_memory) moved) { basic_managed_shared_memory tmp; this->swap(moved); @@ -146,9 +152,9 @@ class basic_managed_shared_memory //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_shared_memory &operator=(BOOST_INTERPROCESS_RV_REF(basic_managed_shared_memory) moved) + basic_managed_shared_memory &operator=(BOOST_RV_REF(basic_managed_shared_memory) moved) { - basic_managed_shared_memory tmp(boost::interprocess::move(moved)); + basic_managed_shared_memory tmp(boost::move(moved)); this->swap(tmp); return *this; } @@ -162,11 +168,11 @@ class basic_managed_shared_memory } //!Tries to resize the managed shared memory object so that we have - //!room for more objects. + //!room for more objects. //! //!This function is not synchronized so no other thread or process should //!be reading or writing the file - static bool grow(const char *shmname, std::size_t extra_bytes) + static bool grow(const char *shmname, size_type extra_bytes) { return base_t::template grow (shmname, extra_bytes); @@ -181,19 +187,13 @@ class basic_managed_shared_memory return base_t::template shrink_to_fit (shmname); } - - bool flush() - { - return this->base2_t::flush(); - } - /// @cond //!Tries to find a previous named allocation address. Returns a memory //!buffer and the object count. If not found returned pointer is 0. //!Never throws. template - std::pair find (char_ptr_holder_t name) + std::pair find (char_ptr_holder_t name) { if(base2_t::get_mapped_region().get_mode() == read_only){ return base_t::template find_no_lock(name); diff --git a/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp b/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp index c28b451fb4..414007a614 100644 --- a/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp +++ b/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -22,13 +22,18 @@ #include #include #include -#include +#include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include +#include namespace boost { namespace interprocess { -//!A basic managed windows shared memory creation class. Initializes the -//!shared memory segment. Inherits all basic functionality from +//!A basic managed windows shared memory creation class. Initializes the +//!shared memory segment. Inherits all basic functionality from //!basic_managed_memory_impl //!Unlike basic_managed_shared_memory, it has //!no kernel persistence and the shared memory is destroyed @@ -40,44 +45,50 @@ namespace interprocess { //!basic_managed_shared_memory can't communicate between them. template < - class CharType, - class AllocationAlgorithm, + class CharType, + class AllocationAlgorithm, template class IndexType > -class basic_managed_windows_shared_memory - : public detail::basic_managed_memory_impl - ::ManagedOpenOrCreateUserOffset> +class basic_managed_windows_shared_memory + : public ipcdetail::basic_managed_memory_impl + < CharType, AllocationAlgorithm, IndexType + , ipcdetail::managed_open_or_create_impl + < windows_shared_memory + , AllocationAlgorithm::Alignment + , false>::ManagedOpenOrCreateUserOffset + > { /// @cond private: - typedef detail::basic_managed_memory_impl + typedef ipcdetail::basic_managed_memory_impl ::ManagedOpenOrCreateUserOffset> base_t; - typedef detail::create_open_func create_open_func_t; + ipcdetail::managed_open_or_create_impl + ::ManagedOpenOrCreateUserOffset> base_t; + typedef ipcdetail::create_open_func create_open_func_t; basic_managed_windows_shared_memory *get_this_pointer() { return this; } private: typedef typename base_t::char_ptr_holder_t char_ptr_holder_t; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(basic_managed_windows_shared_memory) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_windows_shared_memory) /// @endcond public: //functions + typedef typename base_t::size_type size_type; //!Default constructor. Does nothing. //!Useful in combination with move semantics basic_managed_windows_shared_memory() {} - //!Creates shared memory and creates and places the segment manager. + //!Creates shared memory and creates and places the segment manager. //!This can throw. basic_managed_windows_shared_memory (create_only_t create_only, const char *name, - std::size_t size, const void *addr = 0, const permissions &perm = permissions()) - : m_wshm(create_only, name, size, read_write, addr, - create_open_func_t(get_this_pointer(), detail::DoCreate), perm) + size_type size, const void *addr = 0, const permissions &perm = permissions()) + : m_wshm(create_only, name, size, read_write, addr, + create_open_func_t(get_this_pointer(), ipcdetail::DoCreate), perm) {} //!Creates shared memory and creates and places the segment manager if @@ -86,21 +97,21 @@ class basic_managed_windows_shared_memory //!This can throw. basic_managed_windows_shared_memory (open_or_create_t open_or_create, - const char *name, std::size_t size, + const char *name, size_type size, const void *addr = 0, const permissions &perm = permissions()) - : m_wshm(open_or_create, name, size, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpenOrCreate), perm) + : m_wshm(open_or_create, name, size, read_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpenOrCreate), perm) {} //!Connects to a created shared memory and its segment manager. //!This can throw. basic_managed_windows_shared_memory (open_only_t open_only, const char* name, const void *addr = 0) - : m_wshm(open_only, name, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + : m_wshm(open_only, name, read_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Connects to a created shared memory and its segment manager @@ -108,8 +119,8 @@ class basic_managed_windows_shared_memory //!This can throw. basic_managed_windows_shared_memory (open_copy_on_write_t, const char* name, const void *addr = 0) - : m_wshm(open_only, name, copy_on_write, addr, - create_open_func_t(get_this_pointer(), detail::DoOpen)) + : m_wshm(open_only, name, copy_on_write, addr, + create_open_func_t(get_this_pointer(), ipcdetail::DoOpen)) {} //!Connects to a created shared memory and its segment manager @@ -118,21 +129,21 @@ class basic_managed_windows_shared_memory basic_managed_windows_shared_memory (open_read_only_t, const char* name, const void *addr = 0) : base_t() - , m_wshm(open_only, name, read_only, addr, - create_open_func_t(get_this_pointer(), detail::DoOpen)) + , m_wshm(open_only, name, read_only, addr, + create_open_func_t(get_this_pointer(), ipcdetail::DoOpen)) {} //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw basic_managed_windows_shared_memory - (BOOST_INTERPROCESS_RV_REF(basic_managed_windows_shared_memory) moved) + (BOOST_RV_REF(basic_managed_windows_shared_memory) moved) { this->swap(moved); } //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_windows_shared_memory &operator=(BOOST_INTERPROCESS_RV_REF(basic_managed_windows_shared_memory) moved) + basic_managed_windows_shared_memory &operator=(BOOST_RV_REF(basic_managed_windows_shared_memory) moved) { - basic_managed_windows_shared_memory tmp(boost::interprocess::move(moved)); + basic_managed_windows_shared_memory tmp(boost::move(moved)); this->swap(tmp); return *this; } @@ -159,7 +170,7 @@ class basic_managed_windows_shared_memory //!buffer and the object count. If not found returned pointer is 0. //!Never throws. template - std::pair find (char_ptr_holder_t name) + std::pair find (char_ptr_holder_t name) { if(m_wshm.get_mapped_region().get_mode() == read_only){ return base_t::template find_no_lock(name); @@ -170,7 +181,8 @@ class basic_managed_windows_shared_memory } private: - detail::managed_open_or_create_impl m_wshm; + ipcdetail::managed_open_or_create_impl< windows_shared_memory + , AllocationAlgorithm::Alignment, false> m_wshm; /// @endcond }; diff --git a/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp b/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp index 9ff7f7f6c7..dc909f6824 100644 --- a/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp +++ b/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2011. 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) // @@ -26,48 +26,57 @@ #include #include #include +//These includes needed to fulfill default template parameters of +//predeclarations in interprocess_fwd.hpp +#include +#include +#include namespace boost { namespace interprocess { -//!A basic X/Open System Interface (XSI) shared memory named object creation class. Initializes the -//!shared memory segment. Inherits all basic functionality from +//!A basic X/Open System Interface (XSI) shared memory named object creation class. Initializes the +//!shared memory segment. Inherits all basic functionality from //!basic_managed_memory_impl*/ template < - class CharType, - class AllocationAlgorithm, + class CharType, + class AllocationAlgorithm, template class IndexType > -class basic_managed_xsi_shared_memory - : public detail::basic_managed_memory_impl +class basic_managed_xsi_shared_memory + : public ipcdetail::basic_managed_memory_impl ::ManagedOpenOrCreateUserOffset> - , private detail::managed_open_or_create_impl + ,ipcdetail::managed_open_or_create_impl + < xsi_shared_memory_file_wrapper, AllocationAlgorithm::Alignment + , false, true>::ManagedOpenOrCreateUserOffset> + , private ipcdetail::managed_open_or_create_impl + { /// @cond public: typedef xsi_shared_memory_file_wrapper device_type; public: - typedef detail::managed_open_or_create_impl - base2_t; - typedef detail::basic_managed_memory_impl + typedef ipcdetail::managed_open_or_create_impl + base2_t; + typedef ipcdetail::basic_managed_memory_impl base_t; - typedef detail::create_open_func create_open_func_t; + typedef ipcdetail::create_open_func create_open_func_t; basic_managed_xsi_shared_memory *get_this_pointer() { return this; } private: typedef typename base_t::char_ptr_holder_t char_ptr_holder_t; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(basic_managed_xsi_shared_memory) + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_xsi_shared_memory) /// @endcond public: //functions + typedef typename base_t::size_type size_type; //!Destroys *this and indicates that the calling process is finished using //!the resource. The destructor function will deallocate @@ -83,13 +92,13 @@ class basic_managed_xsi_shared_memory basic_managed_xsi_shared_memory() {} - //!Creates shared memory and creates and places the segment manager. + //!Creates shared memory and creates and places the segment manager. //!This can throw. basic_managed_xsi_shared_memory(create_only_t create_only, const xsi_key &key, std::size_t size, const void *addr = 0, const permissions& perm = permissions()) : base_t() - , base2_t(create_only, key, size, read_write, addr, - create_open_func_t(get_this_pointer(), detail::DoCreate), perm) + , base2_t(create_only, key, size, read_write, addr, + create_open_func_t(get_this_pointer(), ipcdetail::DoCreate), perm) {} //!Creates shared memory and creates and places the segment manager if @@ -97,38 +106,38 @@ class basic_managed_xsi_shared_memory //!segment. //!This can throw. basic_managed_xsi_shared_memory (open_or_create_t open_or_create, - const xsi_key &key, std::size_t size, + const xsi_key &key, std::size_t size, const void *addr = 0, const permissions& perm = permissions()) : base_t() - , base2_t(open_or_create, key, size, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpenOrCreate), perm) + , base2_t(open_or_create, key, size, read_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpenOrCreate), perm) {} //!Connects to a created shared memory and its segment manager. //!in read-only mode. //!This can throw. - basic_managed_xsi_shared_memory (open_read_only_t, const xsi_key &key, + basic_managed_xsi_shared_memory (open_read_only_t, const xsi_key &key, const void *addr = 0) : base_t() - , base2_t(open_only, key, read_only, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + , base2_t(open_only, key, read_only, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Connects to a created shared memory and its segment manager. //!This can throw. - basic_managed_xsi_shared_memory (open_only_t open_only, const xsi_key &key, + basic_managed_xsi_shared_memory (open_only_t open_only, const xsi_key &key, const void *addr = 0) : base_t() - , base2_t(open_only, key, read_write, addr, - create_open_func_t(get_this_pointer(), - detail::DoOpen)) + , base2_t(open_only, key, read_write, addr, + create_open_func_t(get_this_pointer(), + ipcdetail::DoOpen)) {} //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_xsi_shared_memory(BOOST_INTERPROCESS_RV_REF(basic_managed_xsi_shared_memory) moved) + basic_managed_xsi_shared_memory(BOOST_RV_REF(basic_managed_xsi_shared_memory) moved) { basic_managed_xsi_shared_memory tmp; this->swap(moved); @@ -137,9 +146,9 @@ class basic_managed_xsi_shared_memory //!Moves the ownership of "moved"'s managed memory to *this. //!Does not throw - basic_managed_xsi_shared_memory &operator=(BOOST_INTERPROCESS_RV_REF(basic_managed_xsi_shared_memory) moved) + basic_managed_xsi_shared_memory &operator=(BOOST_RV_REF(basic_managed_xsi_shared_memory) moved) { - basic_managed_xsi_shared_memory tmp(boost::interprocess::move(moved)); + basic_managed_xsi_shared_memory tmp(boost::move(moved)); this->swap(tmp); return *this; } diff --git a/3party/boost/boost/interprocess/mapped_region.hpp b/3party/boost/boost/interprocess/mapped_region.hpp index 61a8470b9d..522c1e403a 100644 --- a/3party/boost/boost/interprocess/mapped_region.hpp +++ b/3party/boost/boost/interprocess/mapped_region.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -16,14 +16,15 @@ #include #include -#include +#include #include #include #include -#include +#include -#if (defined BOOST_INTERPROCESS_WINDOWS) +#if defined (BOOST_INTERPROCESS_WINDOWS) # include +# include #else # ifdef BOOST_HAS_UNISTD_H # include @@ -48,26 +49,36 @@ namespace boost { namespace interprocess { /// @cond -namespace detail{ class interprocess_tester; } -namespace detail{ class raw_mapped_region_creator; } +namespace ipcdetail{ class interprocess_tester; } +namespace ipcdetail{ class raw_mapped_region_creator; } /// @endcond //!The mapped_region class represents a portion or region created from a //!memory_mappable object. +//! +//!The OS can map a region bigger than the requested one, as region must +//!be multiple of the page size, but mapped_region will always refer to +//!the region specified by the user. class mapped_region { /// @cond //Non-copyable - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(mapped_region) + BOOST_MOVABLE_BUT_NOT_COPYABLE(mapped_region) /// @endcond public: //!Creates a mapping region of the mapped memory "mapping", starting in - //!offset "offset", and the mapping's size will be "size". The mapping - //!can be opened for read-only "read_only" or read-write - //!"read_write. + //!offset "offset", and the mapping's size will be "size". The mapping + //!can be opened for read only, read-write or copy-on-write. + //! + //!If an address is specified, both the offset and the address must be + //!multiples of the page size. + //! + //!The OS could allocate more pages than size/page_size(), but get_address() + //!will always return the address passed in this function (if not null) and + //!get_size() will return the specified size. template mapped_region(const MemoryMappable& mapping ,mode_t mode @@ -75,64 +86,62 @@ class mapped_region ,std::size_t size = 0 ,const void *address = 0); - //!Default constructor. Address and size and offset will be 0. + //!Default constructor. Address will be 0 (nullptr). + //!Size will be 0. //!Does not throw mapped_region(); - //!Move constructor. *this will be constructed taking ownership of "other"'s + //!Move constructor. *this will be constructed taking ownership of "other"'s //!region and "other" will be left in default constructor state. - mapped_region(BOOST_INTERPROCESS_RV_REF(mapped_region) other) + mapped_region(BOOST_RV_REF(mapped_region) other) #if defined (BOOST_INTERPROCESS_WINDOWS) - : m_base(0), m_size(0), m_offset(0) - , m_extra_offset(0) + : m_base(0), m_size(0) + , m_page_offset(0) , m_mode(read_only) - , m_file_mapping_hnd(detail::invalid_file()) + , m_file_or_mapping_hnd(ipcdetail::invalid_file()) #else - : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0), m_mode(read_only), m_is_xsi(false) + : m_base(0), m_size(0), m_page_offset(0), m_mode(read_only), m_is_xsi(false) #endif { this->swap(other); } - //!Destroys the mapped region. //!Does not throw ~mapped_region(); //!Move assignment. If *this owns a memory mapped region, it will be //!destroyed and it will take ownership of "other"'s memory mapped region. - mapped_region &operator=(BOOST_INTERPROCESS_RV_REF(mapped_region) other) + mapped_region &operator=(BOOST_RV_REF(mapped_region) other) { - mapped_region tmp(boost::interprocess::move(other)); + mapped_region tmp(boost::move(other)); this->swap(tmp); return *this; } - //!Returns the size of the mapping. Note for windows users: If - //!windows_shared_memory is mapped using 0 as the size, it returns 0 - //!because the size is unknown. Never throws. + //!Returns the size of the mapping. Never throws. std::size_t get_size() const; //!Returns the base address of the mapping. //!Never throws. void* get_address() const; - //!Returns the offset of the mapping from the beginning of the - //!mapped memory. Never throws. - offset_t get_offset() const; - - //!Returns the mode of the mapping used to construct the mapped file. + //!Returns the mode of the mapping used to construct the mapped region. //!Never throws. mode_t get_mode() const; - //!Flushes to the disk a byte range within the mapped memory. - //!Never throws - bool flush(std::size_t mapping_offset = 0, std::size_t numbytes = 0); + //!Flushes to the disk a byte range within the mapped memory. + //!If 'async' is true, the function will return before flushing operation is completed + //!If 'async' is false, function will return once data has been written into the underlying + //!device (i.e., in mapped files OS cached information is written to disk). + //!Never throws. Returns false if operation could not be performed. + bool flush(std::size_t mapping_offset = 0, std::size_t numbytes = 0, bool async = true); //!Swaps the mapped_region with another //!mapped region void swap(mapped_region &other); //!Returns the size of the page. This size is the minimum memory that - //!will be used by the system when mapping a memory mappable source. + //!will be used by the system when mapping a memory mappable source and + //!will restrict the address and the offset to map. static std::size_t get_page_size(); /// @cond @@ -140,6 +149,13 @@ class mapped_region //!Closes a previously opened memory mapping. Never throws void priv_close(); + void* priv_map_address() const; + std::size_t priv_map_size() const; + bool priv_flush_param_check(std::size_t mapping_offset, void *&addr, std::size_t &numbytes) const; + static void priv_size_from_mapping_size + (offset_t mapping_size, offset_t offset, offset_t page_offset, std::size_t &size); + static offset_t priv_page_offset_addr_fixup(offset_t page_offset, const void *&addr); + template struct page_size_holder { @@ -149,18 +165,21 @@ class mapped_region void* m_base; std::size_t m_size; - offset_t m_offset; - offset_t m_extra_offset; + std::size_t m_page_offset; mode_t m_mode; - #if (defined BOOST_INTERPROCESS_WINDOWS) - file_handle_t m_file_mapping_hnd; + #if defined(BOOST_INTERPROCESS_WINDOWS) + file_handle_t m_file_or_mapping_hnd; #else bool m_is_xsi; #endif - friend class detail::interprocess_tester; - friend class detail::raw_mapped_region_creator; + friend class ipcdetail::interprocess_tester; + friend class ipcdetail::raw_mapped_region_creator; void dont_close_on_destruction(); + #if defined(BOOST_INTERPROCESS_WINDOWS) && !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) + template + static void destroy_syncs_in_range(const void *addr, std::size_t size); + #endif /// @endcond }; @@ -169,26 +188,80 @@ class mapped_region inline void swap(mapped_region &x, mapped_region &y) { x.swap(y); } -inline mapped_region::~mapped_region() +inline mapped_region::~mapped_region() { this->priv_close(); } -inline std::size_t mapped_region::get_size() const +inline std::size_t mapped_region::get_size() const { return m_size; } -inline offset_t mapped_region::get_offset() const -{ return m_offset; } - -inline mode_t mapped_region::get_mode() const +inline mode_t mapped_region::get_mode() const { return m_mode; } -inline void* mapped_region::get_address() const +inline void* mapped_region::get_address() const { return m_base; } +inline void* mapped_region::priv_map_address() const +{ return static_cast(m_base) - m_page_offset; } + +inline std::size_t mapped_region::priv_map_size() const +{ return m_size + m_page_offset; } + +inline bool mapped_region::priv_flush_param_check + (std::size_t mapping_offset, void *&addr, std::size_t &numbytes) const +{ + //Check some errors + if(m_base == 0) + return false; + + if(mapping_offset >= m_size || (mapping_offset + numbytes) > m_size){ + return false; + } + + //Update flush size if the user does not provide it + if(numbytes == 0){ + numbytes = m_size - mapping_offset; + } + addr = (char*)this->priv_map_address() + mapping_offset; + numbytes += m_page_offset; + return true; +} + +inline void mapped_region::priv_size_from_mapping_size + (offset_t mapping_size, offset_t offset, offset_t page_offset, std::size_t &size) +{ + //Check if mapping size fits in the user address space + //as offset_t is the maximum file size and its signed. + if(mapping_size < offset || + boost::uintmax_t(mapping_size - (offset - page_offset)) > + boost::uintmax_t(std::size_t(-1))){ + error_info err(size_error); + throw interprocess_exception(err); + } + size = static_cast(mapping_size - (offset - page_offset)); +} + +inline offset_t mapped_region::priv_page_offset_addr_fixup(offset_t offset, const void *&address) +{ + //We can't map any offset so we have to obtain system's + //memory granularity + const std::size_t page_size = mapped_region::get_page_size(); + + //We calculate the difference between demanded and valid offset + //(always less than a page in std::size_t, thus, representable by std::size_t) + const std::size_t page_offset = + static_cast(offset - (offset / page_size) * page_size); + //Update the mapping address + if(address){ + address = static_cast(address) - page_offset; + } + return page_offset; +} + #if defined (BOOST_INTERPROCESS_WINDOWS) inline mapped_region::mapped_region() - : m_base(0), m_size(0), m_offset(0), m_extra_offset(0), m_mode(read_only) - , m_file_mapping_hnd(detail::invalid_file()) + : m_base(0), m_size(0), m_page_offset(0), m_mode(read_only) + , m_file_or_mapping_hnd(ipcdetail::invalid_file()) {} template @@ -206,169 +279,146 @@ inline mapped_region::mapped_region ,offset_t offset ,std::size_t size ,const void *address) - : m_base(0), m_size(0), m_offset(0), m_extra_offset(0), m_mode(mode) - , m_file_mapping_hnd(detail::invalid_file()) + : m_base(0), m_size(0), m_page_offset(0), m_mode(mode) + , m_file_or_mapping_hnd(ipcdetail::invalid_file()) { mapping_handle_t mhandle = mapping.get_mapping_handle(); - file_handle_t native_mapping_handle = 0; - - //Set accesses - unsigned long file_map_access = 0; - unsigned long map_access = 0; - - switch(mode) { - case read_only: - case read_private: - file_map_access |= winapi::page_readonly; - map_access |= winapi::file_map_read; - break; - case read_write: - file_map_access |= winapi::page_readwrite; - map_access |= winapi::file_map_write; - break; - case copy_on_write: - file_map_access |= winapi::page_writecopy; - map_access |= winapi::file_map_copy; - break; - default: - { - error_info err(mode_error); + file_handle_t native_mapping_handle = 0; + + //Set accesses + //For "create_file_mapping" + unsigned long protection = 0; + //For "mapviewoffile" + unsigned long map_access = 0; + + switch(mode) + { + case read_only: + case read_private: + protection |= winapi::page_readonly; + map_access |= winapi::file_map_read; + break; + case read_write: + protection |= winapi::page_readwrite; + map_access |= winapi::file_map_write; + break; + case copy_on_write: + protection |= winapi::page_writecopy; + map_access |= winapi::file_map_copy; + break; + default: + { + error_info err(mode_error); + throw interprocess_exception(err); + } + break; + } + + //For file mapping (including emulated shared memory through temporary files), + //the device is a file handle so we need to obtain file's size and call create_file_mapping + //to obtain the mapping handle. + //For files we don't need the file mapping after mapping the memory, as the file is there + //so we'll program the handle close + void * handle_to_close = winapi::invalid_handle_value; + if(!mhandle.is_shm){ + //Create mapping handle + native_mapping_handle = winapi::create_file_mapping + ( ipcdetail::file_handle_from_mapping_handle(mapping.get_mapping_handle()) + , protection, 0, 0, 0); + + //Check if all is correct + if(!native_mapping_handle){ + error_info err = winapi::get_last_error(); throw interprocess_exception(err); } - break; - } + handle_to_close = native_mapping_handle; + } + else{ + //For windows_shared_memory the device handle is already a mapping handle + //and we need to maintain it + native_mapping_handle = mhandle.handle; + } + //RAII handle close on scope exit + const winapi::handle_closer close_handle(handle_to_close); + (void)close_handle; - if(!mhandle.is_shm){ - //Update mapping size if the user does not specify it + const offset_t page_offset = priv_page_offset_addr_fixup(offset, address); + + //Obtain mapping size if user provides 0 size if(size == 0){ - __int64 total_size; - if(!winapi::get_file_size - (detail::file_handle_from_mapping_handle - (mapping.get_mapping_handle()), total_size)){ - error_info err(winapi::get_last_error()); + offset_t mapping_size; + if(!winapi::get_file_mapping_size(native_mapping_handle, mapping_size)){ + error_info err = winapi::get_last_error(); throw interprocess_exception(err); } - - if(static_cast(total_size) > - (std::numeric_limits::max)()){ - error_info err(size_error); - throw interprocess_exception(err); - } - size = static_cast(total_size - offset); + //This can throw + priv_size_from_mapping_size(mapping_size, offset, page_offset, size); } - //Create file mapping - native_mapping_handle = - winapi::create_file_mapping - (detail::file_handle_from_mapping_handle(mapping.get_mapping_handle()), file_map_access, 0, 0, 0, 0); - //Check if all is correct - if(!native_mapping_handle){ + //Map with new offsets and size + void *base = winapi::map_view_of_file_ex + (native_mapping_handle, + map_access, + offset - page_offset, + static_cast(page_offset + size), + const_cast(address)); + //Check error + if(!base){ error_info err = winapi::get_last_error(); - this->priv_close(); throw interprocess_exception(err); } + + //Calculate new base for the user + m_base = static_cast(base) + page_offset; + m_page_offset = page_offset; + m_size = size; } - - //We can't map any offset so we have to obtain system's - //memory granularity - unsigned long granularity = 0; - unsigned long foffset_low; - unsigned long foffset_high; - - winapi::system_info info; - get_system_info(&info); - granularity = info.dwAllocationGranularity; - - //Now we calculate valid offsets - foffset_low = (unsigned long)(offset / granularity) * granularity; - foffset_high = (unsigned long)(((offset / granularity) * granularity) >> 32); - - //We calculate the difference between demanded and valid offset - m_extra_offset = (offset - (offset / granularity) * granularity); - - //Store user values in memory - m_offset = offset; - m_size = size; - - //Update the mapping address - if(address){ - address = static_cast(address) - m_extra_offset; - } - - if(mhandle.is_shm){ - //Windows shared memory needs the duplication of the handle if we want to - //make mapped_region independent from the mappable device - if(!winapi::duplicate_current_process_handle(mhandle.handle, &m_file_mapping_hnd)){ - error_info err = winapi::get_last_error(); - this->priv_close(); - throw interprocess_exception(err); - } - native_mapping_handle = m_file_mapping_hnd; - } - - //Map with new offsets and size - m_base = winapi::map_view_of_file_ex - (native_mapping_handle, - map_access, - foffset_high, - foffset_low, - m_size ? static_cast(m_extra_offset + m_size) : 0, - const_cast(address)); - - if(!mhandle.is_shm){ - //For files we don't need the file mapping anymore - winapi::close_handle(native_mapping_handle); - } - - //Check error - if(!m_base){ + //Windows shared memory needs the duplication of the handle if we want to + //make mapped_region independent from the mappable device + // + //For mapped files, we duplicate the file handle to be able to FlushFileBuffers + if(!winapi::duplicate_current_process_handle(mhandle.handle, &m_file_or_mapping_hnd)){ error_info err = winapi::get_last_error(); this->priv_close(); throw interprocess_exception(err); } - - //Calculate new base for the user - m_base = static_cast(m_base) + m_extra_offset; } -inline bool mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes) +inline bool mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes, bool async) { - //Check some errors - if(m_base == 0) - return false; - - if(mapping_offset >= m_size || (mapping_offset + numbytes) > m_size){ + void *addr; + if(!this->priv_flush_param_check(mapping_offset, addr, numbytes)){ return false; } - - //Update flush size if the user does not provide it - if(m_size == 0){ - numbytes = 0; - } - else if(numbytes == 0){ - numbytes = m_size - mapping_offset; - } - //Flush it all - return winapi::flush_view_of_file - (static_cast(m_base)+mapping_offset, - static_cast(numbytes)); + if(!winapi::flush_view_of_file(addr, numbytes)){ + return false; + } + //m_file_or_mapping_hnd can be a file handle or a mapping handle. + //so flushing file buffers has only sense for files... + else if(async && m_file_or_mapping_hnd != winapi::invalid_handle_value && + winapi::get_file_type(m_file_or_mapping_hnd) == winapi::file_type_disk){ + return winapi::flush_file_buffers(m_file_or_mapping_hnd); + } + return true; } inline void mapped_region::priv_close() { if(m_base){ - winapi::unmap_view_of_file(static_cast(m_base) - m_extra_offset); + void *addr = this->priv_map_address(); + #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) + mapped_region::destroy_syncs_in_range<0>(addr, m_size); + #endif + winapi::unmap_view_of_file(addr); m_base = 0; } - #if (defined BOOST_INTERPROCESS_WINDOWS) - if(m_file_mapping_hnd != detail::invalid_file()){ - winapi::close_handle(m_file_mapping_hnd); - m_file_mapping_hnd = detail::invalid_file(); - } - #endif + if(m_file_or_mapping_hnd != ipcdetail::invalid_file()){ + winapi::close_handle(m_file_or_mapping_hnd); + m_file_or_mapping_hnd = ipcdetail::invalid_file(); + } } inline void mapped_region::dont_close_on_destruction() @@ -377,7 +427,7 @@ inline void mapped_region::dont_close_on_destruction() #else //#if (defined BOOST_INTERPROCESS_WINDOWS) inline mapped_region::mapped_region() - : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0), m_mode(read_only), m_is_xsi(false) + : m_base(0), m_size(0), m_page_offset(0), m_mode(read_only), m_is_xsi(false) {} template @@ -386,12 +436,12 @@ inline std::size_t mapped_region::page_size_holder::get_page_size() template inline mapped_region::mapped_region - (const MemoryMappable &mapping, - mode_t mode, - offset_t offset, - std::size_t size, - const void *address) - : m_base(MAP_FAILED), m_size(0), m_offset(0), m_extra_offset(0), m_mode(mode), m_is_xsi(false) + ( const MemoryMappable &mapping + , mode_t mode + , offset_t offset + , std::size_t size + , const void *address) + : m_base(0), m_size(0), m_page_offset(0), m_mode(mode), m_is_xsi(false) { mapping_handle_t map_hnd = mapping.get_mapping_handle(); @@ -430,28 +480,25 @@ inline mapped_region::mapped_region } //Update members m_base = base; - m_offset = offset; m_size = size; m_mode = mode; - m_extra_offset = 0; + m_page_offset = 0; m_is_xsi = true; return; } #endif //ifdef BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS + + //We calculate the difference between demanded and valid offset + const offset_t page_offset = priv_page_offset_addr_fixup(offset, address); + if(size == 0){ struct ::stat buf; if(0 != fstat(map_hnd.handle, &buf)){ error_info err(system_error_code()); throw interprocess_exception(err); } - std::size_t filesize = (std::size_t)buf.st_size; - if((std::size_t)offset >= filesize){ - error_info err(size_error); - throw interprocess_exception(err); - } - - filesize -= offset; - size = filesize; + //This can throw + priv_size_from_mapping_size(buf.st_size, offset, page_offset, size); } //Create new mapping @@ -488,65 +535,46 @@ inline mapped_region::mapped_region break; } - //We calculate the difference between demanded and valid offset - std::size_t page_size = this->get_page_size(); - m_extra_offset = (offset - (offset / page_size) * page_size); - - //Store user values in memory - m_offset = offset; - m_size = size; - - //Update the mapping address - if(address){ - address = static_cast(address) - m_extra_offset; - } - //Map it to the address space - m_base = mmap ( const_cast(address) - , static_cast(m_extra_offset + m_size) - , prot - , flags - , mapping.get_mapping_handle().handle - , offset - m_extra_offset); + void* base = mmap ( const_cast(address) + , static_cast(page_offset + size) + , prot + , flags + , mapping.get_mapping_handle().handle + , offset - page_offset); //Check if mapping was successful - if(m_base == MAP_FAILED){ + if(base == MAP_FAILED){ error_info err = system_error_code(); - this->priv_close(); throw interprocess_exception(err); } //Calculate new base for the user - const void *old_base = m_base; - m_base = static_cast(m_base) + m_extra_offset; - m_offset = offset; + m_base = static_cast(base) + page_offset; + m_page_offset = page_offset; m_size = size; //Check for fixed mapping error - if(address && (old_base != address)){ - error_info err = system_error_code(); + if(address && (base != address)){ + error_info err(busy_error); this->priv_close(); throw interprocess_exception(err); } } -inline bool mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes) +inline bool mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes, bool async) { - if(mapping_offset >= m_size || (mapping_offset+numbytes)> m_size){ + void *addr; + if(!this->priv_flush_param_check(mapping_offset, addr, numbytes)){ return false; } - - if(numbytes == 0){ - numbytes = m_size - mapping_offset; - } //Flush it all - return msync(static_cast(m_base)+mapping_offset, - numbytes, MS_ASYNC) == 0; + return msync( addr, numbytes, async ? MS_ASYNC : MS_SYNC) == 0; } inline void mapped_region::priv_close() { - if(m_base != MAP_FAILED){ + if(m_base != 0){ #ifdef BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS if(m_is_xsi){ int ret = ::shmdt(m_base); @@ -555,13 +583,13 @@ inline void mapped_region::priv_close() return; } #endif //#ifdef BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS - munmap(static_cast(m_base) - m_extra_offset, m_size + m_extra_offset); - m_base = MAP_FAILED; + munmap(this->priv_map_address(), this->priv_map_size()); + m_base = 0; } } inline void mapped_region::dont_close_on_destruction() -{ m_base = MAP_FAILED; } +{ m_base = 0; } #endif //##if (defined BOOST_INTERPROCESS_WINDOWS) @@ -579,15 +607,14 @@ inline std::size_t mapped_region::get_page_size() inline void mapped_region::swap(mapped_region &other) { - detail::do_swap(this->m_base, other.m_base); - detail::do_swap(this->m_size, other.m_size); - detail::do_swap(this->m_offset, other.m_offset); - detail::do_swap(this->m_extra_offset, other.m_extra_offset); - detail::do_swap(this->m_mode, other.m_mode); + ipcdetail::do_swap(this->m_base, other.m_base); + ipcdetail::do_swap(this->m_size, other.m_size); + ipcdetail::do_swap(this->m_page_offset, other.m_page_offset); + ipcdetail::do_swap(this->m_mode, other.m_mode); #if (defined BOOST_INTERPROCESS_WINDOWS) - detail::do_swap(this->m_file_mapping_hnd, other.m_file_mapping_hnd); + ipcdetail::do_swap(this->m_file_or_mapping_hnd, other.m_file_or_mapping_hnd); #else - detail::do_swap(this->m_is_xsi, other.m_is_xsi); + ipcdetail::do_swap(this->m_is_xsi, other.m_is_xsi); #endif } @@ -607,3 +634,32 @@ struct null_mapped_region_function #endif //BOOST_INTERPROCESS_MAPPED_REGION_HPP +#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + +#ifndef BOOST_INTERPROCESS_MAPPED_REGION_EXT_HPP +#define BOOST_INTERPROCESS_MAPPED_REGION_EXT_HPP + +#if defined(BOOST_INTERPROCESS_WINDOWS) && !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) +# include +# include + +namespace boost { +namespace interprocess { + +template +inline void mapped_region::destroy_syncs_in_range(const void *addr, std::size_t size) +{ + ipcdetail::sync_handles &handles = + ipcdetail::windows_intermodule_singleton::get(); + handles.destroy_syncs_in_range(addr, size); +} + +} //namespace interprocess { +} //namespace boost { + +#endif //defined(BOOST_INTERPROCESS_WINDOWS) && !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) + +#endif //#ifdef BOOST_INTERPROCESS_MAPPED_REGION_EXT_HPP + +#endif //#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + diff --git a/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp b/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp index beaaf521b5..91d798145b 100644 --- a/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp +++ b/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include @@ -38,7 +38,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { //!This class implements several allocation functions shared by different algorithms //!(aligned allocation, multiple allocation...). @@ -50,19 +50,20 @@ class memory_algorithm_common typedef typename MemoryAlgorithm::block_ctrl block_ctrl; typedef typename MemoryAlgorithm::multiallocation_chain multiallocation_chain; typedef memory_algorithm_common this_type; + typedef typename MemoryAlgorithm::size_type size_type; - static const std::size_t Alignment = MemoryAlgorithm::Alignment; - static const std::size_t MinBlockUnits = MemoryAlgorithm::MinBlockUnits; - static const std::size_t AllocatedCtrlBytes = MemoryAlgorithm::AllocatedCtrlBytes; - static const std::size_t AllocatedCtrlUnits = MemoryAlgorithm::AllocatedCtrlUnits; - static const std::size_t BlockCtrlBytes = MemoryAlgorithm::BlockCtrlBytes; - static const std::size_t BlockCtrlUnits = MemoryAlgorithm::BlockCtrlUnits; - static const std::size_t UsableByPreviousChunk = MemoryAlgorithm::UsableByPreviousChunk; + static const size_type Alignment = MemoryAlgorithm::Alignment; + static const size_type MinBlockUnits = MemoryAlgorithm::MinBlockUnits; + static const size_type AllocatedCtrlBytes = MemoryAlgorithm::AllocatedCtrlBytes; + static const size_type AllocatedCtrlUnits = MemoryAlgorithm::AllocatedCtrlUnits; + static const size_type BlockCtrlBytes = MemoryAlgorithm::BlockCtrlBytes; + static const size_type BlockCtrlUnits = MemoryAlgorithm::BlockCtrlUnits; + static const size_type UsableByPreviousChunk = MemoryAlgorithm::UsableByPreviousChunk; static void assert_alignment(const void *ptr) { assert_alignment((std::size_t)ptr); } - static void assert_alignment(std::size_t uint_ptr) + static void assert_alignment(size_type uint_ptr) { (void)uint_ptr; BOOST_ASSERT(uint_ptr % Alignment == 0); @@ -71,40 +72,40 @@ class memory_algorithm_common static bool check_alignment(const void *ptr) { return (((std::size_t)ptr) % Alignment == 0); } - static std::size_t ceil_units(std::size_t size) - { return detail::get_rounded_size(size, Alignment)/Alignment; } + static size_type ceil_units(size_type size) + { return get_rounded_size(size, Alignment)/Alignment; } - static std::size_t floor_units(std::size_t size) + static size_type floor_units(size_type size) { return size/Alignment; } - static std::size_t multiple_of_units(std::size_t size) - { return detail::get_rounded_size(size, Alignment); } + static size_type multiple_of_units(size_type size) + { return get_rounded_size(size, Alignment); } static multiallocation_chain allocate_many - (MemoryAlgorithm *memory_algo, std::size_t elem_bytes, std::size_t n_elements) + (MemoryAlgorithm *memory_algo, size_type elem_bytes, size_type n_elements) { return this_type::priv_allocate_many(memory_algo, &elem_bytes, n_elements, 0); } static void deallocate_many(MemoryAlgorithm *memory_algo, multiallocation_chain chain) { - return this_type::priv_deallocate_many(memory_algo, boost::interprocess::move(chain)); + return this_type::priv_deallocate_many(memory_algo, boost::move(chain)); } static bool calculate_lcm_and_needs_backwards_lcmed - (std::size_t backwards_multiple, std::size_t received_size, std::size_t size_to_achieve, - std::size_t &lcm_out, std::size_t &needs_backwards_lcmed_out) + (size_type backwards_multiple, size_type received_size, size_type size_to_achieve, + size_type &lcm_out, size_type &needs_backwards_lcmed_out) { - // Now calculate lcm - std::size_t max = backwards_multiple; - std::size_t min = Alignment; - std::size_t needs_backwards; - std::size_t needs_backwards_lcmed; - std::size_t lcm; - std::size_t current_forward; + // Now calculate lcm_val + size_type max = backwards_multiple; + size_type min = Alignment; + size_type needs_backwards; + size_type needs_backwards_lcmed; + size_type lcm_val; + size_type current_forward; //Swap if necessary if(max < min){ - std::size_t tmp = min; + size_type tmp = min; min = max; max = tmp; } @@ -114,47 +115,47 @@ class memory_algorithm_common return false; } - lcm = max; + lcm_val = max; //If we want to use minbytes data to get a buffer between maxbytes - //and minbytes if maxbytes can't be achieved, calculate the + //and minbytes if maxbytes can't be achieved, calculate the //biggest of all possibilities - current_forward = detail::get_truncated_size_po2(received_size, backwards_multiple); + current_forward = get_truncated_size_po2(received_size, backwards_multiple); needs_backwards = size_to_achieve - current_forward; BOOST_ASSERT((needs_backwards % backwards_multiple) == 0); - needs_backwards_lcmed = detail::get_rounded_size_po2(needs_backwards, lcm); - lcm_out = lcm; + needs_backwards_lcmed = get_rounded_size_po2(needs_backwards, lcm_val); + lcm_out = lcm_val; needs_backwards_lcmed_out = needs_backwards_lcmed; return true; } //Check if it's multiple of alignment else if((backwards_multiple & (Alignment - 1u)) == 0){ - lcm = backwards_multiple; - current_forward = detail::get_truncated_size(received_size, backwards_multiple); - //No need to round needs_backwards because backwards_multiple == lcm + lcm_val = backwards_multiple; + current_forward = get_truncated_size(received_size, backwards_multiple); + //No need to round needs_backwards because backwards_multiple == lcm_val needs_backwards_lcmed = needs_backwards = size_to_achieve - current_forward; BOOST_ASSERT((needs_backwards_lcmed & (Alignment - 1u)) == 0); - lcm_out = lcm; + lcm_out = lcm_val; needs_backwards_lcmed_out = needs_backwards_lcmed; return true; } //Check if it's multiple of the half of the alignmment else if((backwards_multiple & ((Alignment/2u) - 1u)) == 0){ - lcm = backwards_multiple*2u; - current_forward = detail::get_truncated_size(received_size, backwards_multiple); + lcm_val = backwards_multiple*2u; + current_forward = get_truncated_size(received_size, backwards_multiple); needs_backwards_lcmed = needs_backwards = size_to_achieve - current_forward; if(0 != (needs_backwards_lcmed & (Alignment-1))) //while(0 != (needs_backwards_lcmed & (Alignment-1))) needs_backwards_lcmed += backwards_multiple; - BOOST_ASSERT((needs_backwards_lcmed % lcm) == 0); - lcm_out = lcm; + BOOST_ASSERT((needs_backwards_lcmed % lcm_val) == 0); + lcm_out = lcm_val; needs_backwards_lcmed_out = needs_backwards_lcmed; return true; } - //Check if it's multiple of the half of the alignmment + //Check if it's multiple of the quarter of the alignmment else if((backwards_multiple & ((Alignment/4u) - 1u)) == 0){ - std::size_t remainder; - lcm = backwards_multiple*4u; - current_forward = detail::get_truncated_size(received_size, backwards_multiple); + size_type remainder; + lcm_val = backwards_multiple*4u; + current_forward = get_truncated_size(received_size, backwards_multiple); needs_backwards_lcmed = needs_backwards = size_to_achieve - current_forward; //while(0 != (needs_backwards_lcmed & (Alignment-1))) //needs_backwards_lcmed += backwards_multiple; @@ -166,47 +167,47 @@ class memory_algorithm_common needs_backwards_lcmed += (4-remainder)*backwards_multiple; } } - BOOST_ASSERT((needs_backwards_lcmed % lcm) == 0); - lcm_out = lcm; + BOOST_ASSERT((needs_backwards_lcmed % lcm_val) == 0); + lcm_out = lcm_val; needs_backwards_lcmed_out = needs_backwards_lcmed; return true; } else{ - lcm = detail::lcm(max, min); + lcm_val = lcm(max, min); } //If we want to use minbytes data to get a buffer between maxbytes - //and minbytes if maxbytes can't be achieved, calculate the + //and minbytes if maxbytes can't be achieved, calculate the //biggest of all possibilities - current_forward = detail::get_truncated_size(received_size, backwards_multiple); + current_forward = get_truncated_size(received_size, backwards_multiple); needs_backwards = size_to_achieve - current_forward; BOOST_ASSERT((needs_backwards % backwards_multiple) == 0); - needs_backwards_lcmed = detail::get_rounded_size(needs_backwards, lcm); - lcm_out = lcm; + needs_backwards_lcmed = get_rounded_size(needs_backwards, lcm_val); + lcm_out = lcm_val; needs_backwards_lcmed_out = needs_backwards_lcmed; return true; } static multiallocation_chain allocate_many ( MemoryAlgorithm *memory_algo - , const std::size_t *elem_sizes - , std::size_t n_elements - , std::size_t sizeof_element) + , const size_type *elem_sizes + , size_type n_elements + , size_type sizeof_element) { return this_type::priv_allocate_many(memory_algo, elem_sizes, n_elements, sizeof_element); } static void* allocate_aligned - (MemoryAlgorithm *memory_algo, std::size_t nbytes, std::size_t alignment) + (MemoryAlgorithm *memory_algo, size_type nbytes, size_type alignment) { - + //Ensure power of 2 - if ((alignment & (alignment - std::size_t(1u))) != 0){ + if ((alignment & (alignment - size_type(1u))) != 0){ //Alignment is not power of two - BOOST_ASSERT((alignment & (alignment - std::size_t(1u))) == 0); + BOOST_ASSERT((alignment & (alignment - size_type(1u))) == 0); return 0; } - std::size_t real_size; + size_type real_size; if(alignment <= Alignment){ return memory_algo->priv_allocate (boost::interprocess::allocate_new, nbytes, nbytes, real_size).first; @@ -214,21 +215,21 @@ class memory_algorithm_common if(nbytes > UsableByPreviousChunk) nbytes -= UsableByPreviousChunk; - + //We can find a aligned portion if we allocate a block that has alignment //nbytes + alignment bytes or more. - std::size_t minimum_allocation = max_value - (nbytes + alignment, std::size_t(MinBlockUnits*Alignment)); + size_type minimum_allocation = max_value + (nbytes + alignment, size_type(MinBlockUnits*Alignment)); //Since we will split that block, we must request a bit more memory //if the alignment is near the beginning of the buffer, because otherwise, //there is no space for a new block before the alignment. - // + // // ____ Aligned here // | // ----------------------------------------------------- - // | MBU | + // | MBU | // ----------------------------------------------------- - std::size_t request = + size_type request = minimum_allocation + (2*MinBlockUnits*Alignment - AllocatedCtrlBytes //prevsize - UsableByPreviousChunk ); @@ -243,9 +244,9 @@ class memory_algorithm_common //If we are lucky and the buffer is aligned, just split it and //return the high part block_ctrl *first = memory_algo->priv_get_block(buffer); - std::size_t old_size = first->m_size; - const std::size_t first_min_units = - max_value(ceil_units(nbytes) + AllocatedCtrlUnits, std::size_t(MinBlockUnits)); + size_type old_size = first->m_size; + const size_type first_min_units = + max_value(ceil_units(nbytes) + AllocatedCtrlUnits, size_type(MinBlockUnits)); //We can create a new block in the end of the segment if(old_size >= (first_min_units + MinBlockUnits)){ block_ctrl *second = reinterpret_cast @@ -262,7 +263,7 @@ class memory_algorithm_common } //Buffer not aligned, find the aligned part. - // + // // ____ Aligned here // | // ----------------------------------------------------- @@ -285,8 +286,8 @@ class memory_algorithm_common BOOST_ASSERT((pos + MinBlockUnits*Alignment - AllocatedCtrlBytes + nbytes*Alignment/Alignment) <= (reinterpret_cast(first) + first->m_size*Alignment)); //Set the new size of the first block - std::size_t old_size = first->m_size; - first->m_size = (reinterpret_cast(second) - reinterpret_cast(first))/Alignment; + size_type old_size = first->m_size; + first->m_size = (size_type)(reinterpret_cast(second) - reinterpret_cast(first))/Alignment; memory_algo->priv_mark_new_allocated_block(first); //Now check if we can create a new buffer in the end @@ -299,7 +300,7 @@ class memory_algorithm_common // ----------------------------------------------------- //This size will be the minimum size to be able to create a //new block in the end. - const std::size_t second_min_units = max_value(std::size_t(MinBlockUnits), + const size_type second_min_units = max_value(size_type(MinBlockUnits), ceil_units(nbytes) + AllocatedCtrlUnits ); //Check if we can create a new block (of size MinBlockUnits) in the end of the segment @@ -323,15 +324,15 @@ class memory_algorithm_common return memory_algo->priv_get_user_buffer(second); } - static bool try_shrink + static bool try_shrink (MemoryAlgorithm *memory_algo, void *ptr - ,const std::size_t max_size, const std::size_t preferred_size - ,std::size_t &received_size) + ,const size_type max_size, const size_type preferred_size + ,size_type &received_size) { (void)memory_algo; //Obtain the real block block_ctrl *block = memory_algo->priv_get_block(ptr); - std::size_t old_block_units = block->m_size; + size_type old_block_units = (size_type)block->m_size; //The block must be marked as allocated BOOST_ASSERT(memory_algo->priv_is_allocated_block(block)); @@ -343,15 +344,15 @@ class memory_algorithm_common received_size = (old_block_units - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; //Now translate it to Alignment units - const std::size_t max_user_units = floor_units(max_size - UsableByPreviousChunk); - const std::size_t preferred_user_units = ceil_units(preferred_size - UsableByPreviousChunk); + const size_type max_user_units = floor_units(max_size - UsableByPreviousChunk); + const size_type preferred_user_units = ceil_units(preferred_size - UsableByPreviousChunk); //Check if rounded max and preferred are possible correct if(max_user_units < preferred_user_units) return false; //Check if the block is smaller than the requested minimum - std::size_t old_user_units = old_block_units - AllocatedCtrlUnits; + size_type old_user_units = old_block_units - AllocatedCtrlUnits; if(old_user_units < preferred_user_units) return false; @@ -360,8 +361,8 @@ class memory_algorithm_common if(old_user_units == preferred_user_units) return true; - std::size_t shrunk_user_units = - ((BlockCtrlUnits - AllocatedCtrlUnits) > preferred_user_units) + size_type shrunk_user_units = + ((BlockCtrlUnits - AllocatedCtrlUnits) >= preferred_user_units) ? (BlockCtrlUnits - AllocatedCtrlUnits) : preferred_user_units; @@ -379,16 +380,16 @@ class memory_algorithm_common return true; } - static bool shrink + static bool shrink (MemoryAlgorithm *memory_algo, void *ptr - ,const std::size_t max_size, const std::size_t preferred_size - ,std::size_t &received_size) + ,const size_type max_size, const size_type preferred_size + ,size_type &received_size) { //Obtain the real block block_ctrl *block = memory_algo->priv_get_block(ptr); - std::size_t old_block_units = block->m_size; + size_type old_block_units = (size_type)block->m_size; - if(!try_shrink + if(!try_shrink (memory_algo, ptr, max_size, preferred_size, received_size)){ return false; } @@ -417,24 +418,24 @@ class memory_algorithm_common private: static multiallocation_chain priv_allocate_many ( MemoryAlgorithm *memory_algo - , const std::size_t *elem_sizes - , std::size_t n_elements - , std::size_t sizeof_element) + , const size_type *elem_sizes + , size_type n_elements + , size_type sizeof_element) { //Note: sizeof_element == 0 indicates that we want to //allocate n_elements of the same size "*elem_sizes" //Calculate the total size of all requests - std::size_t total_request_units = 0; - std::size_t elem_units = 0; - const std::size_t ptr_size_units = memory_algo->priv_get_total_units(sizeof(void_pointer)); + size_type total_request_units = 0; + size_type elem_units = 0; + const size_type ptr_size_units = memory_algo->priv_get_total_units(sizeof(void_pointer)); if(!sizeof_element){ elem_units = memory_algo->priv_get_total_units(*elem_sizes); elem_units = ptr_size_units > elem_units ? ptr_size_units : elem_units; total_request_units = n_elements*elem_units; } else{ - for(std::size_t i = 0; i < n_elements; ++i){ + for(size_type i = 0; i < n_elements; ++i){ elem_units = memory_algo->priv_get_total_units(elem_sizes[i]*sizeof_element); elem_units = ptr_size_units > elem_units ? ptr_size_units : elem_units; total_request_units += elem_units; @@ -443,15 +444,15 @@ class memory_algorithm_common multiallocation_chain chain; - std::size_t low_idx = 0; + size_type low_idx = 0; while(low_idx < n_elements){ - std::size_t total_bytes = total_request_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; - std::size_t min_allocation = (!sizeof_element) + size_type total_bytes = total_request_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; + size_type min_allocation = (!sizeof_element) ? elem_units : memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element); min_allocation = min_allocation*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; - std::size_t received_size; + size_type received_size; std::pair ret = memory_algo->priv_allocate (boost::interprocess::allocate_new, min_allocation, total_bytes, received_size, 0); if(!ret.first){ @@ -459,10 +460,10 @@ class memory_algorithm_common } block_ctrl *block = memory_algo->priv_get_block(ret.first); - std::size_t received_units = block->m_size; + size_type received_units = (size_type)block->m_size; char *block_address = reinterpret_cast(block); - std::size_t total_used_units = 0; + size_type total_used_units = 0; // block_ctrl *prev_block = 0; while(total_used_units < received_units){ if(sizeof_element){ @@ -478,10 +479,10 @@ class memory_algorithm_common //The last block should take all the remaining space if((low_idx + 1) == n_elements || - (total_used_units + elem_units + + (total_used_units + elem_units + ((!sizeof_element) ? elem_units - : memory_algo->priv_get_total_units(elem_sizes[low_idx+1]*sizeof_element)) + : std::max(memory_algo->priv_get_total_units(elem_sizes[low_idx+1]*sizeof_element), ptr_size_units)) ) > received_units){ //By default, the new block will use the rest of the buffer new_block->m_size = received_units - total_used_units; @@ -490,8 +491,8 @@ class memory_algorithm_common //If the remaining units are bigger than needed and we can //split it obtaining a new free memory block do it. if((received_units - total_used_units) >= (elem_units + MemoryAlgorithm::BlockCtrlUnits)){ - std::size_t shrunk_received; - std::size_t shrunk_request = elem_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; + size_type shrunk_received; + size_type shrunk_request = elem_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; bool shrink_ok = shrink (memory_algo ,memory_algo->priv_get_user_buffer(new_block) @@ -516,7 +517,7 @@ class memory_algorithm_common } block_address += new_block->m_size*Alignment; - total_used_units += new_block->m_size; + total_used_units += (size_type)new_block->m_size; //Check we have enough room to overwrite the intrusive pointer BOOST_ASSERT((new_block->m_size*Alignment - AllocatedCtrlUnits) >= sizeof(void_pointer)); void_pointer p = new(memory_algo->priv_get_user_buffer(new_block))void_pointer(0); @@ -527,24 +528,24 @@ class memory_algorithm_common //Sanity check BOOST_ASSERT(total_used_units == received_units); } - + if(low_idx != n_elements){ - priv_deallocate_many(memory_algo, boost::interprocess::move(chain)); + priv_deallocate_many(memory_algo, boost::move(chain)); } - return boost::interprocess::move(chain); + return boost::move(chain); } static void priv_deallocate_many(MemoryAlgorithm *memory_algo, multiallocation_chain chain) { while(!chain.empty()){ - void *addr = detail::get_pointer(chain.front()); + void *addr = to_raw_pointer(chain.front()); chain.pop_front(); memory_algo->priv_deallocate(addr); } } }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp index 4c541f1158..e8b678d9f3 100644 --- a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp +++ b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -34,20 +34,20 @@ namespace interprocess { linked list of free buffers.*/ template class multi_simple_seq_fit - : public detail::simple_seq_fit_impl + : public ipcdetail::simple_seq_fit_impl { - typedef detail::simple_seq_fit_impl base_t; + typedef ipcdetail::simple_seq_fit_impl base_t; public: /*!Constructor. "size" is the total size of the managed memory segment, "extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(multi_simple_seq_fit) offset that the allocator should not use at all.*/ - multi_simple_seq_fit (std::size_t size, std::size_t extra_hdr_bytes) + multi_simple_seq_fit (size_type size, size_type extra_hdr_bytes) : base_t(size, extra_hdr_bytes){} /*!Allocates bytes from existing segments. If there is no memory, it uses the growing functor associated with the group to allocate a new segment. If this fails, returns 0.*/ - void* allocate (std::size_t nbytes) + void* allocate (size_type nbytes) { return base_t::multi_allocate(nbytes); } }; diff --git a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp index a0afb2fe7b..7a2c7a83c1 100644 --- a/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp +++ b/3party/boost/boost/interprocess/mem_algo/detail/multi_simple_seq_fit_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -48,7 +49,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { /*!This class implements the simple sequential fit algorithm with a simply linked list of free buffers. @@ -68,10 +69,15 @@ class simple_seq_fit_impl /*!Pointer type to be used with the rest of the Interprocess framework*/ typedef VoidPointer void_pointer; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; + + private: struct block_ctrl; - typedef typename boost:: - pointer_to_other::type block_ctrl_ptr; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type block_ctrl_ptr; /*!Block control structure*/ struct block_ctrl @@ -80,12 +86,12 @@ class simple_seq_fit_impl block_ctrl_ptr m_next; /*!This block's memory size (including block_ctrl header) in BasicSize units*/ - std::size_t m_size; + size_type m_size; - std::size_t get_user_bytes() const + size_type get_user_bytes() const { return this->m_size*Alignment - BlockCtrlBytes; } - std::size_t get_total_bytes() const + size_type get_total_bytes() const { return this->m_size*Alignment; } static block_ctrl *get_block_from_addr(void *addr) @@ -112,34 +118,34 @@ class simple_seq_fit_impl /*!Pointer to the first free block*/ block_ctrl m_root; /*!Allocated bytes for internal checking*/ - std::size_t m_allocated; + size_type m_allocated; /*!The size of the memory segment*/ - std::size_t m_size; + size_type m_size; } m_header; public: /*!Constructor. "size" is the total size of the managed memory segment, "extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(simple_seq_fit_impl) offset that the allocator should not use at all.*/ - simple_seq_fit_impl (std::size_t size, std::size_t extra_hdr_bytes); + simple_seq_fit_impl (size_type size, size_type extra_hdr_bytes); /*!Destructor.*/ ~simple_seq_fit_impl(); /*!Obtains the minimum size needed by the algorithm*/ - static std::size_t get_min_size (std::size_t extra_hdr_bytes); + static size_type get_min_size (size_type extra_hdr_bytes); //Functions for single segment management /*!Allocates bytes, returns 0 if there is not more memory*/ - void* allocate (std::size_t nbytes); + void* allocate (size_type nbytes); /*!Deallocates previously allocated bytes*/ void deallocate (void *addr); /*!Returns the size of the memory segment*/ - std::size_t get_size() const; + size_type get_size() const; /*!Increases managed memory in extra_size bytes more*/ - void grow(std::size_t extra_size); + void grow(size_type extra_size); /*!Returns true if all allocated memory has been deallocated*/ bool all_memory_deallocated(); @@ -152,30 +158,30 @@ class simple_seq_fit_impl void clear_free_memory(); std::pair - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, - void *reuse_ptr = 0, std::size_t backwards_multiple = 1); + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, + void *reuse_ptr = 0, size_type backwards_multiple = 1); /*!Returns the size of the buffer previously allocated pointed by ptr*/ - std::size_t size(void *ptr) const; + size_type size(void *ptr) const; /*!Allocates aligned bytes, returns 0 if there is not more memory. Alignment must be power of 2*/ - void* allocate_aligned (std::size_t nbytes, std::size_t alignment); + void* allocate_aligned (size_type nbytes, size_type alignment); /*!Allocates bytes, if there is no more memory, it executes functor - f(std::size_t) to allocate a new segment to manage. The functor returns - std::pair indicating the base address and size of + f(size_type) to allocate a new segment to manage. The functor returns + std::pair indicating the base address and size of the new segment. If the new segment can't be allocated, allocate it will return 0.*/ - void* multi_allocate(std::size_t nbytes); + void* multi_allocate(size_type nbytes); private: /*!Real allocation algorithm with min allocation option*/ std::pair priv_allocate(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr = 0); /*!Returns next block if it's free. Returns 0 if next block is not free.*/ @@ -187,56 +193,56 @@ class simple_seq_fit_impl /*!Real expand function implementation*/ bool priv_expand(void *ptr - ,std::size_t min_size, std::size_t preferred_size - ,std::size_t &received_size); + ,size_type min_size, size_type preferred_size + ,size_type &received_size); /*!Real expand to both sides implementation*/ void* priv_expand_both_sides(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr ,bool only_preferred_backwards); /*!Real shrink function implementation*/ bool priv_shrink(void *ptr - ,std::size_t max_size, std::size_t preferred_size - ,std::size_t &received_size); + ,size_type max_size, size_type preferred_size + ,size_type &received_size); //!Real private aligned allocation function - void* priv_allocate_aligned (std::size_t nbytes, std::size_t alignment); + void* priv_allocate_aligned (size_type nbytes, size_type alignment); /*!Checks if block has enough memory and splits/unlinks the block returning the address to the users*/ - void* priv_check_and_allocate(std::size_t units + void* priv_check_and_allocate(size_type units ,block_ctrl* prev ,block_ctrl* block - ,std::size_t &received_size); + ,size_type &received_size); /*!Real deallocation algorithm*/ void priv_deallocate(void *addr); /*!Makes a new memory portion available for allocation*/ - void priv_add_segment(void *addr, std::size_t size); + void priv_add_segment(void *addr, size_type size); - enum { Alignment = boost::alignment_of::value }; - enum { BlockCtrlBytes = detail::ct_rounded_size::value }; - enum { BlockCtrlSize = BlockCtrlBytes/Alignment }; - enum { MinBlockSize = BlockCtrlSize + Alignment }; + static const std::size_t Alignment = ::boost::alignment_of::value; + static const std::size_t BlockCtrlBytes = ipcdetail::ct_rounded_size::value; + static const std::size_t BlockCtrlSize = BlockCtrlBytes/Alignment; + static const std::size_t MinBlockSize = BlockCtrlSize + Alignment; public: - enum { PayloadPerAllocation = BlockCtrlBytes }; + static const std::size_t PayloadPerAllocation = BlockCtrlBytes; }; template inline simple_seq_fit_impl:: - simple_seq_fit_impl(std::size_t size, std::size_t extra_hdr_bytes) + simple_seq_fit_impl(size_type size, size_type extra_hdr_bytes) { //Initialize sizes and counters m_header.m_allocated = 0; m_header.m_size = size; //Initialize pointers - std::size_t block1_off = detail::get_rounded_size(sizeof(*this)+extra_hdr_bytes, Alignment); + size_type block1_off = ipcdetail::get_rounded_size(sizeof(*this)+extra_hdr_bytes, Alignment); m_header.m_root.m_next = reinterpret_cast (reinterpret_cast(this) + block1_off); m_header.m_root.m_next->m_size = (size - block1_off)/Alignment; @@ -252,10 +258,10 @@ inline simple_seq_fit_impl::~simple_seq_fit_impl() } template -inline void simple_seq_fit_impl::grow(std::size_t extra_size) +inline void simple_seq_fit_impl::grow(size_type extra_size) { //Old highest address block's end offset - std::size_t old_end = m_header.m_size/Alignment*Alignment; + size_type old_end = m_header.m_size/Alignment*Alignment; //Update managed buffer's size m_header.m_size += extra_size; @@ -276,7 +282,7 @@ inline void simple_seq_fit_impl::grow(std::size_t extr } template -inline void simple_seq_fit_impl::priv_add_segment(void *addr, std::size_t size) +inline void simple_seq_fit_impl::priv_add_segment(void *addr, size_type size) { //Check size BOOST_ASSERT(!(size < MinBlockSize)); @@ -293,14 +299,16 @@ inline void simple_seq_fit_impl::priv_add_segment(void } template -inline std::size_t simple_seq_fit_impl::get_size() const +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl::get_size() const { return m_header.m_size; } template -inline std::size_t simple_seq_fit_impl:: - get_min_size (std::size_t extra_hdr_bytes) +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl:: + get_min_size (size_type extra_hdr_bytes) { - return detail::get_rounded_size(sizeof(simple_seq_fit_impl)+extra_hdr_bytes + return ipcdetail::get_rounded_size(sizeof(simple_seq_fit_impl)+extra_hdr_bytes ,Alignment) + MinBlockSize; } @@ -313,7 +321,7 @@ inline bool simple_seq_fit_impl:: boost::interprocess::scoped_lock guard(m_header); //----------------------- return m_header.m_allocated == 0 && - detail::get_pointer(m_header.m_root.m_next->m_next) == &m_header.m_root; + ipcdetail::to_raw_pointer(m_header.m_root.m_next->m_next) == &m_header.m_root; } template @@ -322,7 +330,7 @@ inline void simple_seq_fit_impl::clear_free_memory() //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - block_ctrl *block = detail::get_pointer(m_header.m_root.m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(m_header.m_root.m_next); //Iterate through all free portions do{ @@ -330,7 +338,7 @@ inline void simple_seq_fit_impl::clear_free_memory() std::memset( reinterpret_cast(block) + BlockCtrlBytes , 0 , block->m_size*Alignment - BlockCtrlBytes); - block = detail::get_pointer(block->m_next); + block = ipcdetail::to_raw_pointer(block->m_next); } while(block != &m_header.m_root); } @@ -342,14 +350,14 @@ inline bool simple_seq_fit_impl:: //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - block_ctrl *block = detail::get_pointer(m_header.m_root.m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(m_header.m_root.m_next); - std::size_t free_memory = 0; + size_type free_memory = 0; //Iterate through all blocks obtaining their size do{ //Free blocks's next must be always valid - block_ctrl *next = detail::get_pointer(block->m_next); + block_ctrl *next = ipcdetail::to_raw_pointer(block->m_next); if(!next){ return false; } @@ -372,18 +380,18 @@ inline bool simple_seq_fit_impl:: template inline void* simple_seq_fit_impl:: - allocate(std::size_t nbytes) + allocate(size_type nbytes) { //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - std::size_t ignore; + size_type ignore; return priv_allocate(boost::interprocess::allocate_new, nbytes, nbytes, ignore).first; } template inline void* simple_seq_fit_impl:: - allocate_aligned(std::size_t nbytes, std::size_t alignment) + allocate_aligned(size_type nbytes, size_type alignment) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -393,9 +401,9 @@ inline void* simple_seq_fit_impl:: template inline std::pair simple_seq_fit_impl:: - allocation_command (boost::interprocess::allocation_type command, std::size_t min_size, - std::size_t preferred_size,std::size_t &received_size, - void *reuse_ptr, std::size_t backwards_multiple) + allocation_command (boost::interprocess::allocation_type command, size_type min_size, + size_type preferred_size,size_type &received_size, + void *reuse_ptr, size_type backwards_multiple) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -408,7 +416,8 @@ inline std::pair simple_seq_fit_impl:: } template -inline std::size_t simple_seq_fit_impl:: +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl:: size(void *ptr) const { //We need no synchronization since this block is not going @@ -421,19 +430,19 @@ inline std::size_t simple_seq_fit_impl:: template inline void* simple_seq_fit_impl:: - multi_allocate(std::size_t nbytes) + multi_allocate(size_type nbytes) { //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- //Multisegment pointer. Let's try first the normal allocation //since it's faster. - std::size_t ignore; + size_type ignore; void *addr = this->priv_allocate(boost::interprocess::allocate_new, nbytes, nbytes, ignore).first; if(!addr){ //If this fails we will try the allocation through the segment //creator. - std::size_t group, id; + size_type group, id; //Obtain the segment group of this segment void_pointer::get_group_and_id(this, group, id); if(group == 0){ @@ -446,7 +455,7 @@ inline void* simple_seq_fit_impl:: static_cast (void_pointer::find_group_data(group)); BOOST_ASSERT(p_services); - std::pair ret = + std::pair ret = p_services->create_new_segment(MinBlockSize > nbytes ? MinBlockSize : nbytes); if(ret.first){ priv_add_segment(ret.first, ret.second); @@ -459,9 +468,9 @@ inline void* simple_seq_fit_impl:: template void* simple_seq_fit_impl:: priv_expand_both_sides(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr ,bool only_preferred_backwards) { @@ -482,19 +491,19 @@ void* simple_seq_fit_impl:: received_size = this->size(reuse_ptr); } if(command & boost::interprocess::expand_bwd){ - std::size_t extra_forward = !received_size ? 0 : received_size + BlockCtrlBytes; + size_type extra_forward = !received_size ? 0 : received_size + BlockCtrlBytes; prev_block_t prev_pair = priv_prev_block_if_free(reuse); block_ctrl *prev = prev_pair.second; if(!prev){ return 0; } - std::size_t needs_backwards = - detail::get_rounded_size(preferred_size - extra_forward, Alignment); + size_type needs_backwards = + ipcdetail::get_rounded_size(preferred_size - extra_forward, Alignment); if(!only_preferred_backwards){ needs_backwards = - max_value(detail::get_rounded_size(min_size - extra_forward, Alignment) + max_value(ipcdetail::get_rounded_size(min_size - extra_forward, Alignment) ,min_value(prev->get_user_bytes(), needs_backwards)); } @@ -538,9 +547,9 @@ void* simple_seq_fit_impl:: template std::pair simple_seq_fit_impl:: priv_allocate(boost::interprocess::allocation_type command - ,std::size_t limit_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type limit_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr) { if(command & boost::interprocess::shrink_in_place){ @@ -555,15 +564,15 @@ std::pair simple_seq_fit_impl:: return return_type(0, false); //Number of units to request (including block_ctrl header) - std::size_t nunits = detail::get_rounded_size(preferred_size, Alignment)/Alignment + BlockCtrlSize; + size_type nunits = ipcdetail::get_rounded_size(preferred_size, Alignment)/Alignment + BlockCtrlSize; //Get the root and the first memory block block_ctrl *prev = &m_header.m_root; - block_ctrl *block = detail::get_pointer(prev->m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(prev->m_next); block_ctrl *root = &m_header.m_root; block_ctrl *biggest_block = 0; block_ctrl *prev_biggest_block = 0; - std::size_t biggest_size = limit_size; + size_type biggest_size = limit_size; //Expand in place //reuse_ptr, limit_size, preferred_size, received_size @@ -588,14 +597,14 @@ std::pair simple_seq_fit_impl:: if(addr) return return_type(addr, false); //Bad luck, let's check next block prev = block; - block = detail::get_pointer(block->m_next); + block = ipcdetail::to_raw_pointer(block->m_next); } //Bad luck finding preferred_size, now if we have any biggest_block //try with this block if(biggest_block){ received_size = biggest_block->m_size*Alignment - BlockCtrlSize; - nunits = detail::get_rounded_size(limit_size, Alignment)/Alignment + BlockCtrlSize; + nunits = ipcdetail::get_rounded_size(limit_size, Alignment)/Alignment + BlockCtrlSize; void *ret = this->priv_check_and_allocate (nunits, prev_biggest_block, biggest_block, received_size); if(ret) @@ -621,7 +630,7 @@ inline typename simple_seq_fit_impl::block_ctrl * (reinterpret_cast(ptr) + ptr->m_size*Alignment); //Check if the adjacent block is in the managed segment - std::size_t distance = (reinterpret_cast(next_block) - reinterpret_cast(this))/Alignment; + size_type distance = (reinterpret_cast(next_block) - reinterpret_cast(this))/Alignment; if(distance >= (m_header.m_size/Alignment)){ //"next_block" does not exist so we can't expand "block" return 0; @@ -645,19 +654,19 @@ inline //Take the address where the previous block should go block_ctrl *root = &m_header.m_root; block_ctrl *prev_2_block = root; - block_ctrl *prev_block = detail::get_pointer(root->m_next); + block_ctrl *prev_block = ipcdetail::to_raw_pointer(root->m_next); while((reinterpret_cast(prev_block) + prev_block->m_size*Alignment) != (reinterpret_cast(ptr)) && prev_block != root){ prev_2_block = prev_block; - prev_block = detail::get_pointer(prev_block->m_next); + prev_block = ipcdetail::to_raw_pointer(prev_block->m_next); } if(prev_block == root || !prev_block->m_next) return prev_pair_t(0, 0); //Check if the previous block is in the managed segment - std::size_t distance = (reinterpret_cast(prev_block) - reinterpret_cast(this))/Alignment; + size_type distance = (reinterpret_cast(prev_block) - reinterpret_cast(this))/Alignment; if(distance >= (m_header.m_size/Alignment)){ //"previous_block" does not exist so we can't expand "block" return prev_pair_t(0, 0); @@ -669,14 +678,14 @@ inline template inline bool simple_seq_fit_impl:: priv_expand (void *ptr - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size) + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size) { //Obtain the real size of the block block_ctrl *block = reinterpret_cast (reinterpret_cast(ptr) - BlockCtrlBytes); - std::size_t old_block_size = block->m_size; + size_type old_block_size = block->m_size; //All used blocks' next is marked with 0 so check it BOOST_ASSERT(block->m_next == 0); @@ -685,14 +694,14 @@ inline bool simple_seq_fit_impl:: received_size = old_block_size*Alignment - BlockCtrlBytes; //Now translate it to Alignment units - min_size = detail::get_rounded_size(min_size, Alignment)/Alignment; - preferred_size = detail::get_rounded_size(preferred_size, Alignment)/Alignment; + min_size = ipcdetail::get_rounded_size(min_size, Alignment)/Alignment; + preferred_size = ipcdetail::get_rounded_size(preferred_size, Alignment)/Alignment; //Some parameter checks if(min_size > preferred_size) return false; - std::size_t data_size = old_block_size - BlockCtrlSize; + size_type data_size = old_block_size - BlockCtrlSize; if(data_size >= min_size) return true; @@ -703,7 +712,7 @@ inline bool simple_seq_fit_impl:: } //Is "block" + "next_block" big enough? - std::size_t merged_size = old_block_size + next_block->m_size; + size_type merged_size = old_block_size + next_block->m_size; //Now we can expand this block further than before received_size = merged_size*Alignment - BlockCtrlBytes; @@ -718,8 +727,8 @@ inline bool simple_seq_fit_impl:: //Find the previous free block of next_block block_ctrl *prev = &m_header.m_root; - while(detail::get_pointer(prev->m_next) != next_block){ - prev = detail::get_pointer(prev->m_next); + while(ipcdetail::to_raw_pointer(prev->m_next) != next_block){ + prev = ipcdetail::to_raw_pointer(prev->m_next); } //Now insert merged block in the free list @@ -729,7 +738,7 @@ inline bool simple_seq_fit_impl:: //Now use check and allocate to do the allocation logic preferred_size += BlockCtrlSize; - std::size_t nunits = preferred_size < merged_size ? preferred_size : merged_size; + size_type nunits = preferred_size < merged_size ? preferred_size : merged_size; //This must success since nunits is less than merged_size! if(!this->priv_check_and_allocate (nunits, prev, block, received_size)){ @@ -744,14 +753,14 @@ inline bool simple_seq_fit_impl:: template inline bool simple_seq_fit_impl:: priv_shrink (void *ptr - ,std::size_t max_size - ,std::size_t preferred_size - ,std::size_t &received_size) + ,size_type max_size + ,size_type preferred_size + ,size_type &received_size) { //Obtain the real size of the block block_ctrl *block = reinterpret_cast (reinterpret_cast(ptr) - BlockCtrlBytes); - std::size_t block_size = block->m_size; + size_type block_size = block->m_size; //All used blocks' next is marked with 0 so check it BOOST_ASSERT(block->m_next == 0); @@ -761,13 +770,13 @@ inline bool simple_seq_fit_impl:: //Now translate it to Alignment units max_size = max_size/Alignment; - preferred_size = detail::get_rounded_size(preferred_size, Alignment)/Alignment; + preferred_size = ipcdetail::get_rounded_size(preferred_size, Alignment)/Alignment; //Some parameter checks if(max_size < preferred_size) return false; - std::size_t data_size = block_size - BlockCtrlSize; + size_type data_size = block_size - BlockCtrlSize; if(data_size < preferred_size) return false; @@ -801,21 +810,21 @@ inline bool simple_seq_fit_impl:: template inline void* simple_seq_fit_impl:: - priv_allocate_aligned(std::size_t nbytes, std::size_t alignment) + priv_allocate_aligned(size_type nbytes, size_type alignment) { //Ensure power of 2 - if ((alignment & (alignment - std::size_t(1u))) != 0){ + if ((alignment & (alignment - size_type(1u))) != 0){ //Alignment is not power of two - BOOST_ASSERT((alignment & (alignment - std::size_t(1u))) != 0); + BOOST_ASSERT((alignment & (alignment - size_type(1u))) != 0); return 0; } - std::size_t ignore; + size_type ignore; if(alignment <= Alignment){ return priv_allocate(boost::interprocess::allocate_new, nbytes, nbytes, ignore).first; } - std::size_t request = + size_type request = nbytes + alignment + MinBlockSize*Alignment - BlockCtrlBytes; void *buffer = priv_allocate(boost::interprocess::allocate_new, request, request, ignore).first; if(!buffer) @@ -824,7 +833,7 @@ inline void* simple_seq_fit_impl:: return buffer; char *aligned_portion = reinterpret_cast - (reinterpret_cast(static_cast(buffer) + alignment - 1) & -alignment); + (reinterpret_cast(static_cast(buffer) + alignment - 1) & -alignment); char *pos = ((aligned_portion - reinterpret_cast(buffer)) >= (MinBlockSize*Alignment)) ? aligned_portion : (aligned_portion + alignment); @@ -834,7 +843,7 @@ inline void* simple_seq_fit_impl:: block_ctrl *second = reinterpret_cast(pos - BlockCtrlBytes); - std::size_t old_size = first->m_size; + size_type old_size = first->m_size; first->m_size = (reinterpret_cast(second) - reinterpret_cast(first))/Alignment; second->m_size = old_size - first->m_size; @@ -849,19 +858,19 @@ inline void* simple_seq_fit_impl:: template inline void* simple_seq_fit_impl::priv_check_and_allocate - (std::size_t nunits + (size_type nunits ,typename simple_seq_fit_impl::block_ctrl* prev ,typename simple_seq_fit_impl::block_ctrl* block - ,std::size_t &received_size) + ,size_type &received_size) { - std::size_t upper_nunits = nunits + BlockCtrlSize; + size_type upper_nunits = nunits + BlockCtrlSize; bool found = false; if (block->m_size > upper_nunits){ //This block is bigger than needed, split it in //two blocks, the first's size will be (block->m_size-units) //the second's size (units) - std::size_t total_size = block->m_size; + size_type total_size = block->m_size; block->m_size = nunits; block_ctrl *new_block = reinterpret_cast (reinterpret_cast(block) + Alignment*nunits); @@ -923,7 +932,7 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) BOOST_ASSERT((reinterpret_cast(addr) - reinterpret_cast(this)) % Alignment == 0 ); - std::size_t total_size = Alignment*block->m_size; + size_type total_size = Alignment*block->m_size; BOOST_ASSERT(m_header.m_allocated >= total_size); //Update used memory count @@ -933,15 +942,15 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) //This ordering comparison must be done with original pointers //types since their mapping to raw pointers can be different //in each process - while((detail::get_pointer(pos) != &m_header.m_root) && (block > pos)){ + while((ipcdetail::to_raw_pointer(pos) != &m_header.m_root) && (block > pos)){ prev = pos; pos = pos->m_next; } //Try to combine with upper block - if ((reinterpret_cast(detail::get_pointer(block)) + if ((reinterpret_cast(ipcdetail::to_raw_pointer(block)) + Alignment*block->m_size) == - reinterpret_cast(detail::get_pointer(pos))){ + reinterpret_cast(ipcdetail::to_raw_pointer(pos))){ block->m_size += pos->m_size; block->m_next = pos->m_next; @@ -951,9 +960,9 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) } //Try to combine with lower block - if ((reinterpret_cast(detail::get_pointer(prev)) + if ((reinterpret_cast(ipcdetail::to_raw_pointer(prev)) + Alignment*prev->m_size) == - reinterpret_cast(detail::get_pointer(block))){ + reinterpret_cast(ipcdetail::to_raw_pointer(block))){ prev->m_size += block->m_size; prev->m_next = block->m_next; } @@ -962,7 +971,7 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) } } -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { diff --git a/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp b/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp index 8cf2bf3789..c36916b72f 100644 --- a/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp +++ b/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,11 +18,11 @@ #include #include -#include +#include #include #include -#include +#include #include #include #include @@ -30,7 +30,10 @@ #include #include #include +#include #include +#include +#include #include #include #include @@ -44,7 +47,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { //!This class implements the simple sequential fit algorithm with a simply //!linked list of free buffers. @@ -57,6 +60,10 @@ class simple_seq_fit_impl simple_seq_fit_impl(); simple_seq_fit_impl(const simple_seq_fit_impl &); simple_seq_fit_impl &operator=(const simple_seq_fit_impl &); + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type char_ptr; public: @@ -64,13 +71,18 @@ class simple_seq_fit_impl typedef MutexFamily mutex_family; //!Pointer type to be used with the rest of the Interprocess framework typedef VoidPointer void_pointer; - typedef boost::container::containers_detail:: + typedef boost::container::container_detail:: basic_multiallocation_chain multiallocation_chain; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; + + private: class block_ctrl; - typedef typename boost:: - pointer_to_other::type block_ctrl_ptr; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type block_ctrl_ptr; class block_ctrl; friend class block_ctrl; @@ -81,14 +93,14 @@ class simple_seq_fit_impl public: //!Offset pointer to the next block. block_ctrl_ptr m_next; - //!This block's memory size (including block_ctrl + //!This block's memory size (including block_ctrl //!header) in BasicSize units - std::size_t m_size; - - std::size_t get_user_bytes() const + size_type m_size; + + size_type get_user_bytes() const { return this->m_size*Alignment - BlockCtrlBytes; } - std::size_t get_total_bytes() const + size_type get_total_bytes() const { return this->m_size*Alignment; } }; @@ -102,39 +114,39 @@ class simple_seq_fit_impl //!Pointer to the first free block block_ctrl m_root; //!Allocated bytes for internal checking - std::size_t m_allocated; + size_type m_allocated; //!The size of the memory segment - std::size_t m_size; + size_type m_size; //!The extra size required by the segment - std::size_t m_extra_hdr_bytes; + size_type m_extra_hdr_bytes; } m_header; - friend class detail::memory_algorithm_common; + friend class ipcdetail::memory_algorithm_common; - typedef detail::memory_algorithm_common algo_impl_t; + typedef ipcdetail::memory_algorithm_common algo_impl_t; public: - //!Constructor. "size" is the total size of the managed memory segment, + //!Constructor. "size" is the total size of the managed memory segment, //!"extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(simple_seq_fit_impl) //!offset that the allocator should not use at all. - simple_seq_fit_impl (std::size_t size, std::size_t extra_hdr_bytes); + simple_seq_fit_impl (size_type size, size_type extra_hdr_bytes); //!Destructor ~simple_seq_fit_impl(); //!Obtains the minimum size needed by the algorithm - static std::size_t get_min_size (std::size_t extra_hdr_bytes); + static size_type get_min_size (size_type extra_hdr_bytes); //Functions for single segment management //!Allocates bytes, returns 0 if there is not more memory - void* allocate (std::size_t nbytes); + void* allocate (size_type nbytes); /// @cond //!Multiple element allocation, same size multiallocation_chain - allocate_many(std::size_t elem_bytes, std::size_t num_elements) + allocate_many(size_type elem_bytes, size_type num_elements) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -144,7 +156,7 @@ class simple_seq_fit_impl //!Multiple element allocation, different size multiallocation_chain - allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element) + allocate_many(const size_type *elem_sizes, size_type n_elements, size_type sizeof_element) { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -161,13 +173,13 @@ class simple_seq_fit_impl void deallocate (void *addr); //!Returns the size of the memory segment - std::size_t get_size() const; + size_type get_size() const; //!Returns the number of free bytes of the memory segment - std::size_t get_free_memory() const; + size_type get_free_memory() const; //!Increases managed memory in extra_size bytes more - void grow(std::size_t extra_size); + void grow(size_type extra_size); //!Decreases managed memory as much as possible void shrink_to_fit(); @@ -184,21 +196,21 @@ class simple_seq_fit_impl template std::pair - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, T *reuse_ptr = 0); std::pair - raw_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, - void *reuse_ptr = 0, std::size_t sizeof_object = 1); + raw_allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, + void *reuse_ptr = 0, size_type sizeof_object = 1); //!Returns the size of the buffer previously allocated pointed by ptr - std::size_t size(const void *ptr) const; + size_type size(const void *ptr) const; //!Allocates aligned bytes, returns 0 if there is not more memory. //!Alignment must be power of 2 - void* allocate_aligned (std::size_t nbytes, std::size_t alignment); + void* allocate_aligned (size_type nbytes, size_type alignment); private: @@ -210,24 +222,24 @@ class simple_seq_fit_impl //!Real allocation algorithm with min allocation option std::pair priv_allocate(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr = 0); std::pair priv_allocation_command(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr - ,std::size_t sizeof_object); + ,size_type sizeof_object); //!Returns the number of total units that a user buffer //!of "userbytes" bytes really occupies (including header) - static std::size_t priv_get_total_units(std::size_t userbytes); + static size_type priv_get_total_units(size_type userbytes); - static std::size_t priv_first_block_offset(const void *this_ptr, std::size_t extra_hdr_bytes); - std::size_t priv_block_end_offset() const; + static size_type priv_first_block_offset(const void *this_ptr, size_type extra_hdr_bytes); + size_type priv_block_end_offset() const; //!Returns next block if it's free. //!Returns 0 if next block is not free. @@ -242,74 +254,76 @@ class simple_seq_fit_impl //!Real expand function implementation bool priv_expand(void *ptr - ,std::size_t min_size, std::size_t preferred_size - ,std::size_t &received_size); + ,size_type min_size, size_type preferred_size + ,size_type &received_size); //!Real expand to both sides implementation void* priv_expand_both_sides(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr ,bool only_preferred_backwards); //!Real private aligned allocation function - //void* priv_allocate_aligned (std::size_t nbytes, std::size_t alignment); + //void* priv_allocate_aligned (size_type nbytes, size_type alignment); //!Checks if block has enough memory and splits/unlinks the block //!returning the address to the users - void* priv_check_and_allocate(std::size_t units + void* priv_check_and_allocate(size_type units ,block_ctrl* prev ,block_ctrl* block - ,std::size_t &received_size); + ,size_type &received_size); //!Real deallocation algorithm void priv_deallocate(void *addr); //!Makes a new memory portion available for allocation - void priv_add_segment(void *addr, std::size_t size); + void priv_add_segment(void *addr, size_type size); void priv_mark_new_allocated_block(block_ctrl *block); public: - static const std::size_t Alignment = detail::alignment_of::value; + static const size_type Alignment = ::boost::alignment_of< ::boost::detail::max_align>::value; private: - static const std::size_t BlockCtrlBytes = detail::ct_rounded_size::value; - static const std::size_t BlockCtrlUnits = BlockCtrlBytes/Alignment; - static const std::size_t MinBlockUnits = BlockCtrlUnits; - static const std::size_t MinBlockSize = MinBlockUnits*Alignment; - static const std::size_t AllocatedCtrlBytes = BlockCtrlBytes; - static const std::size_t AllocatedCtrlUnits = BlockCtrlUnits; - static const std::size_t UsableByPreviousChunk = 0; + static const size_type BlockCtrlBytes = ipcdetail::ct_rounded_size::value; + static const size_type BlockCtrlUnits = BlockCtrlBytes/Alignment; + static const size_type MinBlockUnits = BlockCtrlUnits; + static const size_type MinBlockSize = MinBlockUnits*Alignment; + static const size_type AllocatedCtrlBytes = BlockCtrlBytes; + static const size_type AllocatedCtrlUnits = BlockCtrlUnits; + static const size_type UsableByPreviousChunk = 0; public: - static const std::size_t PayloadPerAllocation = BlockCtrlBytes; + static const size_type PayloadPerAllocation = BlockCtrlBytes; }; template -inline std::size_t simple_seq_fit_impl - ::priv_first_block_offset(const void *this_ptr, std::size_t extra_hdr_bytes) +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl + ::priv_first_block_offset(const void *this_ptr, size_type extra_hdr_bytes) { //First align "this" pointer - std::size_t uint_this = (std::size_t)this_ptr; - std::size_t uint_aligned_this = uint_this/Alignment*Alignment; - std::size_t this_disalignment = (uint_this - uint_aligned_this); - std::size_t block1_off = - detail::get_rounded_size(sizeof(simple_seq_fit_impl) + extra_hdr_bytes + this_disalignment, Alignment) + size_type uint_this = (std::size_t)this_ptr; + size_type uint_aligned_this = uint_this/Alignment*Alignment; + size_type this_disalignment = (uint_this - uint_aligned_this); + size_type block1_off = + ipcdetail::get_rounded_size(sizeof(simple_seq_fit_impl) + extra_hdr_bytes + this_disalignment, Alignment) - this_disalignment; algo_impl_t::assert_alignment(this_disalignment + block1_off); return block1_off; } template -inline std::size_t simple_seq_fit_impl +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl ::priv_block_end_offset() const { //First align "this" pointer - std::size_t uint_this = (std::size_t)this; - std::size_t uint_aligned_this = uint_this/Alignment*Alignment; - std::size_t this_disalignment = (uint_this - uint_aligned_this); - std::size_t old_end = - detail::get_truncated_size(m_header.m_size + this_disalignment, Alignment) + size_type uint_this = (std::size_t)this; + size_type uint_aligned_this = uint_this/Alignment*Alignment; + size_type this_disalignment = (uint_this - uint_aligned_this); + size_type old_end = + ipcdetail::get_truncated_size(m_header.m_size + this_disalignment, Alignment) - this_disalignment; algo_impl_t::assert_alignment(old_end + this_disalignment); return old_end; @@ -317,7 +331,7 @@ inline std::size_t simple_seq_fit_impl template inline simple_seq_fit_impl:: - simple_seq_fit_impl(std::size_t size, std::size_t extra_hdr_bytes) + simple_seq_fit_impl(size_type size, size_type extra_hdr_bytes) { //Initialize sizes and counters m_header.m_allocated = 0; @@ -325,11 +339,11 @@ inline simple_seq_fit_impl:: m_header.m_extra_hdr_bytes = extra_hdr_bytes; //Initialize pointers - std::size_t block1_off = priv_first_block_offset(this, extra_hdr_bytes); + size_type block1_off = priv_first_block_offset(this, extra_hdr_bytes); m_header.m_root.m_next = reinterpret_cast ((reinterpret_cast(this) + block1_off)); - algo_impl_t::assert_alignment(detail::get_pointer(m_header.m_root.m_next)); + algo_impl_t::assert_alignment(ipcdetail::to_raw_pointer(m_header.m_root.m_next)); m_header.m_root.m_next->m_size = (size - block1_off)/Alignment; m_header.m_root.m_next->m_next = &m_header.m_root; } @@ -343,10 +357,10 @@ inline simple_seq_fit_impl::~simple_seq_fit_impl() } template -inline void simple_seq_fit_impl::grow(std::size_t extra_size) +inline void simple_seq_fit_impl::grow(size_type extra_size) { //Old highest address block's end offset - std::size_t old_end = this->priv_block_end_offset(); + size_type old_end = this->priv_block_end_offset(); //Update managed buffer's size m_header.m_size += extra_size; @@ -374,7 +388,7 @@ void simple_seq_fit_impl::shrink_to_fit() //Get the root and the first memory block block_ctrl *prev = &m_header.m_root; block_ctrl *last = &m_header.m_root; - block_ctrl *block = detail::get_pointer(last->m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(last->m_next); block_ctrl *root = &m_header.m_root; //No free block? @@ -384,7 +398,7 @@ void simple_seq_fit_impl::shrink_to_fit() while(block != root){ prev = last; last = block; - block = detail::get_pointer(block->m_next); + block = ipcdetail::to_raw_pointer(block->m_next); } char *last_free_end_address = reinterpret_cast(last) + last->m_size*Alignment; @@ -398,21 +412,21 @@ void simple_seq_fit_impl::shrink_to_fit() void *unique_block = 0; if(!m_header.m_allocated){ BOOST_ASSERT(prev == root); - std::size_t ignore; + size_type ignore; unique_block = priv_allocate(boost::interprocess::allocate_new, 0, 0, ignore).first; if(!unique_block) return; - last = detail::get_pointer(m_header.m_root.m_next); + last = ipcdetail::to_raw_pointer(m_header.m_root.m_next); BOOST_ASSERT(last_free_end_address == (reinterpret_cast(last) + last->m_size*Alignment)); } - std::size_t last_units = last->m_size; + size_type last_units = last->m_size; - std::size_t received_size; + size_type received_size; void *addr = priv_check_and_allocate(last_units, prev, last, received_size); (void)addr; BOOST_ASSERT(addr); BOOST_ASSERT(received_size == last_units*Alignment - AllocatedCtrlBytes); - + //Shrink it m_header.m_size /= Alignment; m_header.m_size -= last->m_size; @@ -448,8 +462,8 @@ void *simple_seq_fit_impl:: } template -inline void simple_seq_fit_impl::priv_add_segment(void *addr, std::size_t size) -{ +inline void simple_seq_fit_impl::priv_add_segment(void *addr, size_type size) +{ algo_impl_t::assert_alignment(addr); //Check size BOOST_ASSERT(!(size < MinBlockSize)); @@ -460,28 +474,31 @@ inline void simple_seq_fit_impl::priv_add_segment(void new_block->m_size = size/Alignment; new_block->m_next = 0; //Simulate this block was previously allocated - m_header.m_allocated += new_block->m_size*Alignment; + m_header.m_allocated += new_block->m_size*Alignment; //Return block and insert it in the free block list this->priv_deallocate(priv_get_user_buffer(new_block)); } template -inline std::size_t simple_seq_fit_impl::get_size() const +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl::get_size() const { return m_header.m_size; } template -inline std::size_t simple_seq_fit_impl::get_free_memory() const +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl::get_free_memory() const { - return m_header.m_size - m_header.m_allocated - + return m_header.m_size - m_header.m_allocated - algo_impl_t::multiple_of_units(sizeof(*this) + m_header.m_extra_hdr_bytes); } template -inline std::size_t simple_seq_fit_impl:: - get_min_size (std::size_t extra_hdr_bytes) +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl:: + get_min_size (size_type extra_hdr_bytes) { - return detail::get_rounded_size(sizeof(simple_seq_fit_impl),Alignment) + - detail::get_rounded_size(extra_hdr_bytes,Alignment) + return ipcdetail::get_rounded_size((size_type)sizeof(simple_seq_fit_impl),Alignment) + + ipcdetail::get_rounded_size(extra_hdr_bytes,Alignment) + MinBlockSize; } @@ -493,7 +510,7 @@ inline bool simple_seq_fit_impl:: boost::interprocess::scoped_lock guard(m_header); //----------------------- return m_header.m_allocated == 0 && - detail::get_pointer(m_header.m_root.m_next->m_next) == &m_header.m_root; + ipcdetail::to_raw_pointer(m_header.m_root.m_next->m_next) == &m_header.m_root; } template @@ -502,15 +519,15 @@ inline void simple_seq_fit_impl::zero_free_memory() //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - block_ctrl *block = detail::get_pointer(m_header.m_root.m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(m_header.m_root.m_next); //Iterate through all free portions do{ - //Just clear user the memory part reserved for the user + //Just clear user the memory part reserved for the user std::memset( priv_get_user_buffer(block) , 0 - , block->get_user_bytes()); - block = detail::get_pointer(block->m_next); + , block->get_user_bytes()); + block = ipcdetail::to_raw_pointer(block->m_next); } while(block != &m_header.m_root); } @@ -522,9 +539,9 @@ inline bool simple_seq_fit_impl:: //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - block_ctrl *block = detail::get_pointer(m_header.m_root.m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(m_header.m_root.m_next); - std::size_t free_memory = 0; + size_type free_memory = 0; //Iterate through all blocks obtaining their size while(block != &m_header.m_root){ @@ -532,7 +549,7 @@ inline bool simple_seq_fit_impl:: if(!algo_impl_t::check_alignment(block)) return false; //Free blocks's next must be always valid - block_ctrl *next = detail::get_pointer(block->m_next); + block_ctrl *next = ipcdetail::to_raw_pointer(block->m_next); if(!next){ return false; } @@ -554,45 +571,45 @@ inline bool simple_seq_fit_impl:: template inline void* simple_seq_fit_impl:: - allocate(std::size_t nbytes) + allocate(size_type nbytes) { //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- - std::size_t ignore; + size_type ignore; return priv_allocate(boost::interprocess::allocate_new, nbytes, nbytes, ignore).first; } template inline void* simple_seq_fit_impl:: - allocate_aligned(std::size_t nbytes, std::size_t alignment) -{ + allocate_aligned(size_type nbytes, size_type alignment) +{ //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- return algo_impl_t:: - allocate_aligned(this, nbytes, alignment); + allocate_aligned(this, nbytes, alignment); } template template inline std::pair simple_seq_fit_impl:: - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, T *reuse_ptr) { std::pair ret = priv_allocation_command (command, limit_size, preferred_size, received_size, static_cast(reuse_ptr), sizeof(T)); - BOOST_ASSERT(0 == ((std::size_t)ret.first % detail::alignment_of::value)); + BOOST_ASSERT(0 == ((std::size_t)ret.first % ::boost::alignment_of::value)); return std::pair(static_cast(ret.first), ret.second); } template inline std::pair simple_seq_fit_impl:: - raw_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_objects, - std::size_t preferred_objects,std::size_t &received_objects, - void *reuse_ptr, std::size_t sizeof_object) + raw_allocation_command (boost::interprocess::allocation_type command, size_type limit_objects, + size_type preferred_objects,size_type &received_objects, + void *reuse_ptr, size_type sizeof_object) { if(!sizeof_object) return std::pair(static_cast(0), false); @@ -609,21 +626,21 @@ inline std::pair simple_seq_fit_impl:: template inline std::pair simple_seq_fit_impl:: - priv_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size, std::size_t &received_size, - void *reuse_ptr, std::size_t sizeof_object) + priv_allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size, size_type &received_size, + void *reuse_ptr, size_type sizeof_object) { command &= ~boost::interprocess::expand_bwd; if(!command) return std::pair(static_cast(0), false); std::pair ret; - std::size_t max_count = m_header.m_size/sizeof_object; + size_type max_count = m_header.m_size/sizeof_object; if(limit_size > max_count || preferred_size > max_count){ ret.first = 0; return ret; } - std::size_t l_size = limit_size*sizeof_object; - std::size_t p_size = preferred_size*sizeof_object; - std::size_t r_size; + size_type l_size = limit_size*sizeof_object; + size_type p_size = preferred_size*sizeof_object; + size_type r_size; { //----------------------- boost::interprocess::scoped_lock guard(m_header); @@ -635,7 +652,8 @@ inline std::pair simple_seq_fit_impl:: } template -inline std::size_t simple_seq_fit_impl:: +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl:: size(const void *ptr) const { //We need no synchronization since this block is not going @@ -648,9 +666,9 @@ inline std::size_t simple_seq_fit_impl:: template void* simple_seq_fit_impl:: priv_expand_both_sides(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr ,bool only_preferred_backwards) { @@ -671,18 +689,18 @@ void* simple_seq_fit_impl:: received_size = this->size(reuse_ptr); } if(command & boost::interprocess::expand_bwd){ - std::size_t extra_forward = !received_size ? 0 : received_size + BlockCtrlBytes; + size_type extra_forward = !received_size ? 0 : received_size + BlockCtrlBytes; prev_block_t prev_pair = priv_prev_block_if_free(reuse); block_ctrl *prev = prev_pair.second; if(!prev){ return 0; } - std::size_t needs_backwards = - detail::get_rounded_size(preferred_size - extra_forward, Alignment); - + size_type needs_backwards = + ipcdetail::get_rounded_size(preferred_size - extra_forward, Alignment); + if(!only_preferred_backwards){ - max_value(detail::get_rounded_size(min_size - extra_forward, Alignment) + max_value(ipcdetail::get_rounded_size(min_size - extra_forward, Alignment) ,min_value(prev->get_user_bytes(), needs_backwards)); } @@ -692,16 +710,16 @@ void* simple_seq_fit_impl:: if(!priv_expand(reuse_ptr, received_size, received_size, received_size)){ BOOST_ASSERT(0); } - + //We need a minimum size to split the previous one if((prev->get_user_bytes() - needs_backwards) > 2*BlockCtrlBytes){ block_ctrl *new_block = reinterpret_cast (reinterpret_cast(reuse) - needs_backwards - BlockCtrlBytes); new_block->m_next = 0; - new_block->m_size = + new_block->m_size = BlockCtrlUnits + (needs_backwards + extra_forward)/Alignment; - prev->m_size = + prev->m_size = (prev->get_total_bytes() - needs_backwards)/Alignment - BlockCtrlUnits; received_size = needs_backwards + extra_forward; m_header.m_allocated += needs_backwards + BlockCtrlBytes; @@ -739,10 +757,11 @@ inline void simple_seq_fit_impl:: } template -inline std::size_t simple_seq_fit_impl:: - priv_get_total_units(std::size_t userbytes) +inline typename simple_seq_fit_impl::size_type +simple_seq_fit_impl:: + priv_get_total_units(size_type userbytes) { - std::size_t s = detail::get_rounded_size(userbytes, Alignment)/Alignment; + size_type s = ipcdetail::get_rounded_size(userbytes, Alignment)/Alignment; if(!s) ++s; return BlockCtrlUnits + s; } @@ -750,13 +769,13 @@ inline std::size_t simple_seq_fit_impl:: template std::pair simple_seq_fit_impl:: priv_allocate(boost::interprocess::allocation_type command - ,std::size_t limit_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type limit_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr) { if(command & boost::interprocess::shrink_in_place){ - bool success = + bool success = algo_impl_t::shrink(this, reuse_ptr, limit_size, preferred_size, received_size); return std::pair ((success ? reuse_ptr : 0), true); } @@ -767,15 +786,15 @@ std::pair simple_seq_fit_impl:: return return_type(static_cast(0), false); //Number of units to request (including block_ctrl header) - std::size_t nunits = detail::get_rounded_size(preferred_size, Alignment)/Alignment + BlockCtrlUnits; + size_type nunits = ipcdetail::get_rounded_size(preferred_size, Alignment)/Alignment + BlockCtrlUnits; //Get the root and the first memory block block_ctrl *prev = &m_header.m_root; - block_ctrl *block = detail::get_pointer(prev->m_next); + block_ctrl *block = ipcdetail::to_raw_pointer(prev->m_next); block_ctrl *root = &m_header.m_root; block_ctrl *biggest_block = 0; block_ctrl *prev_biggest_block = 0; - std::size_t biggest_size = 0; + size_type biggest_size = 0; //Expand in place //reuse_ptr, limit_size, preferred_size, received_size @@ -806,13 +825,13 @@ std::pair simple_seq_fit_impl:: } //Bad luck, let's check next block prev = block; - block = detail::get_pointer(block->m_next); + block = ipcdetail::to_raw_pointer(block->m_next); } //Bad luck finding preferred_size, now if we have any biggest_block //try with this block if(biggest_block){ - std::size_t limit_units = detail::get_rounded_size(limit_size, Alignment)/Alignment + BlockCtrlUnits; + size_type limit_units = ipcdetail::get_rounded_size(limit_size, Alignment)/Alignment + BlockCtrlUnits; if(biggest_block->m_size < limit_units) return return_type(static_cast(0), false); @@ -852,7 +871,7 @@ inline typename simple_seq_fit_impl::block_ctrl * //Check if the adjacent block is in the managed segment char *this_char_ptr = reinterpret_cast(this); char *next_char_ptr = reinterpret_cast(next_block); - std::size_t distance = (next_char_ptr - this_char_ptr)/Alignment; + size_type distance = (size_type)(next_char_ptr - this_char_ptr)/Alignment; if(distance >= (m_header.m_size/Alignment)){ //"next_block" does not exist so we can't expand "block" @@ -866,7 +885,7 @@ inline typename simple_seq_fit_impl::block_ctrl * } template -inline +inline std::pair::block_ctrl * ,typename simple_seq_fit_impl::block_ctrl *> simple_seq_fit_impl:: @@ -877,13 +896,13 @@ inline //Take the address where the previous block should go block_ctrl *root = &m_header.m_root; block_ctrl *prev_2_block = root; - block_ctrl *prev_block = detail::get_pointer(root->m_next); + block_ctrl *prev_block = ipcdetail::to_raw_pointer(root->m_next); while((reinterpret_cast(prev_block) + prev_block->m_size*Alignment) != reinterpret_cast(ptr) && prev_block != root){ prev_2_block = prev_block; - prev_block = detail::get_pointer(prev_block->m_next); + prev_block = ipcdetail::to_raw_pointer(prev_block->m_next); } if(prev_block == root || !prev_block->m_next) @@ -892,7 +911,7 @@ inline //Check if the previous block is in the managed segment char *this_char_ptr = reinterpret_cast(this); char *prev_char_ptr = reinterpret_cast(prev_block); - std::size_t distance = (prev_char_ptr - this_char_ptr)/Alignment; + size_type distance = (size_type)(prev_char_ptr - this_char_ptr)/Alignment; if(distance >= (m_header.m_size/Alignment)){ //"previous_block" does not exist so we can't expand "block" @@ -905,13 +924,13 @@ inline template inline bool simple_seq_fit_impl:: priv_expand (void *ptr - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size) + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size) { //Obtain the real size of the block block_ctrl *block = reinterpret_cast(priv_get_block(ptr)); - std::size_t old_block_size = block->m_size; + size_type old_block_size = block->m_size; //All used blocks' next is marked with 0 so check it BOOST_ASSERT(block->m_next == 0); @@ -920,14 +939,14 @@ inline bool simple_seq_fit_impl:: received_size = old_block_size*Alignment - BlockCtrlBytes; //Now translate it to Alignment units - min_size = detail::get_rounded_size(min_size, Alignment)/Alignment; - preferred_size = detail::get_rounded_size(preferred_size, Alignment)/Alignment; + min_size = ipcdetail::get_rounded_size(min_size, Alignment)/Alignment; + preferred_size = ipcdetail::get_rounded_size(preferred_size, Alignment)/Alignment; //Some parameter checks if(min_size > preferred_size) return false; - std::size_t data_size = old_block_size - BlockCtrlUnits; + size_type data_size = old_block_size - BlockCtrlUnits; if(data_size >= min_size) return true; @@ -938,7 +957,7 @@ inline bool simple_seq_fit_impl:: } //Is "block" + "next_block" big enough? - std::size_t merged_size = old_block_size + next_block->m_size; + size_type merged_size = old_block_size + next_block->m_size; //Now we can expand this block further than before received_size = merged_size*Alignment - BlockCtrlBytes; @@ -950,21 +969,21 @@ inline bool simple_seq_fit_impl:: //We can fill expand. Merge both blocks, block->m_next = next_block->m_next; block->m_size = merged_size; - + //Find the previous free block of next_block block_ctrl *prev = &m_header.m_root; - while(detail::get_pointer(prev->m_next) != next_block){ - prev = detail::get_pointer(prev->m_next); + while(ipcdetail::to_raw_pointer(prev->m_next) != next_block){ + prev = ipcdetail::to_raw_pointer(prev->m_next); } //Now insert merged block in the free list //This allows reusing allocation logic in this function - m_header.m_allocated -= old_block_size*Alignment; + m_header.m_allocated -= old_block_size*Alignment; prev->m_next = block; //Now use check and allocate to do the allocation logic preferred_size += BlockCtrlUnits; - std::size_t nunits = preferred_size < merged_size ? preferred_size : merged_size; + size_type nunits = preferred_size < merged_size ? preferred_size : merged_size; //This must success since nunits is less than merged_size! if(!this->priv_check_and_allocate (nunits, prev, block, received_size)){ @@ -973,24 +992,24 @@ inline bool simple_seq_fit_impl:: BOOST_ASSERT(0); return false; } - return true; + return true; } template inline void* simple_seq_fit_impl::priv_check_and_allocate - (std::size_t nunits + (size_type nunits ,typename simple_seq_fit_impl::block_ctrl* prev ,typename simple_seq_fit_impl::block_ctrl* block - ,std::size_t &received_size) + ,size_type &received_size) { - std::size_t upper_nunits = nunits + BlockCtrlUnits; + size_type upper_nunits = nunits + BlockCtrlUnits; bool found = false; if (block->m_size > upper_nunits){ - //This block is bigger than needed, split it in + //This block is bigger than needed, split it in //two blocks, the first's size will be "units" //the second's size will be "block->m_size-units" - std::size_t total_size = block->m_size; + size_type total_size = block->m_size; block->m_size = nunits; block_ctrl *new_block = reinterpret_cast @@ -1038,10 +1057,10 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) //Let's get free block list. List is always sorted //by memory address to allow block merging. - //Pointer next always points to the first + //Pointer next always points to the first //(lower address) block block_ctrl * prev = &m_header.m_root; - block_ctrl * pos = detail::get_pointer(m_header.m_root.m_next); + block_ctrl * pos = ipcdetail::to_raw_pointer(m_header.m_root.m_next); block_ctrl * block = reinterpret_cast(priv_get_block(addr)); //All used blocks' next is marked with 0 so check it @@ -1050,26 +1069,26 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) //Check if alignment and block size are right algo_impl_t::assert_alignment(addr); - std::size_t total_size = Alignment*block->m_size; + size_type total_size = Alignment*block->m_size; BOOST_ASSERT(m_header.m_allocated >= total_size); - + //Update used memory count - m_header.m_allocated -= total_size; + m_header.m_allocated -= total_size; //Let's find the previous and the next block of the block to deallocate //This ordering comparison must be done with original pointers //types since their mapping to raw pointers can be different //in each process - while((detail::get_pointer(pos) != &m_header.m_root) && (block > pos)){ + while((ipcdetail::to_raw_pointer(pos) != &m_header.m_root) && (block > pos)){ prev = pos; - pos = detail::get_pointer(pos->m_next); + pos = ipcdetail::to_raw_pointer(pos->m_next); } //Try to combine with upper block - char *block_char_ptr = reinterpret_cast(detail::get_pointer(block)); + char *block_char_ptr = reinterpret_cast(ipcdetail::to_raw_pointer(block)); - if ((block_char_ptr + Alignment*block->m_size) == - reinterpret_cast(detail::get_pointer(pos))){ + if ((block_char_ptr + Alignment*block->m_size) == + reinterpret_cast(ipcdetail::to_raw_pointer(pos))){ block->m_size += pos->m_size; block->m_next = pos->m_next; } @@ -1078,8 +1097,8 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) } //Try to combine with lower block - if ((reinterpret_cast(detail::get_pointer(prev)) - + Alignment*prev->m_size) == + if ((reinterpret_cast(ipcdetail::to_raw_pointer(prev)) + + Alignment*prev->m_size) == block_char_ptr){ @@ -1091,7 +1110,7 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) } } -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { diff --git a/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp b/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp index 1f982392b4..7ccc642e29 100644 --- a/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp +++ b/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,26 +18,27 @@ #include #include -#include +#include #include #include #include -#include +#include #include -#include #include #include #include #include #include #include +#include +#include #include #include +#include #include #include #include -#include #include #include @@ -46,6 +47,11 @@ #include +//#define BOOST_INTERPROCESS_RBTREE_BEST_FIT_ABI_V1_HPP +//to maintain ABI compatible with the original version +//ABI had to be updated to fix compatibility issues when +//sharing shared memory between 32 adn 64 bit processes. + //!\file //!Describes a best-fit algorithm based in an intrusive red-black tree used to allocate //!objects in shared memory. This class is intended as a base class for single segment @@ -64,24 +70,33 @@ class rbtree_best_fit rbtree_best_fit(); rbtree_best_fit(const rbtree_best_fit &); rbtree_best_fit &operator=(const rbtree_best_fit &); + + private: + struct block_ctrl; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type block_ctrl_ptr; + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type char_ptr; + /// @endcond public: - //!Shared interprocess_mutex family used for the rest of the Interprocess framework + //!Shared mutex family used for the rest of the Interprocess framework typedef MutexFamily mutex_family; //!Pointer type to be used with the rest of the Interprocess framework typedef VoidPointer void_pointer; - typedef boost::container::containers_detail:: + typedef boost::container::container_detail:: basic_multiallocation_chain multiallocation_chain; + typedef typename boost::intrusive::pointer_traits::difference_type difference_type; + typedef typename boost::make_unsigned::type size_type; + /// @cond private: - struct block_ctrl; - typedef typename boost:: - pointer_to_other::type block_ctrl_ptr; - typedef typename boost:: - pointer_to_other::type char_ptr; typedef typename bi::make_set_base_hook < bi::void_pointer @@ -90,12 +105,12 @@ class rbtree_best_fit struct SizeHolder { - //!This block's memory size (including block_ctrl + //!This block's memory size (including block_ctrl //!header) in Alignment units - std::size_t m_prev_size : sizeof(std::size_t)*CHAR_BIT; - std::size_t m_size : sizeof(std::size_t)*CHAR_BIT - 2; - std::size_t m_prev_allocated : 1; - std::size_t m_allocated : 1; + size_type m_prev_size : sizeof(size_type)*CHAR_BIT; + size_type m_size : sizeof(size_type)*CHAR_BIT - 2; + size_type m_prev_allocated : 1; + size_type m_allocated : 1; }; //!Block control structure @@ -113,77 +128,77 @@ class rbtree_best_fit struct size_block_ctrl_compare { - bool operator()(std::size_t size, const block_ctrl &block) const + bool operator()(size_type size, const block_ctrl &block) const { return size < block.m_size; } - bool operator()(const block_ctrl &block, std::size_t size) const - { return block.m_size < size; } + bool operator()(const block_ctrl &block, size_type size) const + { return block.m_size < size; } }; - //!Shared interprocess_mutex to protect memory allocate/deallocate - typedef typename MutexFamily::mutex_type interprocess_mutex; + //!Shared mutex to protect memory allocate/deallocate + typedef typename MutexFamily::mutex_type mutex_type; typedef typename bi::make_multiset >::type Imultiset; typedef typename Imultiset::iterator imultiset_iterator; //!This struct includes needed data and derives from - //!interprocess_mutex to allow EBO when using null interprocess_mutex - struct header_t : public interprocess_mutex + //!mutex_type to allow EBO when using null mutex_type + struct header_t : public mutex_type { Imultiset m_imultiset; //!The extra size required by the segment - std::size_t m_extra_hdr_bytes; + size_type m_extra_hdr_bytes; //!Allocated bytes for internal checking - std::size_t m_allocated; + size_type m_allocated; //!The size of the memory segment - std::size_t m_size; + size_type m_size; } m_header; - friend class detail::memory_algorithm_common; - - typedef detail::memory_algorithm_common algo_impl_t; + friend class ipcdetail::memory_algorithm_common; + + typedef ipcdetail::memory_algorithm_common algo_impl_t; public: /// @endcond - //!Constructor. "size" is the total size of the managed memory segment, + //!Constructor. "size" is the total size of the managed memory segment, //!"extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(rbtree_best_fit) //!offset that the allocator should not use at all. - rbtree_best_fit (std::size_t size, std::size_t extra_hdr_bytes); + rbtree_best_fit (size_type size, size_type extra_hdr_bytes); //!Destructor. ~rbtree_best_fit(); //!Obtains the minimum size needed by the algorithm - static std::size_t get_min_size (std::size_t extra_hdr_bytes); + static size_type get_min_size (size_type extra_hdr_bytes); //Functions for single segment management //!Allocates bytes, returns 0 if there is not more memory - void* allocate (std::size_t nbytes); + void* allocate (size_type nbytes); /// @cond //Experimental. Dont' use //!Multiple element allocation, same size - multiallocation_chain allocate_many(std::size_t elem_bytes, std::size_t num_elements) + multiallocation_chain allocate_many(size_type elem_bytes, size_type num_elements) { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- return algo_impl_t::allocate_many(this, elem_bytes, num_elements); } //!Multiple element allocation, different size - multiallocation_chain allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element) + multiallocation_chain allocate_many(const size_type *elem_sizes, size_type n_elements, size_type sizeof_element) { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- return algo_impl_t::allocate_many(this, elem_sizes, n_elements, sizeof_element); } @@ -197,10 +212,10 @@ class rbtree_best_fit void deallocate (void *addr); //!Returns the size of the memory segment - std::size_t get_size() const; + size_type get_size() const; //!Returns the number of free bytes of the segment - std::size_t get_free_memory() const; + size_type get_free_memory() const; //!Initializes to zero all the memory that's not in use. //!This function is normally used for security reasons. @@ -208,7 +223,7 @@ class rbtree_best_fit //!Increases managed memory in //!extra_size bytes more - void grow(std::size_t extra_size); + void grow(size_type extra_size); //!Decreases managed memory as much as possible void shrink_to_fit(); @@ -222,39 +237,43 @@ class rbtree_best_fit template std::pair - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, T *reuse_ptr = 0); std::pair - raw_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_object, - std::size_t preferred_object,std::size_t &received_object, - void *reuse_ptr = 0, std::size_t sizeof_object = 1); + raw_allocation_command (boost::interprocess::allocation_type command, size_type limit_object, + size_type preferred_object,size_type &received_object, + void *reuse_ptr = 0, size_type sizeof_object = 1); //!Returns the size of the buffer previously allocated pointed by ptr - std::size_t size(const void *ptr) const; + size_type size(const void *ptr) const; //!Allocates aligned bytes, returns 0 if there is not more memory. //!Alignment must be power of 2 - void* allocate_aligned (std::size_t nbytes, std::size_t alignment); + void* allocate_aligned (size_type nbytes, size_type alignment); /// @cond private: - static std::size_t priv_first_block_offset(const void *this_ptr, std::size_t extra_hdr_bytes); + static size_type priv_first_block_offset_from_this(const void *this_ptr, size_type extra_hdr_bytes); + + block_ctrl *priv_first_block(); + + block_ctrl *priv_end_block(); std::pair - priv_allocation_command(boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, - void *reuse_ptr, std::size_t sizeof_object); + priv_allocation_command(boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, + void *reuse_ptr, size_type sizeof_object); //!Real allocation algorithm with min allocation option std::pair priv_allocate(boost::interprocess::allocation_type command - ,std::size_t limit_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type limit_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr = 0 - ,std::size_t backwards_multiple = 1); + ,size_type backwards_multiple = 1); //!Obtains the block control structure of the user buffer static block_ctrl *priv_get_block(const void *ptr); @@ -264,33 +283,36 @@ class rbtree_best_fit //!Returns the number of total units that a user buffer //!of "userbytes" bytes really occupies (including header) - static std::size_t priv_get_total_units(std::size_t userbytes); + static size_type priv_get_total_units(size_type userbytes); //!Real expand function implementation bool priv_expand(void *ptr - ,const std::size_t min_size, const std::size_t preferred_size - ,std::size_t &received_size); + ,const size_type min_size, const size_type preferred_size + ,size_type &received_size); //!Real expand to both sides implementation void* priv_expand_both_sides(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr ,bool only_preferred_backwards - ,std::size_t backwards_multiple); - - //!Get poitner of the previous block (previous block must be free) - block_ctrl * priv_prev_block(block_ctrl *ptr); + ,size_type backwards_multiple); //!Returns true if the previous block is allocated bool priv_is_prev_allocated(block_ctrl *ptr); //!Get a pointer of the "end" block from the first block of the segment - block_ctrl * priv_end_block(block_ctrl *first_segment_block); + static block_ctrl * priv_end_block(block_ctrl *first_segment_block); + + //!Get a pointer of the "first" block from the end block of the segment + static block_ctrl * priv_first_block(block_ctrl *end_segment_block); + + //!Get poitner of the previous block (previous block must be free) + static block_ctrl * priv_prev_block(block_ctrl *ptr); //!Get the size in the tail of the previous block - block_ctrl * priv_next_block(block_ctrl *ptr); + static block_ctrl * priv_next_block(block_ctrl *ptr); //!Check if this block is free (not allocated) bool priv_is_allocated_block(block_ctrl *ptr); @@ -298,69 +320,138 @@ class rbtree_best_fit //!Marks the block as allocated void priv_mark_as_allocated_block(block_ctrl *ptr); + //!Marks the block as allocated + void priv_mark_new_allocated_block(block_ctrl *ptr) + { return priv_mark_as_allocated_block(ptr); } + //!Marks the block as allocated void priv_mark_as_free_block(block_ctrl *ptr); //!Checks if block has enough memory and splits/unlinks the block //!returning the address to the users - void* priv_check_and_allocate(std::size_t units + void* priv_check_and_allocate(size_type units ,block_ctrl* block - ,std::size_t &received_size); + ,size_type &received_size); //!Real deallocation algorithm void priv_deallocate(void *addr); //!Makes a new memory portion available for allocation - void priv_add_segment(void *addr, std::size_t size); - - void priv_mark_new_allocated_block(block_ctrl *block); + void priv_add_segment(void *addr, size_type size); public: - - static const std::size_t Alignment = !MemAlignment - ? detail::alignment_of::value - : MemAlignment + + static const size_type Alignment = !MemAlignment + ? size_type(::boost::alignment_of< ::boost::detail::max_align>::value) + : size_type(MemAlignment) ; private: //Due to embedded bits in size, Alignment must be at least 4 BOOST_STATIC_ASSERT((Alignment >= 4)); //Due to rbtree size optimizations, Alignment must have at least pointer alignment - BOOST_STATIC_ASSERT((Alignment >= detail::alignment_of::value)); - static const std::size_t AlignmentMask = (Alignment - 1); - static const std::size_t BlockCtrlBytes = detail::ct_rounded_size::value; - static const std::size_t BlockCtrlUnits = BlockCtrlBytes/Alignment; - static const std::size_t AllocatedCtrlBytes = detail::ct_rounded_size::value; - static const std::size_t AllocatedCtrlUnits = AllocatedCtrlBytes/Alignment; - static const std::size_t EndCtrlBlockBytes = detail::ct_rounded_size::value; - static const std::size_t EndCtrlBlockUnits = EndCtrlBlockBytes/Alignment; - static const std::size_t MinBlockUnits = BlockCtrlUnits; - static const std::size_t UsableByPreviousChunk = sizeof(std::size_t); + BOOST_STATIC_ASSERT((Alignment >= ::boost::alignment_of::value)); + static const size_type AlignmentMask = (Alignment - 1); + static const size_type BlockCtrlBytes = ipcdetail::ct_rounded_size::value; + static const size_type BlockCtrlUnits = BlockCtrlBytes/Alignment; + static const size_type AllocatedCtrlBytes = ipcdetail::ct_rounded_size::value; + static const size_type AllocatedCtrlUnits = AllocatedCtrlBytes/Alignment; + static const size_type EndCtrlBlockBytes = ipcdetail::ct_rounded_size::value; + static const size_type EndCtrlBlockUnits = EndCtrlBlockBytes/Alignment; + static const size_type MinBlockUnits = BlockCtrlUnits; + static const size_type UsableByPreviousChunk = sizeof(size_type); //Make sure the maximum alignment is power of two - BOOST_STATIC_ASSERT((0 == (Alignment & (Alignment - std::size_t(1u))))); + BOOST_STATIC_ASSERT((0 == (Alignment & (Alignment - size_type(1u))))); /// @endcond public: - static const std::size_t PayloadPerAllocation = AllocatedCtrlBytes - UsableByPreviousChunk; + static const size_type PayloadPerAllocation = AllocatedCtrlBytes - UsableByPreviousChunk; }; /// @cond template -inline std::size_t rbtree_best_fit - ::priv_first_block_offset(const void *this_ptr, std::size_t extra_hdr_bytes) +inline typename rbtree_best_fit::size_type + rbtree_best_fit + ::priv_first_block_offset_from_this(const void *this_ptr, size_type extra_hdr_bytes) { - std::size_t uint_this = (std::size_t)this_ptr; - std::size_t main_hdr_end = uint_this + sizeof(rbtree_best_fit) + extra_hdr_bytes; - std::size_t aligned_main_hdr_end = detail::get_rounded_size(main_hdr_end, Alignment); - std::size_t block1_off = aligned_main_hdr_end - uint_this; + size_type uint_this = (std::size_t)this_ptr; + size_type main_hdr_end = uint_this + sizeof(rbtree_best_fit) + extra_hdr_bytes; + size_type aligned_main_hdr_end = ipcdetail::get_rounded_size(main_hdr_end, Alignment); + size_type block1_off = aligned_main_hdr_end - uint_this; algo_impl_t::assert_alignment(aligned_main_hdr_end); algo_impl_t::assert_alignment(uint_this + block1_off); return block1_off; } +template +void rbtree_best_fit:: + priv_add_segment(void *addr, size_type size) +{ + //Check alignment + algo_impl_t::check_alignment(addr); + //Check size + BOOST_ASSERT(size >= (BlockCtrlBytes + EndCtrlBlockBytes)); + + //Initialize the first big block and the "end" node + block_ctrl *first_big_block = new(addr)block_ctrl; + first_big_block->m_size = size/Alignment - EndCtrlBlockUnits; + BOOST_ASSERT(first_big_block->m_size >= BlockCtrlUnits); + + //The "end" node is just a node of size 0 with the "end" bit set + block_ctrl *end_block = static_cast + (new (reinterpret_cast(addr) + first_big_block->m_size*Alignment)SizeHolder); + + //This will overwrite the prev part of the "end" node + priv_mark_as_free_block (first_big_block); + #ifdef BOOST_INTERPROCESS_RBTREE_BEST_FIT_ABI_V1_HPP + first_big_block->m_prev_size = end_block->m_size = + (reinterpret_cast(first_big_block) - reinterpret_cast(end_block))/Alignment; + #else + first_big_block->m_prev_size = end_block->m_size = + (reinterpret_cast(end_block) - reinterpret_cast(first_big_block))/Alignment; + #endif + end_block->m_allocated = 1; + first_big_block->m_prev_allocated = 1; + + BOOST_ASSERT(priv_next_block(first_big_block) == end_block); + BOOST_ASSERT(priv_prev_block(end_block) == first_big_block); + BOOST_ASSERT(priv_first_block() == first_big_block); + BOOST_ASSERT(priv_end_block() == end_block); + + //Some check to validate the algorithm, since it makes some assumptions + //to optimize the space wasted in bookkeeping: + + //Check that the sizes of the header are placed before the rbtree + BOOST_ASSERT(static_cast(static_cast(first_big_block)) + < static_cast(static_cast(first_big_block))); + //Insert it in the intrusive containers + m_header.m_imultiset.insert(*first_big_block); +} + +template +inline typename rbtree_best_fit::block_ctrl * + rbtree_best_fit + ::priv_first_block() +{ + size_type block1_off = priv_first_block_offset_from_this(this, m_header.m_extra_hdr_bytes); + return reinterpret_cast(reinterpret_cast(this) + block1_off); +} + +template +inline typename rbtree_best_fit::block_ctrl * + rbtree_best_fit + ::priv_end_block() +{ + size_type block1_off = priv_first_block_offset_from_this(this, m_header.m_extra_hdr_bytes); + const size_type original_first_block_size = m_header.m_size/Alignment*Alignment - block1_off/Alignment*Alignment - EndCtrlBlockBytes; + block_ctrl *end_block = reinterpret_cast + (reinterpret_cast(this) + block1_off + original_first_block_size); + return end_block; +} + template inline rbtree_best_fit:: - rbtree_best_fit(std::size_t size, std::size_t extra_hdr_bytes) + rbtree_best_fit(size_type size, size_type extra_hdr_bytes) { //Initialize the header m_header.m_allocated = 0; @@ -370,7 +461,7 @@ inline rbtree_best_fit:: //Now write calculate the offset of the first big block that will //cover the whole segment BOOST_ASSERT(get_min_size(extra_hdr_bytes) <= size); - std::size_t block1_off = priv_first_block_offset(this, extra_hdr_bytes); + size_type block1_off = priv_first_block_offset_from_this(this, extra_hdr_bytes); priv_add_segment(reinterpret_cast(this) + block1_off, size - block1_off); } @@ -383,49 +474,51 @@ inline rbtree_best_fit::~rbtree_best_fit } template -void rbtree_best_fit::grow(std::size_t extra_size) +void rbtree_best_fit::grow(size_type extra_size) { //Get the address of the first block - std::size_t block1_off = - priv_first_block_offset(this, m_header.m_extra_hdr_bytes); - - block_ctrl *first_block = reinterpret_cast - (reinterpret_cast(this) + block1_off); - block_ctrl *old_end_block = priv_end_block(first_block); - BOOST_ASSERT(priv_is_allocated_block(old_end_block)); - std::size_t old_border_offset = (reinterpret_cast(old_end_block) - + block_ctrl *first_block = priv_first_block(); + block_ctrl *old_end_block = priv_end_block(); + size_type old_border_offset = (size_type)(reinterpret_cast(old_end_block) - reinterpret_cast(this)) + EndCtrlBlockBytes; //Update managed buffer's size m_header.m_size += extra_size; //We need at least MinBlockUnits blocks to create a new block -// BOOST_ASSERT((m_header.m_size - old_end) >= MinBlockUnits); if((m_header.m_size - old_border_offset) < MinBlockUnits){ return; } //Now create a new block between the old end and the new end - std::size_t align_offset = (m_header.m_size - old_border_offset)/Alignment; + size_type align_offset = (m_header.m_size - old_border_offset)/Alignment; block_ctrl *new_end_block = reinterpret_cast (reinterpret_cast(old_end_block) + align_offset*Alignment); - new_end_block->m_size = (reinterpret_cast(first_block) - + + //the last and first block are special: + //new_end_block->m_size & first_block->m_prev_size store the absolute value + //between them + new_end_block->m_allocated = 1; + #ifdef BOOST_INTERPROCESS_RBTREE_BEST_FIT_ABI_V1_HPP + new_end_block->m_size = (reinterpret_cast(first_block) - reinterpret_cast(new_end_block))/Alignment; + #else + new_end_block->m_size = (reinterpret_cast(new_end_block) - + reinterpret_cast(first_block))/Alignment; + #endif first_block->m_prev_size = new_end_block->m_size; - BOOST_ASSERT(first_block == priv_next_block(new_end_block)); - priv_mark_new_allocated_block(new_end_block); - - BOOST_ASSERT(new_end_block == priv_end_block(first_block)); + first_block->m_prev_allocated = 1; + BOOST_ASSERT(new_end_block == priv_end_block()); //The old end block is the new block block_ctrl *new_block = old_end_block; - new_block->m_size = (reinterpret_cast(new_end_block) - + new_block->m_size = (reinterpret_cast(new_end_block) - reinterpret_cast(new_block))/Alignment; BOOST_ASSERT(new_block->m_size >= BlockCtrlUnits); - priv_mark_new_allocated_block(new_block); + priv_mark_as_allocated_block(new_block); BOOST_ASSERT(priv_next_block(new_block) == new_end_block); - m_header.m_allocated += new_block->m_size*Alignment; + m_header.m_allocated += (size_type)new_block->m_size*Alignment; //Now deallocate the newly created block this->priv_deallocate(priv_get_user_buffer(new_block)); @@ -433,30 +526,27 @@ void rbtree_best_fit::grow(std::size_t e template void rbtree_best_fit::shrink_to_fit() -{ +{ //Get the address of the first block - std::size_t block1_off = - priv_first_block_offset(this, m_header.m_extra_hdr_bytes); - - block_ctrl *first_block = reinterpret_cast - (reinterpret_cast(this) + block1_off); + block_ctrl *first_block = priv_first_block(); algo_impl_t::assert_alignment(first_block); - block_ctrl *old_end_block = priv_end_block(first_block); + //block_ctrl *old_end_block = priv_end_block(first_block); + block_ctrl *old_end_block = priv_end_block(); algo_impl_t::assert_alignment(old_end_block); - BOOST_ASSERT(priv_is_allocated_block(old_end_block)); - - algo_impl_t::assert_alignment(old_end_block); - - std::size_t old_end_block_size = old_end_block->m_size; + size_type old_end_block_size = old_end_block->m_size; void *unique_buffer = 0; block_ctrl *last_block; + //Check if no memory is allocated between the first and last block if(priv_next_block(first_block) == old_end_block){ - std::size_t ignore; + //If so check if we can allocate memory + size_type ignore; unique_buffer = priv_allocate(boost::interprocess::allocate_new, 0, 0, ignore).first; + //If not, return, we can't shrink if(!unique_buffer) return; + //If we can, mark the position just after the new allocation as the new end algo_impl_t::assert_alignment(unique_buffer); block_ctrl *unique_block = priv_get_block(unique_buffer); BOOST_ASSERT(priv_is_allocated_block(unique_block)); @@ -466,100 +556,65 @@ void rbtree_best_fit::shrink_to_fit() algo_impl_t::assert_alignment(last_block); } else{ + //If memory is allocated, check if the last block is allocated if(priv_is_prev_allocated(old_end_block)) return; + //If not, mark last block after the free block last_block = priv_prev_block(old_end_block); } - std::size_t last_block_size = last_block->m_size; + size_type last_block_size = last_block->m_size; //Erase block from the free tree, since we will erase it m_header.m_imultiset.erase(Imultiset::s_iterator_to(*last_block)); - std::size_t shrunk_border_offset = (reinterpret_cast(last_block) - + size_type shrunk_border_offset = (size_type)(reinterpret_cast(last_block) - reinterpret_cast(this)) + EndCtrlBlockBytes; - + block_ctrl *new_end_block = last_block; algo_impl_t::assert_alignment(new_end_block); - new_end_block->m_size = old_end_block_size + last_block_size; - priv_mark_as_allocated_block(new_end_block); - //Although the first block might be allocated, we'll - //store the offset to the end block since in the previous - //offset can't be overwritten by a previous block - first_block->m_prev_size = new_end_block->m_size; - BOOST_ASSERT(priv_end_block(first_block) == new_end_block); + //Write new end block attributes + #ifdef BOOST_INTERPROCESS_RBTREE_BEST_FIT_ABI_V1_HPP + new_end_block->m_size = first_block->m_prev_size = + (reinterpret_cast(first_block) - reinterpret_cast(new_end_block))/Alignment; + #else + new_end_block->m_size = first_block->m_prev_size = + (reinterpret_cast(new_end_block) - reinterpret_cast(first_block))/Alignment; + #endif + + new_end_block->m_allocated = 1; + (void)last_block_size; + (void)old_end_block_size; + BOOST_ASSERT(new_end_block->m_size == (old_end_block_size - last_block_size)); //Update managed buffer's size m_header.m_size = shrunk_border_offset; + BOOST_ASSERT(priv_end_block() == new_end_block); if(unique_buffer) priv_deallocate(unique_buffer); } template -void rbtree_best_fit:: - priv_add_segment(void *addr, std::size_t size) -{ - //Check alignment - algo_impl_t::check_alignment(addr); - //Check size - BOOST_ASSERT(size >= (BlockCtrlBytes + EndCtrlBlockBytes)); - - //Initialize the first big block and the "end" node - block_ctrl *first_big_block = new(addr)block_ctrl; - first_big_block->m_size = size/Alignment - EndCtrlBlockUnits; - BOOST_ASSERT(first_big_block->m_size >= BlockCtrlUnits); - - //The "end" node is just a node of size 0 with the "end" bit set - block_ctrl *end_block = static_cast - (new (reinterpret_cast(addr) + first_big_block->m_size*Alignment)SizeHolder); - - //This will overwrite the prev part of the "end" node - priv_mark_as_free_block (first_big_block); - first_big_block->m_prev_size = end_block->m_size = - (reinterpret_cast(first_big_block) - reinterpret_cast(end_block))/Alignment; - priv_mark_as_allocated_block(end_block); - - BOOST_ASSERT(priv_next_block(first_big_block) == end_block); - BOOST_ASSERT(priv_next_block(end_block) == first_big_block); - BOOST_ASSERT(priv_end_block(first_big_block) == end_block); - BOOST_ASSERT(priv_prev_block(end_block) == first_big_block); - - //Some check to validate the algorithm, since it makes some assumptions - //to optimize the space wasted in bookkeeping: - - //Check that the sizes of the header are placed before the rbtree - BOOST_ASSERT(static_cast(static_cast(first_big_block)) - < static_cast(static_cast(first_big_block))); - - //Check that the alignment is power of two (we use some optimizations based on this) - //BOOST_ASSERT((Alignment % 2) == 0); - //Insert it in the intrusive containers - m_header.m_imultiset.insert(*first_big_block); -} - -template -inline void rbtree_best_fit:: - priv_mark_new_allocated_block(block_ctrl *new_block) -{ priv_mark_as_allocated_block(new_block); } - -template -inline std::size_t rbtree_best_fit::get_size() const +inline typename rbtree_best_fit::size_type +rbtree_best_fit::get_size() const { return m_header.m_size; } template -inline std::size_t rbtree_best_fit::get_free_memory() const +typename rbtree_best_fit::size_type +rbtree_best_fit::get_free_memory() const { - return m_header.m_size - m_header.m_allocated - - priv_first_block_offset(this, m_header.m_extra_hdr_bytes); + return m_header.m_size - m_header.m_allocated - + priv_first_block_offset_from_this(this, m_header.m_extra_hdr_bytes); } template -inline std::size_t rbtree_best_fit:: - get_min_size (std::size_t extra_hdr_bytes) +typename rbtree_best_fit::size_type +rbtree_best_fit:: + get_min_size (size_type extra_hdr_bytes) { return (algo_impl_t::ceil_units(sizeof(rbtree_best_fit)) + - algo_impl_t::ceil_units(extra_hdr_bytes) + + algo_impl_t::ceil_units(extra_hdr_bytes) + MinBlockUnits + EndCtrlBlockUnits)*Alignment; } @@ -568,15 +623,15 @@ inline bool rbtree_best_fit:: all_memory_deallocated() { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- - std::size_t block1_off = - priv_first_block_offset(this, m_header.m_extra_hdr_bytes); + size_type block1_off = + priv_first_block_offset_from_this(this, m_header.m_extra_hdr_bytes); - return m_header.m_allocated == 0 && + return m_header.m_allocated == 0 && m_header.m_imultiset.begin() != m_header.m_imultiset.end() && (++m_header.m_imultiset.begin()) == m_header.m_imultiset.end() - && m_header.m_imultiset.begin()->m_size == + && m_header.m_imultiset.begin()->m_size == (m_header.m_size - block1_off - EndCtrlBlockBytes)/Alignment; } @@ -585,15 +640,15 @@ bool rbtree_best_fit:: check_sanity() { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- imultiset_iterator ib(m_header.m_imultiset.begin()), ie(m_header.m_imultiset.end()); - std::size_t free_memory = 0; + size_type free_memory = 0; //Iterate through all blocks obtaining their size for(; ib != ie; ++ib){ - free_memory += ib->m_size*Alignment; + free_memory += (size_type)ib->m_size*Alignment; algo_impl_t::assert_alignment(&*ib); if(!algo_impl_t::check_alignment(&*ib)) return false; @@ -604,8 +659,8 @@ bool rbtree_best_fit:: return false; } - std::size_t block1_off = - priv_first_block_offset(this, m_header.m_extra_hdr_bytes); + size_type block1_off = + priv_first_block_offset_from_this(this, m_header.m_extra_hdr_bytes); //Check free bytes are less than size if(free_memory > (m_header.m_size - block1_off)){ @@ -616,45 +671,45 @@ bool rbtree_best_fit:: template inline void* rbtree_best_fit:: - allocate(std::size_t nbytes) -{ + allocate(size_type nbytes) +{ //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- - std::size_t ignore; + size_type ignore; void * ret = priv_allocate(boost::interprocess::allocate_new, nbytes, nbytes, ignore).first; return ret; } template inline void* rbtree_best_fit:: - allocate_aligned(std::size_t nbytes, std::size_t alignment) -{ + allocate_aligned(size_type nbytes, size_type alignment) +{ //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- - return algo_impl_t::allocate_aligned(this, nbytes, alignment); + return algo_impl_t::allocate_aligned(this, nbytes, alignment); } template template inline std::pair rbtree_best_fit:: - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, T *reuse_ptr) { std::pair ret = priv_allocation_command (command, limit_size, preferred_size, received_size, static_cast(reuse_ptr), sizeof(T)); - BOOST_ASSERT(0 == ((std::size_t)ret.first % detail::alignment_of::value)); + BOOST_ASSERT(0 == ((std::size_t)ret.first % ::boost::alignment_of::value)); return std::pair(static_cast(ret.first), ret.second); } template inline std::pair rbtree_best_fit:: - raw_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_objects, - std::size_t preferred_objects,std::size_t &received_objects, - void *reuse_ptr, std::size_t sizeof_object) + raw_allocation_command (boost::interprocess::allocation_type command, size_type limit_objects, + size_type preferred_objects,size_type &received_objects, + void *reuse_ptr, size_type sizeof_object) { if(!sizeof_object) return std::pair(static_cast(0), false); @@ -672,21 +727,21 @@ inline std::pair rbtree_best_fit inline std::pair rbtree_best_fit:: - priv_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, - void *reuse_ptr, std::size_t sizeof_object) + priv_allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, + void *reuse_ptr, size_type sizeof_object) { std::pair ret; - std::size_t max_count = m_header.m_size/sizeof_object; + size_type max_count = m_header.m_size/sizeof_object; if(limit_size > max_count || preferred_size > max_count){ ret.first = 0; return ret; } - std::size_t l_size = limit_size*sizeof_object; - std::size_t p_size = preferred_size*sizeof_object; - std::size_t r_size; + size_type l_size = limit_size*sizeof_object; + size_type p_size = preferred_size*sizeof_object; + size_type r_size; { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- ret = priv_allocate(command, l_size, p_size, r_size, reuse_ptr, sizeof_object); } @@ -695,20 +750,21 @@ inline std::pair rbtree_best_fit -inline std::size_t rbtree_best_fit:: +typename rbtree_best_fit::size_type +rbtree_best_fit:: size(const void *ptr) const { //We need no synchronization since this block's size is not going //to be modified by anyone else //Obtain the real size of the block - return (priv_get_block(ptr)->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; + return ((size_type)priv_get_block(ptr)->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; } template inline void rbtree_best_fit::zero_free_memory() { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- imultiset_iterator ib(m_header.m_imultiset.begin()), ie(m_header.m_imultiset.end()); @@ -716,7 +772,7 @@ inline void rbtree_best_fit::zero_free_m while(ib != ie){ //Just clear user the memory part reserved for the user volatile char *ptr = reinterpret_cast(&*ib) + BlockCtrlBytes; - std::size_t s = ib->m_size*Alignment - BlockCtrlBytes; + size_type s = (size_type)ib->m_size*Alignment - BlockCtrlBytes; while(s--){ *ptr++ = 0; } @@ -732,12 +788,12 @@ inline void rbtree_best_fit::zero_free_m template void* rbtree_best_fit:: priv_expand_both_sides(boost::interprocess::allocation_type command - ,std::size_t min_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type min_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr ,bool only_preferred_backwards - ,std::size_t backwards_multiple) + ,size_type backwards_multiple) { algo_impl_t::assert_alignment(reuse_ptr); if(command & boost::interprocess::expand_fwd){ @@ -759,7 +815,7 @@ void* rbtree_best_fit:: //Obtain the real size of the block block_ctrl *reuse = priv_get_block(reuse_ptr); - //Sanity check + //Sanity check //BOOST_ASSERT(reuse->m_size == priv_tail_size(reuse)); algo_impl_t::assert_alignment(reuse); @@ -777,8 +833,8 @@ void* rbtree_best_fit:: BOOST_ASSERT(prev_block->m_size == reuse->m_prev_size); algo_impl_t::assert_alignment(prev_block); - std::size_t needs_backwards_aligned; - std::size_t lcm; + size_type needs_backwards_aligned; + size_type lcm; if(!algo_impl_t::calculate_lcm_and_needs_backwards_lcmed ( backwards_multiple , received_size @@ -788,10 +844,10 @@ void* rbtree_best_fit:: } //Check if previous block has enough size - if(std::size_t(prev_block->m_size*Alignment) >= needs_backwards_aligned){ + if(size_type(prev_block->m_size*Alignment) >= needs_backwards_aligned){ //Now take all next space. This will succeed if(command & boost::interprocess::expand_fwd){ - std::size_t received_size2; + size_type received_size2; if(!priv_expand(reuse_ptr, received_size, received_size, received_size2)){ BOOST_ASSERT(0); } @@ -803,12 +859,12 @@ void* rbtree_best_fit:: (reinterpret_cast(reuse) - needs_backwards_aligned); //Free old previous buffer - new_block->m_size = + new_block->m_size = AllocatedCtrlUnits + (needs_backwards_aligned + (received_size - UsableByPreviousChunk))/Alignment; BOOST_ASSERT(new_block->m_size >= BlockCtrlUnits); - priv_mark_new_allocated_block(new_block); + priv_mark_as_allocated_block(new_block); - prev_block->m_size = (reinterpret_cast(new_block) - + prev_block->m_size = (reinterpret_cast(new_block) - reinterpret_cast(prev_block))/Alignment; BOOST_ASSERT(prev_block->m_size >= BlockCtrlUnits); priv_mark_as_free_block(prev_block); @@ -819,7 +875,7 @@ void* rbtree_best_fit:: { imultiset_iterator prev_block_it(Imultiset::s_iterator_to(*prev_block)); imultiset_iterator was_smaller_it(prev_block_it); - if(prev_block_it != m_header.m_imultiset.begin() && + if(prev_block_it != m_header.m_imultiset.begin() && (--(was_smaller_it = prev_block_it))->m_size > prev_block->m_size){ m_header.m_imultiset.erase(prev_block_it); m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *prev_block); @@ -828,7 +884,7 @@ void* rbtree_best_fit:: received_size = needs_backwards_aligned + received_size; m_header.m_allocated += needs_backwards_aligned; - + //Check alignment algo_impl_t::assert_alignment(new_block); @@ -849,13 +905,13 @@ void* rbtree_best_fit:: //Just merge the whole previous block //prev_block->m_size*Alignment is multiple of lcm (and backwards_multiple) - received_size = received_size + prev_block->m_size*Alignment; + received_size = received_size + (size_type)prev_block->m_size*Alignment; - m_header.m_allocated += prev_block->m_size*Alignment; + m_header.m_allocated += (size_type)prev_block->m_size*Alignment; //Now update sizes prev_block->m_size = prev_block->m_size + reuse->m_size; BOOST_ASSERT(prev_block->m_size >= BlockCtrlUnits); - priv_mark_new_allocated_block(prev_block); + priv_mark_as_allocated_block(prev_block); //If the backwards expansion has remaining bytes in the //first bytes, fill them with a pattern @@ -877,25 +933,25 @@ inline void rbtree_best_fit:: deallocate_many(typename rbtree_best_fit::multiallocation_chain chain) { //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- - algo_impl_t::deallocate_many(this, boost::interprocess::move(chain)); + algo_impl_t::deallocate_many(this, boost::move(chain)); } template std::pair rbtree_best_fit:: priv_allocate(boost::interprocess::allocation_type command - ,std::size_t limit_size - ,std::size_t preferred_size - ,std::size_t &received_size + ,size_type limit_size + ,size_type preferred_size + ,size_type &received_size ,void *reuse_ptr - ,std::size_t backwards_multiple) + ,size_type backwards_multiple) { //Remove me. Forbid backwards allocation //command &= (~boost::interprocess::expand_bwd); if(command & boost::interprocess::shrink_in_place){ - bool success = + bool success = algo_impl_t::shrink(this, reuse_ptr, limit_size, preferred_size, received_size); return std::pair ((success ? reuse_ptr : 0), true); } @@ -907,10 +963,10 @@ std::pair rbtree_best_fit: return return_type(static_cast(0), false); //Number of units to request (including block_ctrl header) - std::size_t preferred_units = priv_get_total_units(preferred_size); + size_type preferred_units = priv_get_total_units(preferred_size); //Number of units to request (including block_ctrl header) - std::size_t limit_units = priv_get_total_units(limit_size); + size_type limit_units = priv_get_total_units(limit_size); //Expand in place if(reuse_ptr && (command & (boost::interprocess::expand_fwd | boost::interprocess::expand_bwd))){ @@ -926,13 +982,13 @@ std::pair rbtree_best_fit: if(it != m_header.m_imultiset.end()){ return return_type(this->priv_check_and_allocate - (preferred_units, detail::get_pointer(&*it), received_size), false); + (preferred_units, ipcdetail::to_raw_pointer(&*it), received_size), false); } if(it != m_header.m_imultiset.begin()&& (--it)->m_size >= limit_units){ return return_type(this->priv_check_and_allocate - (it->m_size, detail::get_pointer(&*it), received_size), false); + (it->m_size, ipcdetail::to_raw_pointer(&*it), received_size), false); } } @@ -963,13 +1019,13 @@ void *rbtree_best_fit:: { return const_cast(reinterpret_cast(block) + AllocatedCtrlBytes); } template -inline -std::size_t rbtree_best_fit:: - priv_get_total_units(std::size_t userbytes) +inline typename rbtree_best_fit::size_type +rbtree_best_fit:: + priv_get_total_units(size_type userbytes) { if(userbytes < UsableByPreviousChunk) userbytes = UsableByPreviousChunk; - std::size_t units = detail::get_rounded_size(userbytes - UsableByPreviousChunk, Alignment)/Alignment + AllocatedCtrlUnits; + size_type units = ipcdetail::get_rounded_size(userbytes - UsableByPreviousChunk, Alignment)/Alignment + AllocatedCtrlUnits; if(units < BlockCtrlUnits) units = BlockCtrlUnits; return units; } @@ -977,26 +1033,26 @@ std::size_t rbtree_best_fit:: template bool rbtree_best_fit:: priv_expand (void *ptr - ,const std::size_t min_size - ,const std::size_t preferred_size - ,std::size_t &received_size) + ,const size_type min_size + ,const size_type preferred_size + ,size_type &received_size) { //Obtain the real size of the block block_ctrl *block = priv_get_block(ptr); - std::size_t old_block_units = block->m_size; + size_type old_block_units = block->m_size; //The block must be marked as allocated and the sizes must be equal BOOST_ASSERT(priv_is_allocated_block(block)); //BOOST_ASSERT(old_block_units == priv_tail_size(block)); - + //Put this to a safe value received_size = (old_block_units - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; if(received_size >= preferred_size || received_size >= min_size) return true; //Now translate it to Alignment units - const std::size_t min_user_units = algo_impl_t::ceil_units(min_size - UsableByPreviousChunk); - const std::size_t preferred_user_units = algo_impl_t::ceil_units(preferred_size - UsableByPreviousChunk); + const size_type min_user_units = algo_impl_t::ceil_units(min_size - UsableByPreviousChunk); + const size_type preferred_user_units = algo_impl_t::ceil_units(preferred_size - UsableByPreviousChunk); //Some parameter checks BOOST_ASSERT(min_user_units <= preferred_user_units); @@ -1009,10 +1065,10 @@ bool rbtree_best_fit:: algo_impl_t::assert_alignment(next_block); //Is "block" + "next_block" big enough? - const std::size_t merged_units = old_block_units + next_block->m_size; + const size_type merged_units = old_block_units + (size_type)next_block->m_size; //Now get the expansion size - const std::size_t merged_user_units = merged_units - AllocatedCtrlUnits; + const size_type merged_user_units = merged_units - AllocatedCtrlUnits; if(merged_user_units < min_user_units){ received_size = merged_units*Alignment - UsableByPreviousChunk; @@ -1020,19 +1076,19 @@ bool rbtree_best_fit:: } //Now get the maximum size the user can allocate - std::size_t intended_user_units = (merged_user_units < preferred_user_units) ? + size_type intended_user_units = (merged_user_units < preferred_user_units) ? merged_user_units : preferred_user_units; //These are total units of the merged block (supposing the next block can be split) - const std::size_t intended_units = AllocatedCtrlUnits + intended_user_units; + const size_type intended_units = AllocatedCtrlUnits + intended_user_units; //Check if we can split the next one in two parts if((merged_units - intended_units) >= BlockCtrlUnits){ - //This block is bigger than needed, split it in + //This block is bigger than needed, split it in //two blocks, the first one will be merged and //the second's size will be the remaining space BOOST_ASSERT(next_block->m_size == priv_next_block(next_block)->m_prev_size); - const std::size_t rem_units = merged_units - intended_units; + const size_type rem_units = merged_units - intended_units; //Check if we we need to update the old next block in the free blocks tree //If the new size fulfills tree invariants, we just need to replace the node @@ -1042,9 +1098,9 @@ bool rbtree_best_fit:: //overwrite the tree hook of the old next block. So we first erase the //old if needed and we'll insert the new one after creating the new next imultiset_iterator old_next_block_it(Imultiset::s_iterator_to(*next_block)); - const bool size_invariants_broken = + const bool size_invariants_broken = (next_block->m_size - rem_units ) < BlockCtrlUnits || - (old_next_block_it != m_header.m_imultiset.begin() && + (old_next_block_it != m_header.m_imultiset.begin() && (--imultiset_iterator(old_next_block_it))->m_size > rem_units); if(size_invariants_broken){ m_header.m_imultiset.erase(old_next_block_it); @@ -1079,7 +1135,7 @@ bool rbtree_best_fit:: m_header.m_allocated += (merged_units - old_block_units)*Alignment; } priv_mark_as_allocated_block(block); - received_size = (block->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; + received_size = ((size_type)block->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; return true; } @@ -1093,35 +1149,43 @@ typename rbtree_best_fit::block_ctrl * (reinterpret_cast(ptr) - ptr->m_prev_size*Alignment); } -template inline -bool rbtree_best_fit::priv_is_prev_allocated - (typename rbtree_best_fit::block_ctrl *ptr) -{ - if(ptr->m_prev_allocated){ - return true; - } - else{ - block_ctrl *prev = priv_prev_block(ptr); - (void)prev; - BOOST_ASSERT(!priv_is_allocated_block(prev)); - return false; - } -} + template inline typename rbtree_best_fit::block_ctrl * rbtree_best_fit::priv_end_block (typename rbtree_best_fit::block_ctrl *first_segment_block) { + //The first block's logic is different from the rest of blocks: stores in m_prev_size the absolute + //distance with the end block BOOST_ASSERT(first_segment_block->m_prev_allocated); block_ctrl *end_block = reinterpret_cast - (reinterpret_cast(first_segment_block) - first_segment_block->m_prev_size*Alignment); + (reinterpret_cast(first_segment_block) + first_segment_block->m_prev_size*Alignment); (void)end_block; - BOOST_ASSERT(priv_is_allocated_block(end_block)); + BOOST_ASSERT(end_block->m_allocated == 1); + BOOST_ASSERT(end_block->m_size == first_segment_block->m_prev_size); BOOST_ASSERT(end_block > first_segment_block); return end_block; } +template inline +typename rbtree_best_fit::block_ctrl * + rbtree_best_fit::priv_first_block + (typename rbtree_best_fit::block_ctrl *end_segment_block) +{ + //The first block's logic is different from the rest of blocks: stores in m_prev_size the absolute + //distance with the end block + BOOST_ASSERT(end_segment_block->m_allocated); + block_ctrl *first_block = reinterpret_cast + (reinterpret_cast(end_segment_block) - end_segment_block->m_size*Alignment); + (void)first_block; + BOOST_ASSERT(first_block->m_prev_allocated == 1); + BOOST_ASSERT(first_block->m_prev_size == end_segment_block->m_size); + BOOST_ASSERT(end_segment_block > first_block); + return first_block; +} + + template inline typename rbtree_best_fit::block_ctrl * rbtree_best_fit::priv_next_block @@ -1136,19 +1200,47 @@ bool rbtree_best_fit::priv_is_allocated_ (typename rbtree_best_fit::block_ctrl *block) { bool allocated = block->m_allocated != 0; - block_ctrl *next_block = reinterpret_cast - (reinterpret_cast(block) + block->m_size*Alignment); - bool next_block_prev_allocated = next_block->m_prev_allocated != 0; - (void)next_block_prev_allocated; - BOOST_ASSERT(allocated == next_block_prev_allocated); + #ifndef NDEBUG + if(block != priv_end_block()){ + block_ctrl *next_block = reinterpret_cast + (reinterpret_cast(block) + block->m_size*Alignment); + bool next_block_prev_allocated = next_block->m_prev_allocated != 0; + (void)next_block_prev_allocated; + BOOST_ASSERT(allocated == next_block_prev_allocated); + } + else{ + block = block; + } + #endif return allocated; } +template inline +bool rbtree_best_fit::priv_is_prev_allocated + (typename rbtree_best_fit::block_ctrl *block) +{ + if(block->m_prev_allocated){ + return true; + } + else{ + #ifndef NDEBUG + if(block != priv_first_block()){ + block_ctrl *prev = priv_prev_block(block); + (void)prev; + BOOST_ASSERT(!prev->m_allocated); + } + else{ + block = block; + } + #endif + return false; + } +} + template inline void rbtree_best_fit::priv_mark_as_allocated_block (typename rbtree_best_fit::block_ctrl *block) { - //BOOST_ASSERT(!priv_is_allocated_block(block)); block->m_allocated = 1; reinterpret_cast (reinterpret_cast(block)+ block->m_size*Alignment)->m_prev_allocated = 1; @@ -1159,27 +1251,26 @@ void rbtree_best_fit::priv_mark_as_free_ (typename rbtree_best_fit::block_ctrl *block) { block->m_allocated = 0; - reinterpret_cast - (reinterpret_cast(block) + block->m_size*Alignment)->m_prev_allocated = 0; - //BOOST_ASSERT(!priv_is_allocated_block(ptr)); - priv_next_block(block)->m_prev_size = block->m_size; + block_ctrl *next_block = priv_next_block(block); + next_block->m_prev_allocated = 0; + next_block->m_prev_size = block->m_size; } template inline void* rbtree_best_fit::priv_check_and_allocate - (std::size_t nunits + (size_type nunits ,typename rbtree_best_fit::block_ctrl* block - ,std::size_t &received_size) + ,size_type &received_size) { - std::size_t upper_nunits = nunits + BlockCtrlUnits; + size_type upper_nunits = nunits + BlockCtrlUnits; imultiset_iterator it_old = Imultiset::s_iterator_to(*block); algo_impl_t::assert_alignment(block); if (block->m_size >= upper_nunits){ - //This block is bigger than needed, split it in + //This block is bigger than needed, split it in //two blocks, the first's size will be "units" and //the second's size "block->m_size-units" - std::size_t block_old_size = block->m_size; + size_type block_old_size = block->m_size; block->m_size = nunits; BOOST_ASSERT(block->m_size >= BlockCtrlUnits); @@ -1207,7 +1298,7 @@ void* rbtree_best_fit::priv_check_and_al m_header.m_imultiset.erase(it_old); m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *rem_block); } - + } else if (block->m_size >= nunits){ m_header.m_imultiset.erase(it_old); @@ -1218,8 +1309,8 @@ void* rbtree_best_fit::priv_check_and_al } //We need block_ctrl for deallocation stuff, so //return memory user can overwrite - m_header.m_allocated += block->m_size*Alignment; - received_size = (block->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; + m_header.m_allocated += (size_type)block->m_size*Alignment; + received_size = ((size_type)block->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; //Mark the block as allocated priv_mark_as_allocated_block(block); @@ -1227,15 +1318,11 @@ void* rbtree_best_fit::priv_check_and_al //Clear the memory occupied by the tree hook, since this won't be //cleared with zero_free_memory TreeHook *t = static_cast(block); - //Just clear the memory part reserved for the user + //Just clear the memory part reserved for the user std::size_t tree_hook_offset_in_block = (char*)t - (char*)block; - //volatile char *ptr = + //volatile char *ptr = char *ptr = reinterpret_cast(block)+tree_hook_offset_in_block; const std::size_t s = BlockCtrlBytes - tree_hook_offset_in_block; - /* - while(s--){ - *ptr++ = 0; - }*/ std::memset(ptr, 0, s); this->priv_next_block(block)->m_prev_size = 0; return priv_get_user_buffer(block); @@ -1246,7 +1333,7 @@ void rbtree_best_fit::deallocate(void* a { if(!addr) return; //----------------------- - boost::interprocess::scoped_lock guard(m_header); + boost::interprocess::scoped_lock guard(m_header); //----------------------- return this->priv_deallocate(addr); } @@ -1257,7 +1344,7 @@ void rbtree_best_fit::priv_deallocate(vo if(!addr) return; block_ctrl *block = priv_get_block(addr); - + //The blocks must be marked as allocated and the sizes must be equal BOOST_ASSERT(priv_is_allocated_block(block)); // BOOST_ASSERT(block->m_size == priv_tail_size(block)); @@ -1265,7 +1352,7 @@ void rbtree_best_fit::priv_deallocate(vo //Check if alignment and block size are right algo_impl_t::assert_alignment(addr); - std::size_t block_old_size = Alignment*block->m_size; + size_type block_old_size = Alignment*(size_type)block->m_size; BOOST_ASSERT(m_header.m_allocated >= block_old_size); //Update used memory count diff --git a/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp b/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp index fc8239cf63..1085ca00ac 100644 --- a/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp +++ b/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -31,18 +31,20 @@ namespace interprocess { //!This class implements the simple sequential fit algorithm with a simply //!linked list of free buffers. template -class simple_seq_fit - : public detail::simple_seq_fit_impl +class simple_seq_fit + : public ipcdetail::simple_seq_fit_impl { /// @cond - typedef detail::simple_seq_fit_impl base_t; + typedef ipcdetail::simple_seq_fit_impl base_t; /// @endcond public: - //!Constructor. "size" is the total size of the managed memory segment, + typedef typename base_t::size_type size_type; + + //!Constructor. "size" is the total size of the managed memory segment, //!"extra_hdr_bytes" indicates the extra bytes beginning in the sizeof(simple_seq_fit) //!offset that the allocator should not use at all.*/ - simple_seq_fit (std::size_t size, std::size_t extra_hdr_bytes) + simple_seq_fit (size_type size, size_type extra_hdr_bytes) : base_t(size, extra_hdr_bytes){} }; diff --git a/3party/boost/boost/interprocess/offset_ptr.hpp b/3party/boost/boost/interprocess/offset_ptr.hpp index 4efbea086d..ac8da2c292 100644 --- a/3party/boost/boost/interprocess/offset_ptr.hpp +++ b/3party/boost/boost/interprocess/offset_ptr.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -8,8 +8,8 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_OFFSET_PTR_HPP -#define BOOST_OFFSET_PTR_HPP +#ifndef BOOST_INTERPROCESS_OFFSET_PTR_HPP +#define BOOST_INTERPROCESS_OFFSET_PTR_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -22,12 +22,12 @@ #include #include #include -#include -#include #include #include #include #include +#include +#include //!\file //!Describes a smart pointer that stores the offset between this pointer and @@ -50,55 +50,27 @@ namespace interprocess { //!pointer and the pointee are still separated by the same offset. This feature //!converts offset_ptr in a smart pointer that can be placed in shared memory and //!memory mapped files mapped in different addresses in every process. -template +template class offset_ptr { /// @cond - typedef offset_ptr self_t; - + typedef offset_ptr self_t; void unspecified_bool_type_func() const {} typedef void (self_t::*unspecified_bool_type)() const; - - #if defined(_MSC_VER) && (_MSC_VER >= 1400) - __declspec(noinline) //this workaround is needed for msvc > 8.0 - #endif - void set_offset(const PointedType *ptr) - { - //offset == 1 && ptr != 0 is not legal for this pointer - if(!ptr){ - internal.m_offset = 1; - } - else{ - internal.m_offset = (const char*)ptr - (const char*)(this); - BOOST_ASSERT(internal.m_offset != 1); - } - } - - #if defined(_MSC_VER) && (_MSC_VER >= 1400) - __declspec(noinline) //this workaround is needed for msvc-8.0 and msvc-9.0 - #endif - void* get_pointer() const - { return (internal.m_offset == 1) ? 0 : (const_cast(reinterpret_cast(this)) + internal.m_offset); } - - void inc_offset(std::ptrdiff_t bytes) - { internal.m_offset += bytes; } - - void dec_offset(std::ptrdiff_t bytes) - { internal.m_offset -= bytes; } - - union internal_type{ - std::ptrdiff_t m_offset; //Distance between this object and pointed address - PointedType *aliasing_helper; - } internal; /// @endcond public: + typedef PointedType element_type; typedef PointedType * pointer; - typedef typename detail:: + typedef typename ipcdetail:: add_reference::type reference; - typedef PointedType value_type; - typedef std::ptrdiff_t difference_type; + typedef typename ipcdetail:: + remove_volatile::type + >::type value_type; + typedef DifferenceType difference_type; typedef std::random_access_iterator_tag iterator_category; + typedef OffsetType offset_type; public: //Public Functions @@ -109,60 +81,62 @@ class offset_ptr //!Constructor from other pointer. //!Never throws. template - offset_ptr(T *ptr) - { pointer p (ptr); (void)p; this->set_offset(p); } + offset_ptr( T *ptr + , typename ipcdetail::enable_if< ipcdetail::is_convertible >::type * = 0) + { this->set_offset(static_cast(ptr)); } //!Constructor from other offset_ptr //!Never throws. - offset_ptr(const offset_ptr& ptr) + offset_ptr(const offset_ptr& ptr) { this->set_offset(ptr.get()); } - //!Constructor from other offset_ptr. If pointers of pointee types are + //!Constructor from other offset_ptr. If pointers of pointee types are //!convertible, offset_ptrs will be convertibles. Never throws. - template - offset_ptr(const offset_ptr &ptr) - { pointer p(ptr.get()); (void)p; this->set_offset(p); } + template + offset_ptr( const offset_ptr &ptr + , typename ipcdetail::enable_if< ipcdetail::is_convertible >::type * = 0) + { this->set_offset(static_cast(ptr.get())); } //!Emulates static_cast operator. //!Never throws. - template - offset_ptr(const offset_ptr & r, detail::static_cast_tag) + template + offset_ptr(const offset_ptr & r, ipcdetail::static_cast_tag) { this->set_offset(static_cast(r.get())); } //!Emulates const_cast operator. //!Never throws. - template - offset_ptr(const offset_ptr & r, detail::const_cast_tag) + template + offset_ptr(const offset_ptr & r, ipcdetail::const_cast_tag) { this->set_offset(const_cast(r.get())); } //!Emulates dynamic_cast operator. //!Never throws. - template - offset_ptr(const offset_ptr & r, detail::dynamic_cast_tag) + template + offset_ptr(const offset_ptr & r, ipcdetail::dynamic_cast_tag) { this->set_offset(dynamic_cast(r.get())); } //!Emulates reinterpret_cast operator. //!Never throws. - template - offset_ptr(const offset_ptr & r, detail::reinterpret_cast_tag) + template + offset_ptr(const offset_ptr & r, ipcdetail::reinterpret_cast_tag) { this->set_offset(reinterpret_cast(r.get())); } //!Obtains raw pointer from offset. //!Never throws. pointer get()const - { return static_cast(this->get_pointer()); } + { return this->to_raw_pointer(); } - std::ptrdiff_t get_offset() const + offset_type get_offset() const { return internal.m_offset; } //!Pointer-like -> operator. It can return 0 pointer. //!Never throws. - pointer operator->() const + pointer operator->() const { return this->get(); } - //!Dereferencing operator, if it is a null offset_ptr behavior + //!Dereferencing operator, if it is a null offset_ptr behavior //! is undefined. Never throws. - reference operator* () const + reference operator* () const { pointer p = this->get(); reference r = *p; @@ -171,7 +145,8 @@ class offset_ptr //!Indexing operator. //!Never throws. - reference operator[](std::ptrdiff_t idx) const + template + reference operator[](T idx) const { return this->get()[idx]; } //!Assignment from pointer (saves extra conversion). @@ -184,35 +159,27 @@ class offset_ptr offset_ptr& operator= (const offset_ptr & pt) { pointer p(pt.get()); (void)p; this->set_offset(p); return *this; } - //!Assignment from related offset_ptr. If pointers of pointee types + //!Assignment from related offset_ptr. If pointers of pointee types //! are assignable, offset_ptrs will be assignable. Never throws. - template - offset_ptr& operator= (const offset_ptr & pt) - { pointer p(pt.get()); this->set_offset(p); return *this; } - - //!offset_ptr + std::ptrdiff_t. - //!Never throws. - offset_ptr operator+ (std::ptrdiff_t offset) const - { return offset_ptr(this->get()+offset); } + template + typename ipcdetail::enable_if, offset_ptr&>::type + operator= (const offset_ptr & ptr) + { this->set_offset(static_cast(ptr.get())); return *this; } - //!offset_ptr - std::ptrdiff_t. + //!offset_ptr += difference_type. //!Never throws. - offset_ptr operator- (std::ptrdiff_t offset) const - { return offset_ptr(this->get()-offset); } - - //!offset_ptr += std::ptrdiff_t. - //!Never throws. - offset_ptr &operator+= (std::ptrdiff_t offset) + offset_ptr &operator+= (difference_type offset) { this->inc_offset(offset * sizeof (PointedType)); return *this; } - //!offset_ptr -= std::ptrdiff_t. + //!offset_ptr -= difference_type. //!Never throws. - offset_ptr &operator-= (std::ptrdiff_t offset) + template + offset_ptr &operator-= (T offset) { this->dec_offset(offset * sizeof (PointedType)); return *this; } //!++offset_ptr. //!Never throws. - offset_ptr& operator++ (void) + offset_ptr& operator++ (void) { this->inc_offset(sizeof (PointedType)); return *this; } //!offset_ptr++. @@ -222,7 +189,7 @@ class offset_ptr //!--offset_ptr. //!Never throws. - offset_ptr& operator-- (void) + offset_ptr& operator-- (void) { this->dec_offset(sizeof (PointedType)); return *this; } //!offset_ptr--. @@ -232,136 +199,224 @@ class offset_ptr //!safe bool conversion operator. //!Never throws. - operator unspecified_bool_type() const + operator unspecified_bool_type() const { return this->get()? &self_t::unspecified_bool_type_func : 0; } - //!Not operator. Not needed in theory, but improves portability. + //!Not operator. Not needed in theory, but improves portability. //!Never throws bool operator! () const { return this->get() == 0; } -/* - friend void swap (offset_ptr &pt, offset_ptr &pt2) - { - value_type *ptr = pt.get(); - pt = pt2; - pt2 = ptr; + + //!Compatibility with pointer_traits + //! + template + struct rebind + { typedef offset_ptr other; }; + + //!Compatibility with pointer_traits + //! + static offset_ptr pointer_to(reference r) + { return offset_ptr(&r); } + + //!difference_type + offset_ptr + //!operation + friend offset_ptr operator+(difference_type diff, const offset_ptr& right) + { offset_ptr tmp(right); tmp += diff; return tmp; } + + //!offset_ptr + difference_type + //!operation + friend offset_ptr operator+(const offset_ptr& left, difference_type diff) + { offset_ptr tmp(left); tmp += diff; return tmp; } + + //!offset_ptr - diff + //!operation + friend offset_ptr operator-(const offset_ptr &left, difference_type diff) + { offset_ptr tmp(left); tmp -= diff; return tmp; } + + //!offset_ptr - diff + //!operation + friend offset_ptr operator-(difference_type diff, const offset_ptr &right) + { offset_ptr tmp(right); tmp -= diff; return tmp; } + + //!offset_ptr - offset_ptr + //!operation + friend difference_type operator-(const offset_ptr &pt, const offset_ptr &pt2) + { return difference_type(pt.get()- pt2.get()); } + + //Comparison + friend bool operator== (const offset_ptr &pt1, const offset_ptr &pt2) + { return pt1.get() == pt2.get(); } + + friend bool operator!= (const offset_ptr &pt1, const offset_ptr &pt2) + { return pt1.get() != pt2.get(); } + + friend bool operator<(const offset_ptr &pt1, const offset_ptr &pt2) + { return pt1.get() < pt2.get(); } + + friend bool operator<=(const offset_ptr &pt1, const offset_ptr &pt2) + { return pt1.get() <= pt2.get(); } + + friend bool operator>(const offset_ptr &pt1, const offset_ptr &pt2) + { return pt1.get() > pt2.get(); } + + friend bool operator>=(const offset_ptr &pt1, const offset_ptr &pt2) + { return pt1.get() >= pt2.get(); } + + //Comparison to raw ptr to support literal 0 + friend bool operator== (pointer pt1, const offset_ptr &pt2) + { return pt1 == pt2.get(); } + + friend bool operator!= (pointer pt1, const offset_ptr &pt2) + { return pt1 != pt2.get(); } + + friend bool operator<(pointer pt1, const offset_ptr &pt2) + { return pt1 < pt2.get(); } + + friend bool operator<=(pointer pt1, const offset_ptr &pt2) + { return pt1 <= pt2.get(); } + + friend bool operator>(pointer pt1, const offset_ptr &pt2) + { return pt1 > pt2.get(); } + + friend bool operator>=(pointer pt1, const offset_ptr &pt2) + { return pt1 >= pt2.get(); } + + //Comparison + friend bool operator== (const offset_ptr &pt1, pointer pt2) + { return pt1.get() == pt2; } + + friend bool operator!= (const offset_ptr &pt1, pointer pt2) + { return pt1.get() != pt2; } + + friend bool operator<(const offset_ptr &pt1, pointer pt2) + { return pt1.get() < pt2; } + + friend bool operator<=(const offset_ptr &pt1, pointer pt2) + { return pt1.get() <= pt2; } + + friend bool operator>(const offset_ptr &pt1, pointer pt2) + { return pt1.get() > pt2; } + + friend bool operator>=(const offset_ptr &pt1, pointer pt2) + { return pt1.get() >= pt2; } + + friend void swap(offset_ptr &left, offset_ptr &right) + { + pointer ptr = right.get(); + right = left; + left = ptr; } -*/ + + private: + /// @cond + + //Note: using the address of a local variable to point to another address + //is not standard conforming and this can be optimized-away by the compiler. + //Non-inlining is a method to remain illegal and correct + #if defined(_MSC_VER) + __declspec(noinline) //this workaround is needed for MSVC compilers + #elif defined (__GNUC__)//this workaround is needed for GCC + __attribute__((__noinline__)) + #endif + void set_offset(const PointedType *ptr) + { + #if defined (__GNUC__) + //asm(""); //Prevents the function to be optimized-away (provokes an special "side-effect") + #endif + //offset == 1 && ptr != 0 is not legal for this pointer + if(!ptr){ + internal.m_offset = 1; + } + else{ + internal.m_offset = (OffsetType)((const char*)ptr - (const char*)(this)); + BOOST_ASSERT(internal.m_offset != 1); + } + } + + #if defined(_MSC_VER) && (_MSC_VER >= 1400) + __declspec(noinline) + #elif defined (__GNUC__) + __attribute__((__noinline__)) + #endif + PointedType * to_raw_pointer() const + { + #if defined (__GNUC__) + //asm(""); //Prevents the function to be optimized-away (provokes an special "side-effect") + #endif + return static_cast( + static_cast( + (internal.m_offset == 1) ? + 0 : + (const_cast(reinterpret_cast(this)) + internal.m_offset) + ) + ); + } + + void inc_offset(DifferenceType bytes) + { internal.m_offset += bytes; } + + void dec_offset(DifferenceType bytes) + { internal.m_offset -= bytes; } + + union internal_type{ + OffsetType m_offset; //Distance between this object and pointee address + typename ::boost::aligned_storage + < sizeof(OffsetType) + , (OffsetAlignment == offset_type_alignment) ? + ::boost::alignment_of::value : OffsetAlignment + >::type alignment_helper; + } internal; + /// @endcond }; -//!offset_ptr == offset_ptr. -//!Never throws. -template -inline bool operator== (const offset_ptr &pt1, - const offset_ptr &pt2) -{ return pt1.get() == pt2.get(); } - -//!offset_ptr != offset_ptr. -//!Never throws. -template -inline bool operator!= (const offset_ptr &pt1, - const offset_ptr &pt2) -{ return pt1.get() != pt2.get(); } - -//!offset_ptr < offset_ptr. -//!Never throws. -template -inline bool operator< (const offset_ptr &pt1, - const offset_ptr &pt2) -{ return pt1.get() < pt2.get(); } - -//!offset_ptr <= offset_ptr. -//!Never throws. -template -inline bool operator<= (const offset_ptr &pt1, - const offset_ptr &pt2) -{ return pt1.get() <= pt2.get(); } - -//!offset_ptr > offset_ptr. -//!Never throws. -template -inline bool operator> (const offset_ptr &pt1, - const offset_ptr &pt2) -{ return pt1.get() > pt2.get(); } - -//!offset_ptr >= offset_ptr. -//!Never throws. -template -inline bool operator>= (const offset_ptr &pt1, - const offset_ptr &pt2) -{ return pt1.get() >= pt2.get(); } - //!operator<< //!for offset ptr -template -inline std::basic_ostream & operator<< - (std::basic_ostream & os, offset_ptr const & p) +template +inline std::basic_ostream & operator<< + (std::basic_ostream & os, offset_ptr const & p) { return os << p.get_offset(); } -//!operator>> +//!operator>> //!for offset ptr -template -inline std::basic_istream & operator>> - (std::basic_istream & is, offset_ptr & p) +template +inline std::basic_istream & operator>> + (std::basic_istream & is, offset_ptr & p) { return is >> p.get_offset(); } -//!std::ptrdiff_t + offset_ptr -//!operation -template -inline offset_ptr operator+(std::ptrdiff_t diff, const offset_ptr& right) -{ return right + diff; } - -//!offset_ptr - offset_ptr -//!operation -template -inline std::ptrdiff_t operator- (const offset_ptr &pt, const offset_ptr &pt2) -{ return pt.get()- pt2.get(); } - -//!swap specialization -//!for offset_ptr -template -inline void swap (boost::interprocess::offset_ptr &pt, - boost::interprocess::offset_ptr &pt2) -{ - typename offset_ptr::value_type *ptr = pt.get(); - pt = pt2; - pt2 = ptr; -} - //!Simulation of static_cast between pointers. Never throws. -template -inline boost::interprocess::offset_ptr - static_pointer_cast(const boost::interprocess::offset_ptr & r) -{ - return boost::interprocess::offset_ptr - (r, boost::interprocess::detail::static_cast_tag()); +template +inline boost::interprocess::offset_ptr + static_pointer_cast(const boost::interprocess::offset_ptr & r) +{ + return boost::interprocess::offset_ptr + (r, boost::interprocess::ipcdetail::static_cast_tag()); } //!Simulation of const_cast between pointers. Never throws. -template -inline boost::interprocess::offset_ptr - const_pointer_cast(const boost::interprocess::offset_ptr & r) -{ - return boost::interprocess::offset_ptr - (r, boost::interprocess::detail::const_cast_tag()); +template +inline boost::interprocess::offset_ptr + const_pointer_cast(const boost::interprocess::offset_ptr & r) +{ + return boost::interprocess::offset_ptr + (r, boost::interprocess::ipcdetail::const_cast_tag()); } //!Simulation of dynamic_cast between pointers. Never throws. -template -inline boost::interprocess::offset_ptr - dynamic_pointer_cast(const boost::interprocess::offset_ptr & r) -{ - return boost::interprocess::offset_ptr - (r, boost::interprocess::detail::dynamic_cast_tag()); +template +inline boost::interprocess::offset_ptr + dynamic_pointer_cast(const boost::interprocess::offset_ptr & r) +{ + return boost::interprocess::offset_ptr + (r, boost::interprocess::ipcdetail::dynamic_cast_tag()); } //!Simulation of reinterpret_cast between pointers. Never throws. -template -inline boost::interprocess::offset_ptr - reinterpret_pointer_cast(const boost::interprocess::offset_ptr & r) -{ - return boost::interprocess::offset_ptr - (r, boost::interprocess::detail::reinterpret_cast_tag()); +template +inline boost::interprocess::offset_ptr + reinterpret_pointer_cast(const boost::interprocess::offset_ptr & r) +{ + return boost::interprocess::offset_ptr + (r, boost::interprocess::ipcdetail::reinterpret_cast_tag()); } } //namespace interprocess { @@ -369,26 +424,26 @@ inline boost::interprocess::offset_ptr /// @cond //!has_trivial_constructor<> == true_type specialization for optimizations -template -struct has_trivial_constructor< boost::interprocess::offset_ptr > +template +struct has_trivial_constructor< boost::interprocess::offset_ptr > { - enum { value = true }; + static const bool value = true; }; ///has_trivial_destructor<> == true_type specialization for optimizations -template -struct has_trivial_destructor< boost::interprocess::offset_ptr > +template +struct has_trivial_destructor< boost::interprocess::offset_ptr > { - enum { value = true }; + static const bool value = true; }; //#if !defined(_MSC_VER) || (_MSC_VER >= 1400) namespace interprocess { //#endif -//!get_pointer() enables boost::mem_fn to recognize offset_ptr. +//!to_raw_pointer() enables boost::mem_fn to recognize offset_ptr. //!Never throws. -template -inline T * get_pointer(boost::interprocess::offset_ptr const & p) +template +inline T * to_raw_pointer(boost::interprocess::offset_ptr const & p) { return p.get(); } //#if !defined(_MSC_VER) || (_MSC_VER >= 1400) } //namespace interprocess @@ -409,25 +464,25 @@ namespace intrusive { template struct max_pointer_plus_bits; -template -struct max_pointer_plus_bits, Alignment> +template +struct max_pointer_plus_bits, OffsetAlignment> { //The offset ptr can embed one bit less than the alignment since it //uses offset == 1 to store the null pointer. - static const std::size_t value = ::boost::interprocess::detail::ls_zeros::value - 1; + static const std::size_t value = ::boost::interprocess::ipcdetail::ls_zeros::value - 1; }; //Predeclaration template struct pointer_plus_bits; -template -struct pointer_plus_bits, NumBits> +template +struct pointer_plus_bits, NumBits> { - typedef boost::interprocess::offset_ptr pointer; + typedef boost::interprocess::offset_ptr pointer; //Bits are stored in the lower bits of the pointer except the LSB, //because this bit is used to represent the null pointer. - static const std::size_t Mask = ((std::size_t(1) << NumBits)-1)<<1u; + static const std::size_t Mask = ((std::size_t(1) << NumBits)-1)<<1u; static pointer get_pointer(const pointer &n) { return reinterpret_cast(std::size_t(n.get()) & ~std::size_t(Mask)); } @@ -450,10 +505,24 @@ struct pointer_plus_bits, NumBits> }; } //namespace intrusive + +//Predeclaration +template +struct pointer_to_other; + + + +//Backwards compatibility with pointer_to_other +template +struct pointer_to_other + < ::boost::interprocess::offset_ptr, U > +{ + typedef ::boost::interprocess::offset_ptr type; +}; + } //namespace boost{ /// @endcond #include -#endif //#ifndef BOOST_OFFSET_PTR_HPP - +#endif //#ifndef BOOST_INTERPROCESS_OFFSET_PTR_HPP diff --git a/3party/boost/boost/interprocess/permissions.hpp b/3party/boost/boost/interprocess/permissions.hpp index 4db45b8fc1..745f8a8e0f 100644 --- a/3party/boost/boost/interprocess/permissions.hpp +++ b/3party/boost/boost/interprocess/permissions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -39,7 +39,7 @@ namespace interprocess { #if defined(BOOST_INTERPROCESS_WINDOWS) -namespace detail { +namespace ipcdetail { template struct unrestricted_permissions_holder @@ -50,7 +50,7 @@ struct unrestricted_permissions_holder template winapi::interprocess_all_access_security unrestricted_permissions_holder::unrestricted; -} //namespace detail { +} //namespace ipcdetail { #endif //defined BOOST_INTERPROCESS_WINDOWS @@ -105,7 +105,7 @@ class permissions { /// @cond #if defined (BOOST_INTERPROCESS_WINDOWS) - m_perm = &detail::unrestricted_permissions_holder<0>::unrestricted; + m_perm = &ipcdetail::unrestricted_permissions_holder<0>::unrestricted; #else m_perm = 0666; #endif diff --git a/3party/boost/boost/interprocess/segment_manager.hpp b/3party/boost/boost/interprocess/segment_manager.hpp index 5474b0b0ca..8680a953e2 100644 --- a/3party/boost/boost/interprocess/segment_manager.hpp +++ b/3party/boost/boost/interprocess/segment_manager.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include //std::size_t #include //char_traits @@ -69,30 +69,32 @@ class segment_manager_base typedef typename MemoryAlgorithm::void_pointer void_pointer; typedef typename MemoryAlgorithm::mutex_family mutex_family; typedef MemoryAlgorithm memory_algorithm; - + /// @cond - + //Experimental. Don't use typedef typename MemoryAlgorithm::multiallocation_chain multiallocation_chain; + typedef typename MemoryAlgorithm::difference_type difference_type; + typedef typename MemoryAlgorithm::size_type size_type; /// @endcond //!This constant indicates the payload size //!associated with each allocation of the memory algorithm - static const std::size_t PayloadPerAllocation = MemoryAlgorithm::PayloadPerAllocation; + static const size_type PayloadPerAllocation = MemoryAlgorithm::PayloadPerAllocation; //!Constructor of the segment_manager_base //! //!"size" is the size of the memory segment where //!the basic segment manager is being constructed. //! - //!"reserved_bytes" is the number of bytes + //!"reserved_bytes" is the number of bytes //!after the end of the memory algorithm object itself //!that the memory algorithm will exclude from //!dynamic allocation //! //!Can throw - segment_manager_base(std::size_t size, std::size_t reserved_bytes) + segment_manager_base(size_type size, size_type reserved_bytes) : MemoryAlgorithm(size, reserved_bytes) { BOOST_ASSERT((sizeof(segment_manager_base) == sizeof(MemoryAlgorithm))); @@ -100,22 +102,22 @@ class segment_manager_base //!Returns the size of the memory //!segment - std::size_t get_size() const + size_type get_size() const { return MemoryAlgorithm::get_size(); } //!Returns the number of free bytes of the memory //!segment - std::size_t get_free_memory() const + size_type get_free_memory() const { return MemoryAlgorithm::get_free_memory(); } //!Obtains the minimum size needed by //!the segment manager - static std::size_t get_min_size (std::size_t size) + static size_type get_min_size (size_type size) { return MemoryAlgorithm::get_min_size(size); } - //!Allocates nbytes bytes. This function is only used in + //!Allocates nbytes bytes. This function is only used in //!single-segment management. Never throws - void * allocate (std::size_t nbytes, std::nothrow_t) + void * allocate (size_type nbytes, std::nothrow_t) { return MemoryAlgorithm::allocate(nbytes); } /// @cond @@ -123,62 +125,62 @@ class segment_manager_base //Experimental. Dont' use. //!Allocates n_elements of //!elem_size bytes. Throws bad_alloc on failure. - multiallocation_chain allocate_many(std::size_t elem_bytes, std::size_t num_elements) + multiallocation_chain allocate_many(size_type elem_bytes, size_type num_elements) { multiallocation_chain mem(MemoryAlgorithm::allocate_many(elem_bytes, num_elements)); if(mem.empty()) throw bad_alloc(); - return boost::interprocess::move(mem); + return boost::move(mem); } //!Allocates n_elements, each one of //!element_lenghts[i]*sizeof_element bytes. Throws bad_alloc on failure. multiallocation_chain allocate_many - (const std::size_t *element_lenghts, std::size_t n_elements, std::size_t sizeof_element = 1) + (const size_type *element_lenghts, size_type n_elements, size_type sizeof_element = 1) { multiallocation_chain mem(MemoryAlgorithm::allocate_many(element_lenghts, n_elements, sizeof_element)); if(mem.empty()) throw bad_alloc(); - return boost::interprocess::move(mem); + return boost::move(mem); } //!Allocates n_elements of //!elem_size bytes. Returns a default constructed iterator on failure. multiallocation_chain allocate_many - (std::size_t elem_bytes, std::size_t num_elements, std::nothrow_t) + (size_type elem_bytes, size_type num_elements, std::nothrow_t) { return MemoryAlgorithm::allocate_many(elem_bytes, num_elements); } //!Allocates n_elements, each one of //!element_lenghts[i]*sizeof_element bytes. //!Returns a default constructed iterator on failure. multiallocation_chain allocate_many - (const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element, std::nothrow_t) + (const size_type *elem_sizes, size_type n_elements, size_type sizeof_element, std::nothrow_t) { return MemoryAlgorithm::allocate_many(elem_sizes, n_elements, sizeof_element); } //!Deallocates elements pointed by the //!multiallocation iterator range. void deallocate_many(multiallocation_chain chain) - { MemoryAlgorithm::deallocate_many(boost::interprocess::move(chain)); } + { MemoryAlgorithm::deallocate_many(boost::move(chain)); } /// @endcond //!Allocates nbytes bytes. Throws boost::interprocess::bad_alloc //!on failure - void * allocate(std::size_t nbytes) - { + void * allocate(size_type nbytes) + { void * ret = MemoryAlgorithm::allocate(nbytes); if(!ret) throw bad_alloc(); return ret; } - //!Allocates nbytes bytes. This function is only used in + //!Allocates nbytes bytes. This function is only used in //!single-segment management. Never throws - void * allocate_aligned (std::size_t nbytes, std::size_t alignment, std::nothrow_t) + void * allocate_aligned (size_type nbytes, size_type alignment, std::nothrow_t) { return MemoryAlgorithm::allocate_aligned(nbytes, alignment); } - //!Allocates nbytes bytes. This function is only used in + //!Allocates nbytes bytes. This function is only used in //!single-segment management. Throws bad_alloc when fails - void * allocate_aligned(std::size_t nbytes, std::size_t alignment) - { + void * allocate_aligned(size_type nbytes, size_type alignment) + { void * ret = MemoryAlgorithm::allocate_aligned(nbytes, alignment); if(!ret) throw bad_alloc(); @@ -187,8 +189,8 @@ class segment_manager_base template std::pair - allocation_command (boost::interprocess::allocation_type command, std::size_t limit_size, - std::size_t preferred_size,std::size_t &received_size, + allocation_command (boost::interprocess::allocation_type command, size_type limit_size, + size_type preferred_size,size_type &received_size, T *reuse_ptr = 0) { std::pair ret = MemoryAlgorithm::allocation_command @@ -200,9 +202,9 @@ class segment_manager_base } std::pair - raw_allocation_command (boost::interprocess::allocation_type command, std::size_t limit_objects, - std::size_t preferred_objects,std::size_t &received_objects, - void *reuse_ptr = 0, std::size_t sizeof_object = 1) + raw_allocation_command (boost::interprocess::allocation_type command, size_type limit_objects, + size_type preferred_objects,size_type &received_objects, + void *reuse_ptr = 0, size_type sizeof_object = 1) { std::pair ret = MemoryAlgorithm::raw_allocation_command ( command | boost::interprocess::nothrow_allocation, limit_objects, preferred_objects, received_objects @@ -219,7 +221,7 @@ class segment_manager_base //!Increases managed memory in extra_size bytes more. This only works //!with single-segment management. - void grow(std::size_t extra_size) + void grow(size_type extra_size) { MemoryAlgorithm::grow(extra_size); } //!Decreases managed memory to the minimum. This only works @@ -243,17 +245,17 @@ class segment_manager_base { MemoryAlgorithm::zero_free_memory(); } //!Returns the size of the buffer previously allocated pointed by ptr - std::size_t size(const void *ptr) const + size_type size(const void *ptr) const { return MemoryAlgorithm::size(ptr); } /// @cond protected: void * prot_anonymous_construct - (std::size_t num, bool dothrow, detail::in_place_interface &table) + (size_type num, bool dothrow, ipcdetail::in_place_interface &table) { - typedef detail::block_header block_header_t; - block_header_t block_info ( table.size*num - , table.alignment + typedef ipcdetail::block_header block_header_t; + block_header_t block_info ( size_type(table.size*num) + , size_type(table.alignment) , anonymous_type , 1 , 0); @@ -267,12 +269,12 @@ class segment_manager_base throw bad_alloc(); } else{ - return 0; + return 0; } } //Build scoped ptr to avoid leaks with constructor exception - detail::mem_algo_deallocator mem(ptr_struct, *this); + ipcdetail::mem_algo_deallocator mem(ptr_struct, *this); //Now construct the header block_header_t * hdr = new(ptr_struct) block_header_t(block_info); @@ -280,7 +282,7 @@ class segment_manager_base ptr = hdr->value(); //Now call constructors - detail::array_construct(ptr, num, table); + ipcdetail::array_construct(ptr, num, table); //All constructors successful, we don't want erase memory mem.release(); @@ -288,11 +290,11 @@ class segment_manager_base } //!Calls the destructor and makes an anonymous deallocate - void prot_anonymous_destroy(const void *object, detail::in_place_interface &table) + void prot_anonymous_destroy(const void *object, ipcdetail::in_place_interface &table) { - //Get control data from associated with this object - typedef detail::block_header block_header_t; + //Get control data from associated with this object + typedef ipcdetail::block_header block_header_t; block_header_t *ctrl_data = block_header_t::block_header_from_value(object, table.size, table.alignment); //------------------------------- @@ -307,7 +309,7 @@ class segment_manager_base //Call destructors and free memory //Build scoped ptr to avoid leaks with destructor exception std::size_t destroyed = 0; - table.destroy_n(const_cast(object), ctrl_data->m_value_bytes/table.size, destroyed); + table.destroy_n(const_cast(object), ctrl_data->m_value_bytes/table.size, destroyed); this->deallocate(ctrl_data); } /// @endcond @@ -316,9 +318,9 @@ class segment_manager_base //!This object is placed in the beginning of memory segment and //!implements the allocation (named or anonymous) of portions //!of the segment. This object contains two indexes that -//!maintain an association between a name and a portion of the segment. +//!maintain an association between a name and a portion of the segment. //! -//!The first index contains the mappings for normal named objects using the +//!The first index contains the mappings for normal named objects using the //!char type specified in the template parameter. //! //!The second index contains the association for unique instances. The key will @@ -334,42 +336,44 @@ template class IndexType> class segment_manager : public segment_manager_base -{ +{ /// @cond //Non-copyable segment_manager(); segment_manager(const segment_manager &); segment_manager &operator=(const segment_manager &); typedef segment_manager_base Base; - typedef detail::block_header block_header_t; /// @endcond public: typedef MemoryAlgorithm memory_algorithm; typedef typename Base::void_pointer void_pointer; + typedef typename Base::size_type size_type; + typedef typename Base::difference_type difference_type; typedef CharType char_type; typedef segment_manager_base segment_manager_base_type; - static const std::size_t PayloadPerAllocation = Base::PayloadPerAllocation; + static const size_type PayloadPerAllocation = Base::PayloadPerAllocation; /// @cond private: - typedef detail::index_config index_config_named; - typedef detail::index_config index_config_unique; + typedef ipcdetail::block_header block_header_t; + typedef ipcdetail::index_config index_config_named; + typedef ipcdetail::index_config index_config_unique; typedef IndexType index_type; - typedef detail::bool_::value > is_intrusive_t; - typedef detail::bool_::value> is_node_index_t; + typedef ipcdetail::bool_::value > is_intrusive_t; + typedef ipcdetail::bool_::value> is_node_index_t; public: typedef IndexType named_index_t; typedef IndexType unique_index_t; - typedef detail::char_ptr_holder char_ptr_holder_t; - typedef detail::segment_manager_iterator_transform + typedef ipcdetail::char_ptr_holder char_ptr_holder_t; + typedef ipcdetail::segment_manager_iterator_transform ::value> named_transform; - typedef detail::segment_manager_iterator_transform + typedef ipcdetail::segment_manager_iterator_transform ::value> unique_transform; /// @endcond @@ -387,14 +391,14 @@ class segment_manager template struct construct_proxy { - typedef detail::named_proxy type; + typedef ipcdetail::named_proxy type; }; //!Constructor proxy object definition helper class template struct construct_iter_proxy { - typedef detail::named_proxy type; + typedef ipcdetail::named_proxy type; }; /// @endcond @@ -403,7 +407,7 @@ class segment_manager //!"size" is the size of the memory segment where //!the segment manager is being constructed. //!Can throw - segment_manager(std::size_t size) + segment_manager(size_type size) : Base(size, priv_get_reserved_bytes()) , m_header(static_cast(get_this_pointer())) { @@ -415,34 +419,34 @@ class segment_manager //!and the object count. On failure the first member of the //!returned pair is 0. template - std::pair find (const CharType* name) + std::pair find (const CharType* name) { return this->priv_find_impl(name, true); } //!Tries to find a previous unique allocation. Returns the address //!and the object count. On failure the first member of the //!returned pair is 0. template - std::pair find (const detail::unique_instance_t* name) + std::pair find (const ipcdetail::unique_instance_t* name) { return this->priv_find_impl(name, true); } //!Tries to find a previous named allocation. Returns the address //!and the object count. On failure the first member of the //!returned pair is 0. This search is not mutex-protected! template - std::pair find_no_lock (const CharType* name) + std::pair find_no_lock (const CharType* name) { return this->priv_find_impl(name, false); } //!Tries to find a previous unique allocation. Returns the address //!and the object count. On failure the first member of the //!returned pair is 0. This search is not mutex-protected! template - std::pair find_no_lock (const detail::unique_instance_t* name) + std::pair find_no_lock (const ipcdetail::unique_instance_t* name) { return this->priv_find_impl(name, false); } //!Returns throwing "construct" proxy //!object template - typename construct_proxy::type + typename construct_proxy::type construct(char_ptr_holder_t name) { return typename construct_proxy::type (this, name, false, true); } @@ -462,39 +466,39 @@ class segment_manager //!Returns no throwing "search or construct" //!proxy object template - typename construct_proxy::type + typename construct_proxy::type find_or_construct(char_ptr_holder_t name, std::nothrow_t) { return typename construct_proxy::type (this, name, true, false); } //!Returns throwing "construct from iterators" proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type construct_it(char_ptr_holder_t name) { return typename construct_iter_proxy::type (this, name, false, true); } //!Returns throwing "search or construct from iterators" //!proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type find_or_construct_it(char_ptr_holder_t name) { return typename construct_iter_proxy::type (this, name, true, true); } //!Returns no throwing "construct from iterators" //!proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type construct_it(char_ptr_holder_t name, std::nothrow_t) { return typename construct_iter_proxy::type (this, name, false, false); } //!Returns no throwing "search or construct from iterators" //!proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type find_or_construct_it(char_ptr_holder_t name, std::nothrow_t) { return typename construct_iter_proxy::type (this, name, true, false); } - //!Calls object function blocking recursive interprocess_mutex and guarantees that - //!no new named_alloc or destroy will be executed by any process while + //!Calls object function blocking recursive interprocess_mutex and guarantees that + //!no new named_alloc or destroy will be executed by any process while //!executing the object function call*/ template void atomic_func(Func &f) @@ -521,9 +525,9 @@ class segment_manager //!Destroys a previously created unique instance. //!Returns false if the object was not present. template - bool destroy(const detail::unique_instance_t *) + bool destroy(const ipcdetail::unique_instance_t *) { - detail::placement_destroy dtor; + ipcdetail::placement_destroy dtor; return this->priv_generic_named_destroy (typeid(T).name(), m_header.m_unique_index, dtor, is_intrusive_t()); } @@ -533,7 +537,7 @@ class segment_manager template bool destroy(const CharType *name) { - detail::placement_destroy dtor; + ipcdetail::placement_destroy dtor; return this->priv_generic_named_destroy (name, m_header.m_named_index, dtor, is_intrusive_t()); } @@ -544,8 +548,8 @@ class segment_manager void destroy_ptr(const T *p) { //If T is void transform it to char - typedef typename detail::char_if_void::type data_t; - detail::placement_destroy dtor; + typedef typename ipcdetail::char_if_void::type data_t; + ipcdetail::placement_destroy dtor; priv_destroy_ptr(p, dtor); } @@ -558,7 +562,7 @@ class segment_manager //!Returns the length of an object created with construct/find_or_construct //!functions. Does not throw. template - static std::size_t get_instance_length(const T *ptr) + static size_type get_instance_length(const T *ptr) { return priv_get_instance_length(block_header_t::block_header_from_value(ptr), sizeof(T)); } //!Returns is the the name of an object created with construct/find_or_construct @@ -567,22 +571,22 @@ class segment_manager static instance_type get_instance_type(const T *ptr) { return priv_get_instance_type(block_header_t::block_header_from_value(ptr)); } - //!Preallocates needed index resources to optimize the + //!Preallocates needed index resources to optimize the //!creation of "num" named objects in the managed memory segment. //!Can throw boost::interprocess::bad_alloc if there is no enough memory. - void reserve_named_objects(std::size_t num) - { + void reserve_named_objects(size_type num) + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - m_header.m_named_index.reserve(num); + m_header.m_named_index.reserve(num); } - //!Preallocates needed index resources to optimize the + //!Preallocates needed index resources to optimize the //!creation of "num" unique objects in the managed memory segment. //!Can throw boost::interprocess::bad_alloc if there is no enough memory. - void reserve_unique_objects(std::size_t num) - { + void reserve_unique_objects(size_type num) + { //------------------------------- scoped_lock guard(m_header); //------------------------------- @@ -592,37 +596,37 @@ class segment_manager //!Calls shrink_to_fit in both named and unique object indexes //!to try to free unused memory from those indexes. void shrink_to_fit_indexes() - { + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - m_header.m_named_index.shrink_to_fit(); - m_header.m_unique_index.shrink_to_fit(); + m_header.m_named_index.shrink_to_fit(); + m_header.m_unique_index.shrink_to_fit(); } //!Returns the number of named objects stored in //!the segment. - std::size_t get_num_named_objects() - { + size_type get_num_named_objects() + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - return m_header.m_named_index.size(); + return m_header.m_named_index.size(); } //!Returns the number of unique objects stored in //!the segment. - std::size_t get_num_unique_objects() - { + size_type get_num_unique_objects() + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - return m_header.m_unique_index.size(); + return m_header.m_unique_index.size(); } //!Obtains the minimum size needed by the //!segment manager - static std::size_t get_min_size() + static size_type get_min_size() { return Base::get_min_size(priv_get_reserved_bytes()); } //!Returns a constant iterator to the beginning of the information about @@ -689,15 +693,15 @@ class segment_manager /// @cond - //!Generic named/anonymous new function. Offers all the possibilities, - //!such as throwing, search before creating, and the constructor is + //!Generic named/anonymous new function. Offers all the possibilities, + //!such as throwing, search before creating, and the constructor is //!encapsulated in an object function. template - T *generic_construct(const CharType *name, - std::size_t num, - bool try2find, + T *generic_construct(const CharType *name, + size_type num, + bool try2find, bool dothrow, - detail::in_place_interface &table) + ipcdetail::in_place_interface &table) { return static_cast (priv_generic_construct(name, num, try2find, dothrow, table)); @@ -708,12 +712,12 @@ class segment_manager //!and the object count. On failure the first member of the //!returned pair is 0. template - std::pair priv_find_impl (const CharType* name, bool lock) - { + std::pair priv_find_impl (const CharType* name, bool lock) + { //The name can't be null, no anonymous object can be found by name BOOST_ASSERT(name != 0); - detail::placement_destroy table; - std::size_t size; + ipcdetail::placement_destroy table; + size_type size; void *ret; if(name == reinterpret_cast(-1)){ @@ -722,30 +726,30 @@ class segment_manager else{ ret = priv_generic_find (name, m_header.m_named_index, table, size, is_intrusive_t(), lock); } - return std::pair(static_cast(ret), size); + return std::pair(static_cast(ret), size); } //!Tries to find a previous unique allocation. Returns the address //!and the object count. On failure the first member of the //!returned pair is 0. template - std::pair priv_find__impl (const detail::unique_instance_t* name, bool lock) + std::pair priv_find__impl (const ipcdetail::unique_instance_t* name, bool lock) { - detail::placement_destroy table; - std::size_t size; - void *ret = priv_generic_find(name, m_header.m_unique_index, table, size, is_intrusive_t(), lock); - return std::pair(static_cast(ret), size); + ipcdetail::placement_destroy table; + size_type size; + void *ret = priv_generic_find(name, m_header.m_unique_index, table, size, is_intrusive_t(), lock); + return std::pair(static_cast(ret), size); } - void *priv_generic_construct(const CharType *name, - std::size_t num, - bool try2find, + void *priv_generic_construct(const CharType *name, + size_type num, + bool try2find, bool dothrow, - detail::in_place_interface &table) + ipcdetail::in_place_interface &table) { void *ret; //Security overflow check - if(num > ((std::size_t)-1)/table.size){ + if(num > ((std::size_t)-1)/table.size){ if(dothrow) throw bad_alloc(); else @@ -765,7 +769,7 @@ class segment_manager return ret; } - void priv_destroy_ptr(const void *ptr, detail::in_place_interface &dtor) + void priv_destroy_ptr(const void *ptr, ipcdetail::in_place_interface &dtor) { block_header_t *ctrl_data = block_header_t::block_header_from_value(ptr, dtor.size, dtor.alignment); switch(ctrl_data->alloc_type()){ @@ -801,14 +805,14 @@ class segment_manager return 0; } CharType *name = static_cast(ctrl_data->template name()); - + //Sanity checks BOOST_ASSERT(ctrl_data->sizeof_char() == sizeof(CharType)); BOOST_ASSERT(ctrl_data->m_num_char == std::char_traits::length(name)); return name; } - static std::size_t priv_get_instance_length(block_header_t *ctrl_data, std::size_t sizeofvalue) + static size_type priv_get_instance_length(block_header_t *ctrl_data, size_type sizeofvalue) { //Get header BOOST_ASSERT((ctrl_data->value_bytes() %sizeofvalue) == 0); @@ -824,7 +828,7 @@ class segment_manager return (instance_type)ctrl_data->alloc_type(); } - static std::size_t priv_get_reserved_bytes() + static size_type priv_get_reserved_bytes() { //Get the number of bytes until the end of (*this) //beginning in the end of the Base base. @@ -833,23 +837,23 @@ class segment_manager template void *priv_generic_find - (const CharT* name, - IndexType > &index, - detail::in_place_interface &table, - std::size_t &length, - detail::true_ is_intrusive, + (const CharT* name, + IndexType > &index, + ipcdetail::in_place_interface &table, + size_type &length, + ipcdetail::true_ is_intrusive, bool use_lock) { (void)is_intrusive; - typedef IndexType > index_type; - typedef detail::index_key index_key_t; + typedef IndexType > index_type; + typedef ipcdetail::index_key index_key_t; typedef typename index_type::iterator index_it; //------------------------------- scoped_lock guard(priv_get_lock(use_lock)); //------------------------------- //Find name in index - detail::intrusive_compare_key key + ipcdetail::intrusive_compare_key key (name, std::char_traits::length(name)); index_it it = index.find(key); @@ -873,15 +877,15 @@ class segment_manager template void *priv_generic_find - (const CharT* name, - IndexType > &index, - detail::in_place_interface &table, - std::size_t &length, - detail::false_ is_intrusive, + (const CharT* name, + IndexType > &index, + ipcdetail::in_place_interface &table, + size_type &length, + ipcdetail::false_ is_intrusive, bool use_lock) { (void)is_intrusive; - typedef IndexType > index_type; + typedef IndexType > index_type; typedef typename index_type::key_type key_type; typedef typename index_type::iterator index_it; @@ -899,7 +903,7 @@ class segment_manager if(it != index.end()){ //Get header block_header_t *ctrl_data = reinterpret_cast - (detail::get_pointer(it->second.m_ptr)); + (ipcdetail::to_raw_pointer(it->second.m_ptr)); //Sanity check BOOST_ASSERT((ctrl_data->m_value_bytes % table.size) == 0); @@ -913,23 +917,23 @@ class segment_manager template bool priv_generic_named_destroy (block_header_t *block_header, - IndexType > &index, - detail::in_place_interface &table, - detail::true_ is_node_index) + IndexType > &index, + ipcdetail::in_place_interface &table, + ipcdetail::true_ is_node_index) { (void)is_node_index; - typedef typename IndexType >::iterator index_it; + typedef typename IndexType >::iterator index_it; - index_it *ihdr = block_header_t::to_first_header(block_header); + index_it *ihdr = block_header_t::template to_first_header(block_header); return this->priv_generic_named_destroy_impl(*ihdr, index, table); } template bool priv_generic_named_destroy (block_header_t *block_header, - IndexType > &index, - detail::in_place_interface &table, - detail::false_ is_node_index) + IndexType > &index, + ipcdetail::in_place_interface &table, + ipcdetail::false_ is_node_index) { (void)is_node_index; CharT *name = static_cast(block_header->template name()); @@ -937,22 +941,22 @@ class segment_manager } template - bool priv_generic_named_destroy(const CharT *name, - IndexType > &index, - detail::in_place_interface &table, - detail::true_ is_intrusive_index) + bool priv_generic_named_destroy(const CharT *name, + IndexType > &index, + ipcdetail::in_place_interface &table, + ipcdetail::true_ is_intrusive_index) { (void)is_intrusive_index; - typedef IndexType > index_type; - typedef detail::index_key index_key_t; + typedef IndexType > index_type; + typedef ipcdetail::index_key index_key_t; typedef typename index_type::iterator index_it; typedef typename index_type::value_type intrusive_value_type; - + //------------------------------- scoped_lock guard(m_header); //------------------------------- //Find name in index - detail::intrusive_compare_key key + ipcdetail::intrusive_compare_key key (name, std::char_traits::length(name)); index_it it = index.find(key); @@ -968,7 +972,7 @@ class segment_manager void *memory = iv; void *values = ctrl_data->value(); std::size_t num = ctrl_data->m_value_bytes/table.size; - + //Sanity check BOOST_ASSERT((ctrl_data->m_value_bytes % table.size) == 0); BOOST_ASSERT(sizeof(CharT) == ctrl_data->sizeof_char()); @@ -988,13 +992,13 @@ class segment_manager } template - bool priv_generic_named_destroy(const CharT *name, - IndexType > &index, - detail::in_place_interface &table, - detail::false_ is_intrusive_index) + bool priv_generic_named_destroy(const CharT *name, + IndexType > &index, + ipcdetail::in_place_interface &table, + ipcdetail::false_ is_intrusive_index) { (void)is_intrusive_index; - typedef IndexType > index_type; + typedef IndexType > index_type; typedef typename index_type::iterator index_it; typedef typename index_type::key_type key_type; @@ -1002,7 +1006,7 @@ class segment_manager scoped_lock guard(m_header); //------------------------------- //Try to find the name in the index - index_it it = index.find(key_type (name, + index_it it = index.find(key_type (name, std::char_traits::length(name))); //If not found, return false @@ -1016,22 +1020,22 @@ class segment_manager template bool priv_generic_named_destroy_impl - (const typename IndexType >::iterator &it, - IndexType > &index, - detail::in_place_interface &table) + (const typename IndexType >::iterator &it, + IndexType > &index, + ipcdetail::in_place_interface &table) { - typedef IndexType > index_type; + typedef IndexType > index_type; typedef typename index_type::iterator index_it; //Get allocation parameters block_header_t *ctrl_data = reinterpret_cast - (detail::get_pointer(it->second.m_ptr)); + (ipcdetail::to_raw_pointer(it->second.m_ptr)); char *stored_name = static_cast(static_cast(const_cast(it->first.name()))); (void)stored_name; - //Check if the distance between the name pointer and the memory pointer + //Check if the distance between the name pointer and the memory pointer //is correct (this can detect incorrect type in destruction) - std::size_t num = ctrl_data->m_value_bytes/table.size; + std::size_t num = ctrl_data->m_value_bytes/table.size; void *values = ctrl_data->value(); //Sanity check @@ -1047,7 +1051,7 @@ class segment_manager void *memory; if(is_node_index_t::value){ - index_it *ihdr = block_header_t:: + index_it *ihdr = block_header_t::template to_first_header(ctrl_data); ihdr->~index_it(); memory = ihdr; @@ -1057,32 +1061,32 @@ class segment_manager } //Call destructors and free memory - std::size_t destroyed; + std::size_t destroyed; table.destroy_n(values, num, destroyed); this->deallocate(memory); return true; } template - void * priv_generic_named_construct(std::size_t type, + void * priv_generic_named_construct(unsigned char type, const CharT *name, - std::size_t num, - bool try2find, + size_type num, + bool try2find, bool dothrow, - detail::in_place_interface &table, - IndexType > &index, - detail::true_ is_intrusive) + ipcdetail::in_place_interface &table, + IndexType > &index, + ipcdetail::true_ is_intrusive) { (void)is_intrusive; - std::size_t namelen = std::char_traits::length(name); + std::size_t namelen = std::char_traits::length(name); - block_header_t block_info ( table.size*num - , table.alignment + block_header_t block_info ( size_type(table.size*num) + , size_type(table.alignment) , type , sizeof(CharT) , namelen); - typedef IndexType > index_type; + typedef IndexType > index_type; typedef typename index_type::iterator index_it; typedef std::pair index_ib; @@ -1091,12 +1095,12 @@ class segment_manager //------------------------------- //Insert the node. This can throw. //First, we want to know if the key is already present before - //we allocate any memory, and if the key is not present, we + //we allocate any memory, and if the key is not present, we //want to allocate all memory in a single buffer that will //contain the name and the user buffer. // //Since equal_range(key) + insert(hint, value) approach is - //quite inefficient in container implementations + //quite inefficient in container implementations //(they re-test if the position is correct), I've chosen //to insert the node, do an ugly un-const cast and modify //the key (which is a smart pointer) to an equivalent one @@ -1106,7 +1110,7 @@ class segment_manager typedef typename index_type::value_type intrusive_value_type; BOOST_TRY{ - detail::intrusive_compare_key key(name, namelen); + ipcdetail::intrusive_compare_key key(name, namelen); insert_ret = index.insert_check(key, commit_data); } //Ignore exceptions @@ -1134,18 +1138,18 @@ class segment_manager } //Allocates buffer for name + data, this can throw (it hurts) - void *buffer_ptr; + void *buffer_ptr; //Check if there is enough memory if(dothrow){ buffer_ptr = this->allocate - (block_info.total_size_with_header()); + (block_info.template total_size_with_header()); } else{ buffer_ptr = this->allocate - (block_info.total_size_with_header(), std::nothrow_t()); + (block_info.template total_size_with_header(), std::nothrow_t()); if(!buffer_ptr) - return 0; + return 0; } //Now construct the intrusive hook plus the header @@ -1172,7 +1176,7 @@ class segment_manager //Avoid constructions if constructor is trivial //Build scoped ptr to avoid leaks with constructor exception - detail::mem_algo_deallocator mem + ipcdetail::mem_algo_deallocator mem (buffer_ptr, *static_cast(this)); //Initialize the node value_eraser to erase inserted node @@ -1180,9 +1184,9 @@ class segment_manager //the memory allocation as the intrusive value is built in that //memory value_eraser v_eraser(index, it); - + //Construct array, this can throw - detail::array_construct(ptr, num, table); + ipcdetail::array_construct(ptr, num, table); //Release rollbacks since construction was successful v_eraser.release(); @@ -1193,25 +1197,25 @@ class segment_manager //!Generic named new function for //!named functions template - void * priv_generic_named_construct(std::size_t type, + void * priv_generic_named_construct(unsigned char type, const CharT *name, - std::size_t num, - bool try2find, + size_type num, + bool try2find, bool dothrow, - detail::in_place_interface &table, - IndexType > &index, - detail::false_ is_intrusive) + ipcdetail::in_place_interface &table, + IndexType > &index, + ipcdetail::false_ is_intrusive) { (void)is_intrusive; std::size_t namelen = std::char_traits::length(name); - block_header_t block_info ( table.size*num - , table.alignment + block_header_t block_info ( size_type(table.size*num) + , size_type(table.alignment) , type , sizeof(CharT) , namelen); - typedef IndexType > index_type; + typedef IndexType > index_type; typedef typename index_type::key_type key_type; typedef typename index_type::mapped_type mapped_type; typedef typename index_type::value_type value_type; @@ -1223,12 +1227,12 @@ class segment_manager //------------------------------- //Insert the node. This can throw. //First, we want to know if the key is already present before - //we allocate any memory, and if the key is not present, we + //we allocate any memory, and if the key is not present, we //want to allocate all memory in a single buffer that will //contain the name and the user buffer. // //Since equal_range(key) + insert(hint, value) approach is - //quite inefficient in container implementations + //quite inefficient in container implementations //(they re-test if the position is correct), I've chosen //to insert the node, do an ugly un-const cast and modify //the key (which is a smart pointer) to an equivalent one @@ -1251,7 +1255,7 @@ class segment_manager if(!insert_ret.second){ if(try2find){ block_header_t *hdr = static_cast - (detail::get_pointer(it->second.m_ptr)); + (ipcdetail::to_raw_pointer(it->second.m_ptr)); return hdr->value(); } return 0; @@ -1261,22 +1265,22 @@ class segment_manager value_eraser v_eraser(index, it); //Allocates buffer for name + data, this can throw (it hurts) - void *buffer_ptr; + void *buffer_ptr; block_header_t * hdr; //Allocate and construct the headers if(is_node_index_t::value){ - std::size_t total_size = block_info.total_size_with_header(); + size_type total_size = block_info.template total_size_with_header(); if(dothrow){ buffer_ptr = this->allocate(total_size); } else{ buffer_ptr = this->allocate(total_size, std::nothrow_t()); if(!buffer_ptr) - return 0; + return 0; } index_it *idr = new(buffer_ptr) index_it(it); - hdr = block_header_t::from_first_header(idr); + hdr = block_header_t::template from_first_header(idr); } else{ if(dothrow){ @@ -1285,7 +1289,7 @@ class segment_manager else{ buffer_ptr = this->allocate(block_info.total_size(), std::nothrow_t()); if(!buffer_ptr) - return 0; + return 0; } hdr = static_cast(buffer_ptr); } @@ -1299,17 +1303,17 @@ class segment_manager std::char_traits::copy(name_ptr, name, namelen+1); //Do the ugly cast, please mama, forgive me! - //This new key points to an identical string, so it must have the + //This new key points to an identical string, so it must have the //same position than the overwritten key according to the predicate const_cast(it->first).name(name_ptr); it->second.m_ptr = hdr; //Build scoped ptr to avoid leaks with constructor exception - detail::mem_algo_deallocator mem + ipcdetail::mem_algo_deallocator mem (buffer_ptr, *static_cast(this)); //Construct array, this can throw - detail::array_construct(ptr, num, table); + ipcdetail::array_construct(ptr, num, table); //All constructors successful, we don't want to release memory mem.release(); @@ -1332,7 +1336,7 @@ class segment_manager if(use_lock){ local.lock(); } - return scoped_lock(boost::interprocess::move(local)); + return scoped_lock(boost::move(local)); } //!This struct includes needed data and derives from @@ -1342,7 +1346,7 @@ class segment_manager { named_index_t m_named_index; unique_index_t m_unique_index; - + header_t(Base *restricted_segment_mngr) : m_named_index (restricted_segment_mngr) , m_unique_index(restricted_segment_mngr) diff --git a/3party/boost/boost/interprocess/shared_memory_object.hpp b/3party/boost/boost/interprocess/shared_memory_object.hpp index 98fa5c4297..f3bc7ba173 100644 --- a/3party/boost/boost/interprocess/shared_memory_object.hpp +++ b/3party/boost/boost/interprocess/shared_memory_object.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include @@ -28,7 +28,7 @@ #if defined(BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS_ONLY) # include //System V shared memory... #elif defined(BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS) -# include //O_CREAT, O_*... +# include //O_CREAT, O_*... # include //shm_xxx # include //ftruncate, close # include //mode_t, S_IRWXG, S_IRWXO, S_IRWXU, @@ -53,7 +53,7 @@ class shared_memory_object { /// @cond //Non-copyable and non-assignable - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(shared_memory_object) + BOOST_MOVABLE_BUT_NOT_COPYABLE(shared_memory_object) /// @endcond public: @@ -63,34 +63,34 @@ class shared_memory_object //!Creates a shared memory object with name "name" and mode "mode", with the access mode "mode" //!If the file previously exists, throws an error.*/ shared_memory_object(create_only_t, const char *name, mode_t mode, const permissions &perm = permissions()) - { this->priv_open_or_create(detail::DoCreate, name, mode, perm); } + { this->priv_open_or_create(ipcdetail::DoCreate, name, mode, perm); } //!Tries to create a shared memory object with name "name" and mode "mode", with the //!access mode "mode". If the file previously exists, it tries to open it with mode "mode". //!Otherwise throws an error. shared_memory_object(open_or_create_t, const char *name, mode_t mode, const permissions &perm = permissions()) - { this->priv_open_or_create(detail::DoOpenOrCreate, name, mode, perm); } + { this->priv_open_or_create(ipcdetail::DoOpenOrCreate, name, mode, perm); } - //!Tries to open a shared memory object with name "name", with the access mode "mode". + //!Tries to open a shared memory object with name "name", with the access mode "mode". //!If the file does not previously exist, it throws an error. shared_memory_object(open_only_t, const char *name, mode_t mode) - { this->priv_open_or_create(detail::DoOpen, name, mode, permissions()); } + { this->priv_open_or_create(ipcdetail::DoOpen, name, mode, permissions()); } - //!Moves the ownership of "moved"'s shared memory object to *this. - //!After the call, "moved" does not represent any shared memory object. + //!Moves the ownership of "moved"'s shared memory object to *this. + //!After the call, "moved" does not represent any shared memory object. //!Does not throw - shared_memory_object(BOOST_INTERPROCESS_RV_REF(shared_memory_object) moved) - : m_handle(file_handle_t(detail::invalid_file())) + shared_memory_object(BOOST_RV_REF(shared_memory_object) moved) + : m_handle(file_handle_t(ipcdetail::invalid_file())) { this->swap(moved); } //!Moves the ownership of "moved"'s shared memory to *this. - //!After the call, "moved" does not represent any shared memory. + //!After the call, "moved" does not represent any shared memory. //!Does not throw - shared_memory_object &operator=(BOOST_INTERPROCESS_RV_REF(shared_memory_object) moved) - { - shared_memory_object tmp(boost::interprocess::move(moved)); + shared_memory_object &operator=(BOOST_RV_REF(shared_memory_object) moved) + { + shared_memory_object tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps the shared_memory_objects. Does not throw @@ -99,7 +99,7 @@ class shared_memory_object //!Erases a shared memory object from the system. //!Returns false on error. Never throws static bool remove(const char *name); - + //!Sets the size of the shared memory mapping void truncate(offset_t length); @@ -132,7 +132,7 @@ class shared_memory_object void priv_close(); //!Closes a previously opened file mapping. Never throws. - bool priv_open_or_create(detail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm); + bool priv_open_or_create(ipcdetail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm); file_handle_t m_handle; mode_t m_mode; @@ -142,11 +142,11 @@ class shared_memory_object /// @cond -inline shared_memory_object::shared_memory_object() - : m_handle(file_handle_t(detail::invalid_file())) +inline shared_memory_object::shared_memory_object() + : m_handle(file_handle_t(ipcdetail::invalid_file())) {} -inline shared_memory_object::~shared_memory_object() +inline shared_memory_object::~shared_memory_object() { this->priv_close(); } @@ -154,18 +154,18 @@ inline const char *shared_memory_object::get_name() const { return m_filename.c_str(); } inline bool shared_memory_object::get_size(offset_t &size) const -{ return detail::get_file_size((file_handle_t)m_handle, size); } +{ return ipcdetail::get_file_size((file_handle_t)m_handle, size); } inline void shared_memory_object::swap(shared_memory_object &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_filename.swap(other.m_filename); + m_filename.swap(other.m_filename); } inline mapping_handle_t shared_memory_object::get_mapping_handle() const { - return detail::mapping_handle_from_file_handle(m_handle); + return ipcdetail::mapping_handle_from_file_handle(m_handle); } inline mode_t shared_memory_object::get_mode() const @@ -174,11 +174,11 @@ inline mode_t shared_memory_object::get_mode() const #if !defined(BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS) inline bool shared_memory_object::priv_open_or_create - (detail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm) + (ipcdetail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm) { m_filename = filename; std::string shmfile; - detail::create_tmp_and_clean_old_and_get_filename(filename, shmfile); + ipcdetail::create_tmp_and_clean_old_and_get_filename(filename, shmfile); //Set accesses if (mode != read_write && mode != read_only){ @@ -187,14 +187,14 @@ inline bool shared_memory_object::priv_open_or_create } switch(type){ - case detail::DoOpen: - m_handle = detail::open_existing_file(shmfile.c_str(), mode, true); + case ipcdetail::DoOpen: + m_handle = ipcdetail::open_existing_file(shmfile.c_str(), mode, true); break; - case detail::DoCreate: - m_handle = detail::create_new_file(shmfile.c_str(), mode, perm, true); + case ipcdetail::DoCreate: + m_handle = ipcdetail::create_new_file(shmfile.c_str(), mode, perm, true); break; - case detail::DoOpenOrCreate: - m_handle = detail::create_or_open_file(shmfile.c_str(), mode, perm, true); + case ipcdetail::DoOpenOrCreate: + m_handle = ipcdetail::create_or_open_file(shmfile.c_str(), mode, perm, true); break; default: { @@ -204,7 +204,7 @@ inline bool shared_memory_object::priv_open_or_create } //Check for error - if(m_handle == detail::invalid_file()){ + if(m_handle == ipcdetail::invalid_file()){ error_info err = system_error_code(); this->priv_close(); throw interprocess_exception(err); @@ -219,8 +219,8 @@ inline bool shared_memory_object::remove(const char *filename) try{ //Make sure a temporary path is created for shared memory std::string shmfile; - detail::tmp_filename(filename, shmfile); - return detail::delete_file(shmfile.c_str()); + ipcdetail::tmp_filename(filename, shmfile); + return ipcdetail::delete_file(shmfile.c_str()); } catch(...){ return false; @@ -229,7 +229,7 @@ inline bool shared_memory_object::remove(const char *filename) inline void shared_memory_object::truncate(offset_t length) { - if(!detail::truncate_file(m_handle, length)){ + if(!ipcdetail::truncate_file(m_handle, length)){ error_info err = system_error_code(); throw interprocess_exception(err); } @@ -237,9 +237,9 @@ inline void shared_memory_object::truncate(offset_t length) inline void shared_memory_object::priv_close() { - if(m_handle != detail::invalid_file()){ - detail::close_file(m_handle); - m_handle = detail::invalid_file(); + if(m_handle != ipcdetail::invalid_file()){ + ipcdetail::close_file(m_handle); + m_handle = ipcdetail::invalid_file(); } } @@ -251,7 +251,7 @@ namespace shared_memory_object_detail { #if defined(__FreeBSD__) -inline bool use_filesistem_based_posix() +inline bool use_filesystem_based_posix() { int jailed = 0; std::size_t len = sizeof(jailed); @@ -268,22 +268,22 @@ inline bool use_filesistem_based_posix() } //shared_memory_object_detail inline bool shared_memory_object::priv_open_or_create - (detail::create_enum_t type, + (ipcdetail::create_enum_t type, const char *filename, mode_t mode, const permissions &perm) { #if defined(BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY) const bool add_leading_slash = false; #elif defined(BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY) - const bool add_leading_slash = !shared_memory_object_detail::use_filesistem_based_posix(); + const bool add_leading_slash = !shared_memory_object_detail::use_filesystem_based_posix(); #else const bool add_leading_slash = true; #endif if(add_leading_slash){ - detail::add_leading_slash(filename, m_filename); + ipcdetail::add_leading_slash(filename, m_filename); } else{ - detail::create_tmp_and_clean_old_and_get_filename(filename, m_filename); + ipcdetail::create_tmp_and_clean_old_and_get_filename(filename, m_filename); } //Create new mapping @@ -301,13 +301,13 @@ inline bool shared_memory_object::priv_open_or_create int unix_perm = perm.get_permissions(); switch(type){ - case detail::DoOpen: + case ipcdetail::DoOpen: { //No oflag addition m_handle = shm_open(m_filename.c_str(), oflag, unix_perm); } break; - case detail::DoCreate: + case ipcdetail::DoCreate: { oflag |= (O_CREAT | O_EXCL); m_handle = shm_open(m_filename.c_str(), oflag, unix_perm); @@ -316,7 +316,7 @@ inline bool shared_memory_object::priv_open_or_create } } break; - case detail::DoOpenOrCreate: + case ipcdetail::DoOpenOrCreate: { oflag |= O_CREAT; //We need a loop to change permissions correctly using fchmod, since @@ -361,15 +361,15 @@ inline bool shared_memory_object::remove(const char *filename) #if defined(BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY) const bool add_leading_slash = false; #elif defined(BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY) - const bool add_leading_slash = !shared_memory_object_detail::use_filesistem_based_posix(); + const bool add_leading_slash = !shared_memory_object_detail::use_filesystem_based_posix(); #else const bool add_leading_slash = true; #endif if(add_leading_slash){ - detail::add_leading_slash(filename, file_str); + ipcdetail::add_leading_slash(filename, file_str); } else{ - detail::tmp_filename(filename, file_str); + ipcdetail::tmp_filename(filename, file_str); } return 0 == shm_unlink(file_str.c_str()); } diff --git a/3party/boost/boost/interprocess/smart_ptr/deleter.hpp b/3party/boost/boost/interprocess/smart_ptr/deleter.hpp index 7e954a7ced..3a07ccd8f4 100644 --- a/3party/boost/boost/interprocess/smart_ptr/deleter.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/deleter.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009. +// (C) Copyright Ion Gaztanaga 2007-2011. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -20,15 +20,15 @@ #include #include #include -#include +#include //!\file //!Describes the functor to delete objects from the segment. namespace boost { -namespace interprocess { +namespace interprocess { -//!A deleter that uses the segment manager's destroy_ptr +//!A deleter that uses the segment manager's destroy_ptr //!function to destroy the passed pointer resource. //! //!This deleter is used @@ -36,12 +36,14 @@ template class deleter { public: - typedef typename boost::pointer_to_other - ::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; private: - typedef typename boost::pointer_to_other - ::type segment_manager_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type segment_manager_pointer; segment_manager_pointer mp_mngr; @@ -51,10 +53,10 @@ class deleter {} void operator()(const pointer &p) - { mp_mngr->destroy_ptr(detail::get_pointer(p)); } + { mp_mngr->destroy_ptr(ipcdetail::to_raw_pointer(p)); } }; -} //namespace interprocess { +} //namespace interprocess { } //namespace boost { #include diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp index 46baf818e5..7daaee6ea4 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp @@ -4,7 +4,7 @@ // // (C) Copyright Peter Dimov and Multi Media Ltd. 2001, 2002, 2003 // (C) Copyright Peter Dimov 2004-2005 -// (C) Copyright Ion Gaztanaga 2006-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-2011. 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) // @@ -24,16 +24,17 @@ #include #include -#include +#include #include #include #include +#include #include #include // std::less namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ template class weak_count; @@ -42,21 +43,32 @@ template class shared_count { public: - typedef typename boost::pointer_to_other - ::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; private: typedef sp_counted_impl_pd counted_impl; - typedef typename boost::pointer_to_other - ::type counted_impl_ptr; - typedef typename boost::pointer_to_other - ::type counted_base_ptr; - typedef typename VoidAllocator::template rebind - ::other counted_impl_allocator; - typedef typename boost::pointer_to_other - ::type const_deleter_pointer; - typedef typename boost::pointer_to_other - ::type const_allocator_pointer; + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type counted_impl_ptr; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type counted_base_ptr; + + typedef boost::container::allocator_traits vallocator_traits; + + typedef typename vallocator_traits::template + portable_rebind_alloc::type counted_impl_allocator; + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_deleter_pointer; + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_allocator_pointer; pointer m_px; counted_impl_ptr m_pi; @@ -87,12 +99,12 @@ class shared_count counted_impl_allocator alloc(a); m_pi = alloc.allocate(1); //Anti-exception deallocator - scoped_ptr > deallocator(m_pi, alloc); //It's more correct to use VoidAllocator::construct but //this needs copy constructor and we don't like it - new(detail::get_pointer(m_pi))counted_impl(p, a, d); + new(ipcdetail::to_raw_pointer(m_pi))counted_impl(p, a, d); deallocator.release(); } } @@ -104,8 +116,8 @@ class shared_count } ~shared_count() // nothrow - { - if( m_pi != 0 ) + { + if(m_pi) m_pi->release(); } @@ -145,10 +157,10 @@ class shared_count } } - const pointer &get_pointer() const + const pointer &to_raw_pointer() const { return m_px; } - pointer &get_pointer() + pointer &to_raw_pointer() { return m_px; } shared_count & operator= (shared_count const & r) // nothrow @@ -177,7 +189,7 @@ class shared_count } void swap(shared_count & r) // nothrow - { detail::do_swap(m_px, r.m_px); detail::do_swap(m_pi, r.m_pi); } + { ipcdetail::do_swap(m_px, r.m_px); ipcdetail::do_swap(m_pi, r.m_pi); } long use_count() const // nothrow { return m_pi != 0? m_pi->use_count(): 0; } @@ -213,15 +225,20 @@ template class weak_count { public: - typedef typename boost::pointer_to_other - ::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; private: - typedef sp_counted_impl_pd counted_impl; - typedef typename boost::pointer_to_other - ::type counted_impl_ptr; - typedef typename boost::pointer_to_other - ::type counted_base_ptr; + + typedef sp_counted_impl_pd counted_impl; + + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type counted_impl_ptr; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type counted_base_ptr; pointer m_px; counted_impl_ptr m_pi; @@ -288,7 +305,7 @@ class weak_count } void swap(weak_count & r) // nothrow - { detail::do_swap(m_px, r.m_px); detail::do_swap(m_pi, r.m_pi); } + { ipcdetail::do_swap(m_px, r.m_px); ipcdetail::do_swap(m_pi, r.m_pi); } long use_count() const // nothrow { return m_pi != 0? m_pi->use_count() : 0; } @@ -310,7 +327,7 @@ template const & a, weak_count const & b) { return a.internal_less(b); } -} // namespace detail +} // namespace ipcdetail } // namespace interprocess } // namespace boost diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp index f0f8ab8cd5..24d96ee482 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009. +// (C) Copyright Ion Gaztanaga 2007-2011. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp index e529fcc4c7..edb39eeeb3 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp @@ -9,7 +9,7 @@ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. // Copyright 2004-2005 Peter Dimov -// Copyright 2007-2009 Ion Gaztanaga +// Copyright 2007-2011 Ion Gaztanaga // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at @@ -32,7 +32,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { class sp_counted_base { @@ -54,7 +54,7 @@ public: void add_ref_copy() { - detail::atomic_inc32( &use_count_ ); + ipcdetail::atomic_inc32( &use_count_ ); } bool add_ref_lock() // true on success @@ -63,25 +63,25 @@ public: { boost::uint32_t tmp = static_cast< boost::uint32_t const volatile& >( use_count_ ); if( tmp == 0 ) return false; - if( detail::atomic_cas32( &use_count_, tmp + 1, tmp ) == tmp ) + if( ipcdetail::atomic_cas32( &use_count_, tmp + 1, tmp ) == tmp ) return true; } } bool ref_release() // nothrow - { return 1 == detail::atomic_dec32( &use_count_ ); } + { return 1 == ipcdetail::atomic_dec32( &use_count_ ); } void weak_add_ref() // nothrow - { detail::atomic_inc32( &weak_count_ ); } + { ipcdetail::atomic_inc32( &weak_count_ ); } bool weak_release() // nothrow - { return 1 == detail::atomic_dec32( &weak_count_ ); } + { return 1 == ipcdetail::atomic_dec32( &weak_count_ ); } long use_count() const // nothrow { return (long)static_cast( use_count_ ); } }; -} // namespace detail +} // namespace ipcdetail } // namespace interprocess diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp index 9d799fae0d..6a46bb75e6 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp @@ -26,13 +26,14 @@ #include #include #include -#include +#include +#include namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { //!A deleter for scoped_ptr that deallocates the memory //!allocated for an object using a STL allocator. @@ -40,10 +41,10 @@ template struct scoped_ptr_dealloc_functor { typedef typename Allocator::pointer pointer; - typedef detail::integral_constant::value> alloc_version; - typedef detail::integral_constant allocator_v1; - typedef detail::integral_constant allocator_v2; + typedef ipcdetail::integral_constant allocator_v1; + typedef ipcdetail::integral_constant allocator_v2; private: void priv_deallocate(const typename Allocator::pointer &p, allocator_v1) @@ -62,28 +63,36 @@ struct scoped_ptr_dealloc_functor { if (ptr) priv_deallocate(ptr, alloc_version()); } }; + + template -class sp_counted_impl_pd +class sp_counted_impl_pd : public sp_counted_base - , A::template rebind< sp_counted_impl_pd >::other + , boost::container::allocator_traits::template + portable_rebind_alloc< sp_counted_impl_pd >::type , D // copy constructor must not throw { private: typedef sp_counted_impl_pd this_type; - typedef typename A::template rebind - ::other this_allocator; - typedef typename A::template rebind - ::other const_this_allocator; + typedef typename boost::container:: + allocator_traits::template + portable_rebind_alloc + < this_type >::type this_allocator; + typedef typename boost::container:: + allocator_traits::template + portable_rebind_alloc + < const this_type >::type const_this_allocator; typedef typename this_allocator::pointer this_pointer; sp_counted_impl_pd( sp_counted_impl_pd const & ); sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & ); - typedef typename boost::pointer_to_other - ::type const_deleter_pointer; - - typedef typename boost::pointer_to_other - ::type const_allocator_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_deleter_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_allocator_pointer; typedef typename D::pointer pointer; pointer m_ptr; @@ -115,7 +124,7 @@ class sp_counted_impl_pd scoped_ptr< this_type, scoped_ptr_dealloc_functor > deleter(this_ptr, a_copy); typedef typename this_allocator::value_type value_type; - detail::get_pointer(this_ptr)->~value_type(); + ipcdetail::to_raw_pointer(this_ptr)->~value_type(); } void release() // nothrow @@ -135,7 +144,7 @@ class sp_counted_impl_pd }; -} // namespace detail +} // namespace ipcdetail } // namespace interprocess diff --git a/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp b/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp index 5d1c98e698..9c8c7918f5 100644 --- a/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp @@ -14,8 +14,8 @@ #ifndef BOOST_INTERPROCESS_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED #define BOOST_INTERPROCESS_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED -#include #include +#include #include #include @@ -53,14 +53,14 @@ class enable_shared_from_this shared_ptr shared_from_this() { shared_ptr p(_internal_weak_this); - BOOST_ASSERT(detail::get_pointer(p.get()) == this); + BOOST_ASSERT(ipcdetail::to_raw_pointer(p.get()) == this); return p; } shared_ptr shared_from_this() const { shared_ptr p(_internal_weak_this); - BOOST_ASSERT(detail::get_pointer(p.get()) == this); + BOOST_ASSERT(ipcdetail::to_raw_pointer(p.get()) == this); return p; } diff --git a/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp index 86df285c6b..f6d5c8b77c 100644 --- a/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp @@ -22,7 +22,7 @@ #include #include -#include +#include #include // for std::less #include // for std::basic_ostream @@ -33,12 +33,12 @@ namespace interprocess { //!The intrusive_ptr class template stores a pointer to an object //!with an embedded reference count. intrusive_ptr is parameterized on -//!T (the type of the object pointed to) and VoidPointer(a void pointer type +//!T (the type of the object pointed to) and VoidPointer(a void pointer type //!that defines the type of pointer that intrusive_ptr will store). //!intrusive_ptr defines a class with a T* member whereas //!intrusive_ptr > defines a class with a offset_ptr member. //!Relies on unqualified calls to: -//! +//! //! void intrusive_ptr_add_ref(T * p); //! void intrusive_ptr_release(T * p); //! @@ -50,7 +50,9 @@ class intrusive_ptr { public: //!Provides the type of the internal stored pointer. - typedef typename boost::pointer_to_other::type pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; //!Provides the type of the stored pointer. typedef T element_type; @@ -67,39 +69,39 @@ class intrusive_ptr intrusive_ptr(): m_ptr(0) {} - //!Constructor. Copies pointer and if "p" is not zero and - //!"add_ref" is true calls intrusive_ptr_add_ref(get_pointer(p)). + //!Constructor. Copies pointer and if "p" is not zero and + //!"add_ref" is true calls intrusive_ptr_add_ref(to_raw_pointer(p)). //!Does not throw intrusive_ptr(const pointer &p, bool add_ref = true): m_ptr(p) { - if(m_ptr != 0 && add_ref) intrusive_ptr_add_ref(detail::get_pointer(m_ptr)); + if(m_ptr != 0 && add_ref) intrusive_ptr_add_ref(ipcdetail::to_raw_pointer(m_ptr)); } //!Copy constructor. Copies the internal pointer and if "p" is not - //!zero calls intrusive_ptr_add_ref(get_pointer(p)). Does not throw + //!zero calls intrusive_ptr_add_ref(to_raw_pointer(p)). Does not throw intrusive_ptr(intrusive_ptr const & rhs) : m_ptr(rhs.m_ptr) { - if(m_ptr != 0) intrusive_ptr_add_ref(detail::get_pointer(m_ptr)); + if(m_ptr != 0) intrusive_ptr_add_ref(ipcdetail::to_raw_pointer(m_ptr)); } //!Constructor from related. Copies the internal pointer and if "p" is not - //!zero calls intrusive_ptr_add_ref(get_pointer(p)). Does not throw + //!zero calls intrusive_ptr_add_ref(to_raw_pointer(p)). Does not throw template intrusive_ptr (intrusive_ptr const & rhs) : m_ptr(rhs.get()) { - if(m_ptr != 0) intrusive_ptr_add_ref(detail::get_pointer(m_ptr)); + if(m_ptr != 0) intrusive_ptr_add_ref(ipcdetail::to_raw_pointer(m_ptr)); } //!Destructor. If internal pointer is not 0, calls - //!intrusive_ptr_release(get_pointer(m_ptr)). Does not throw + //!intrusive_ptr_release(to_raw_pointer(m_ptr)). Does not throw ~intrusive_ptr() { - if(m_ptr != 0) intrusive_ptr_release(detail::get_pointer(m_ptr)); + if(m_ptr != 0) intrusive_ptr_release(ipcdetail::to_raw_pointer(m_ptr)); } - //!Assignment operator. Equivalent to intrusive_ptr(r).swap(*this). + //!Assignment operator. Equivalent to intrusive_ptr(r).swap(*this). //!Does not throw intrusive_ptr & operator=(intrusive_ptr const & rhs) { @@ -107,7 +109,7 @@ class intrusive_ptr return *this; } - //!Assignment from related. Equivalent to intrusive_ptr(r).swap(*this). + //!Assignment from related. Equivalent to intrusive_ptr(r).swap(*this). //!Does not throw template intrusive_ptr & operator= (intrusive_ptr const & rhs) @@ -116,14 +118,14 @@ class intrusive_ptr return *this; } - //!Assignment from pointer. Equivalent to intrusive_ptr(r).swap(*this). + //!Assignment from pointer. Equivalent to intrusive_ptr(r).swap(*this). //!Does not throw intrusive_ptr & operator=(pointer rhs) { this_type(rhs).swap(*this); return *this; } - + //!Returns a reference to the internal pointer. //!Does not throw pointer &get() @@ -162,7 +164,7 @@ class intrusive_ptr //!Exchanges the contents of the two smart pointers. //!Does not throw void swap(intrusive_ptr & rhs) - { detail::do_swap(m_ptr, rhs.m_ptr); } + { ipcdetail::do_swap(m_ptr, rhs.m_ptr); } /// @cond private: @@ -173,7 +175,7 @@ class intrusive_ptr //!Returns a.get() == b.get(). //!Does not throw template inline -bool operator==(intrusive_ptr const & a, +bool operator==(intrusive_ptr const & a, intrusive_ptr const & b) { return a.get() == b.get(); } @@ -215,11 +217,11 @@ bool operator!=(const typename intrusive_ptr::pointer &a, //!Returns a.get() < b.get(). //!Does not throw template inline -bool operator<(intrusive_ptr const & a, +bool operator<(intrusive_ptr const & a, intrusive_ptr const & b) -{ +{ return std::less::pointer>() - (a.get(), b.get()); + (a.get(), b.get()); } //!Exchanges the contents of the two intrusive_ptrs. @@ -231,7 +233,7 @@ void swap(intrusive_ptr & lhs, // operator<< template -inline std::basic_ostream & operator<< +inline std::basic_ostream & operator<< (std::basic_ostream & os, intrusive_ptr const & p) { os << p.get(); return os; } @@ -239,7 +241,7 @@ inline std::basic_ostream & operator<< //!Does not throw template inline typename boost::interprocess::intrusive_ptr::pointer - get_pointer(intrusive_ptr p) + to_raw_pointer(intrusive_ptr p) { return p.get(); } /*Emulates static cast operator. Does not throw*/ @@ -281,7 +283,7 @@ inline boost::interprocess::intrusive_ptrreinterpret_pointer_cast //!Returns p.get(). //!Does not throw template -inline T *get_pointer(boost::interprocess::intrusive_ptr p) +inline T *to_raw_pointer(boost::interprocess::intrusive_ptr p) { return p.get(); } #endif diff --git a/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp index 74fe1d6395..a3755d3592 100644 --- a/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp @@ -18,8 +18,8 @@ #include #include #include +#include #include -#include //!\file //!Describes the smart pointer scoped_ptr @@ -27,14 +27,14 @@ namespace boost { namespace interprocess { -//!scoped_ptr stores a pointer to a dynamically allocated object. +//!scoped_ptr stores a pointer to a dynamically allocated object. //!The object pointed to is guaranteed to be deleted, either on destruction //!of the scoped_ptr, or via an explicit reset. The user can avoid this //!deletion using release(). -//!scoped_ptr is parameterized on T (the type of the object pointed to) and +//!scoped_ptr is parameterized on T (the type of the object pointed to) and //!Deleter (the functor to be executed to delete the internal pointer). -//!The internal pointer will be of the same pointer type as typename -//!Deleter::pointer type (that is, if typename Deleter::pointer is +//!The internal pointer will be of the same pointer type as typename +//!Deleter::pointer type (that is, if typename Deleter::pointer is //!offset_ptr, the internal pointer will be offset_ptr). template class scoped_ptr @@ -45,18 +45,14 @@ class scoped_ptr scoped_ptr & operator=(scoped_ptr const &); typedef scoped_ptr this_type; - typedef typename detail::add_reference::type reference; + typedef typename ipcdetail::add_reference::type reference; /// @endcond public: typedef T element_type; typedef Deleter deleter_type; - typedef typename detail::pointer_type::type pointer; - - //!Provides the type of the internal stored pointer -// typedef typename boost::pointer_to_other -// ::type pointer; + typedef typename ipcdetail::pointer_type::type pointer; //!Constructs a scoped_ptr, storing a copy of p(which can be 0) and d. //!Does not throw. @@ -64,10 +60,10 @@ class scoped_ptr : Deleter(d), m_ptr(p) // throws if pointer/Deleter copy ctor throws {} - //!If the stored pointer is not 0, destroys the object pointed to by the stored pointer. + //!If the stored pointer is not 0, destroys the object pointed to by the stored pointer. //!calling the operator() of the stored deleter. Never throws ~scoped_ptr() - { + { if(m_ptr){ Deleter &del = static_cast(*this); del(m_ptr); @@ -82,7 +78,7 @@ class scoped_ptr //!Deletes the object pointed to by the stored pointer and then //!stores a copy of p and a copy of d. void reset(const pointer &p, const Deleter &d) // never throws - { BOOST_ASSERT(p == 0 || p != m_ptr); this_type(p).swap(*this); } + { BOOST_ASSERT(p == 0 || p != m_ptr); this_type(p, d).swap(*this); } //!Assigns internal pointer as 0 and returns previous pointer. This will //!avoid deletion on destructor @@ -129,7 +125,7 @@ class scoped_ptr //!Exchanges the internal pointer and deleter with other scoped_ptr //!Never throws. void swap(scoped_ptr & b) // never throws - { detail::do_swap(*this, b); detail::do_swap(m_ptr, b.m_ptr); } + { ipcdetail::do_swap(*this, b); ipcdetail::do_swap(m_ptr, b.m_ptr); } /// @cond private: @@ -146,7 +142,7 @@ void swap(scoped_ptr & a, scoped_ptr & b) //!Returns a copy of the stored pointer //!Never throws template inline -typename scoped_ptr::pointer get_pointer(scoped_ptr const & p) +typename scoped_ptr::pointer to_raw_pointer(scoped_ptr const & p) { return p.get(); } } // namespace interprocess @@ -155,7 +151,7 @@ typename scoped_ptr::pointer get_pointer(scoped_ptr const & p) #if defined(_MSC_VER) && (_MSC_VER < 1400) template inline -T *get_pointer(boost::interprocess::scoped_ptr const & p) +T *to_raw_pointer(boost::interprocess::scoped_ptr const & p) { return p.get(); } #endif diff --git a/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp index 9f6ef23152..5ede547a3f 100644 --- a/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp @@ -4,7 +4,7 @@ // // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. // (C) Copyright Peter Dimov 2001, 2002, 2003 -// (C) Copyright Ion Gaztanaga 2006-2009. +// (C) Copyright Ion Gaztanaga 2006-2011. // 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) @@ -24,12 +24,12 @@ #include #include #include -#include +#include #include #include #include #include -#include +#include #include // for std::swap #include // for std::less @@ -45,14 +45,14 @@ namespace interprocess{ template class weak_ptr; template class enable_shared_from_this; -namespace detail{ +namespace ipcdetail{ template inline void sp_enable_shared_from_this (shared_count const & pn ,enable_shared_from_this *pe ,T *ptr) - + { (void)ptr; if(pe != 0){ @@ -64,19 +64,19 @@ template inline void sp_enable_shared_from_this(shared_count const &, ...) {} -} // namespace detail +} // namespace ipcdetail -//!shared_ptr stores a pointer to a dynamically allocated object. -//!The object pointed to is guaranteed to be deleted when the last shared_ptr pointing to +//!shared_ptr stores a pointer to a dynamically allocated object. +//!The object pointed to is guaranteed to be deleted when the last shared_ptr pointing to //!it is destroyed or reset. //! -//!shared_ptr is parameterized on +//!shared_ptr is parameterized on //!T (the type of the object pointed to), VoidAllocator (the void allocator to be used -//!to allocate the auxiliary data) and Deleter (the deleter whose +//!to allocate the auxiliary data) and Deleter (the deleter whose //!operator() will be used to delete the object. //! -//!The internal pointer will be of the same pointer type as typename -//!VoidAllocator::pointer type (that is, if typename VoidAllocator::pointer is +//!The internal pointer will be of the same pointer type as typename +//!VoidAllocator::pointer type (that is, if typename VoidAllocator::pointer is //!offset_ptr, the internal pointer will be offset_ptr). //! //!Because the implementation uses reference counting, cycles of shared_ptr @@ -97,18 +97,21 @@ class shared_ptr typedef T element_type; typedef T value_type; - typedef typename boost::pointer_to_other - ::type pointer; - typedef typename detail::add_reference + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; - typedef typename boost::pointer_to_other - ::type const_deleter_pointer; - typedef typename boost::pointer_to_other - ::type const_allocator_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_deleter_pointer; + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type const_allocator_pointer; - BOOST_INTERPROCESS_COPYABLE_AND_MOVABLE(shared_ptr) + BOOST_COPYABLE_AND_MOVABLE(shared_ptr) public: //!Constructs an empty shared_ptr. @@ -122,31 +125,39 @@ class shared_ptr //!Requirements: Deleter and A's copy constructor must not throw. explicit shared_ptr(const pointer&p, const VoidAllocator &a = VoidAllocator(), const Deleter &d = Deleter()) : m_pn(p, a, d) - { + { //Check that the pointer passed is of the same type that //the pointer the allocator defines or it's a raw pointer - typedef typename boost::pointer_to_other::type ParameterPointer; - BOOST_STATIC_ASSERT((detail::is_same::value) || - (detail::is_pointer::value)); - detail::sp_enable_shared_from_this( m_pn, detail::get_pointer(p), detail::get_pointer(p) ); + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type ParameterPointer; + + BOOST_STATIC_ASSERT((ipcdetail::is_same::value) || + (ipcdetail::is_pointer::value)); + ipcdetail::sp_enable_shared_from_this( m_pn, ipcdetail::to_raw_pointer(p), ipcdetail::to_raw_pointer(p) ); } + //!Copy constructs a shared_ptr. If r is empty, constructs an empty shared_ptr. Otherwise, constructs + //!a shared_ptr that shares ownership with r. Never throws. + shared_ptr(const shared_ptr &r) + : m_pn(r.m_pn) // never throws + {} - //!Constructs a shared_ptr that shares ownership with r and stores p. + //!Constructs a shared_ptr that shares ownership with other and stores p. //!Postconditions: get() == p && use_count() == r.use_count(). //!Throws: nothing. shared_ptr(const shared_ptr &other, const pointer &p) : m_pn(other.m_pn, p) {} - //!If r is empty, constructs an empty shared_ptr. Otherwise, constructs + //!If r is empty, constructs an empty shared_ptr. Otherwise, constructs //!a shared_ptr that shares ownership with r. Never throws. template shared_ptr(shared_ptr const & r) : m_pn(r.m_pn) // never throws {} - //!Constructs a shared_ptr that shares ownership with r and stores + //!Constructs a shared_ptr that shares ownership with r and stores //!a copy of the pointer stored in r. template explicit shared_ptr(weak_ptr const & r) @@ -156,30 +167,30 @@ class shared_ptr //!Move-Constructs a shared_ptr that takes ownership of other resource and //!other is put in default-constructed state. //!Throws: nothing. - explicit shared_ptr(BOOST_INTERPROCESS_RV_REF(shared_ptr) other) + explicit shared_ptr(BOOST_RV_REF(shared_ptr) other) : m_pn() { this->swap(other); } /// @cond template - shared_ptr(shared_ptr const & r, detail::static_cast_tag) - : m_pn( pointer(static_cast(detail::get_pointer(r.m_pn.get_pointer()))) - , r.m_pn) + shared_ptr(shared_ptr const & r, ipcdetail::static_cast_tag) + : m_pn( pointer(static_cast(ipcdetail::to_raw_pointer(r.m_pn.to_raw_pointer()))) + , r.m_pn) {} template - shared_ptr(shared_ptr const & r, detail::const_cast_tag) - : m_pn( pointer(const_cast(detail::get_pointer(r.m_pn.get_pointer()))) - , r.m_pn) + shared_ptr(shared_ptr const & r, ipcdetail::const_cast_tag) + : m_pn( pointer(const_cast(ipcdetail::to_raw_pointer(r.m_pn.to_raw_pointer()))) + , r.m_pn) {} template - shared_ptr(shared_ptr const & r, detail::dynamic_cast_tag) - : m_pn( pointer(dynamic_cast(detail::get_pointer(r.m_pn.get_pointer()))) - , r.m_pn) + shared_ptr(shared_ptr const & r, ipcdetail::dynamic_cast_tag) + : m_pn( pointer(dynamic_cast(ipcdetail::to_raw_pointer(r.m_pn.to_raw_pointer()))) + , r.m_pn) { - if(!m_pn.get_pointer()){ // need to allocate new counter -- the cast failed - m_pn = detail::shared_count(); + if(!m_pn.to_raw_pointer()){ // need to allocate new counter -- the cast failed + m_pn = ipcdetail::shared_count(); } } /// @endcond @@ -195,7 +206,7 @@ class shared_ptr //!Equivalent to shared_ptr(r).swap(*this). //!Never throws - shared_ptr & operator=(BOOST_INTERPROCESS_COPY_ASSIGN_REF(shared_ptr) r) + shared_ptr & operator=(BOOST_COPY_ASSIGN_REF(shared_ptr) r) { m_pn = r.m_pn; // shared_count::op= doesn't throw return *this; @@ -203,7 +214,7 @@ class shared_ptr //!Move-assignment. Equivalent to shared_ptr(other).swap(*this). //!Never throws - shared_ptr & operator=(BOOST_INTERPROCESS_RV_REF(shared_ptr) other) // never throws + shared_ptr & operator=(BOOST_RV_REF(shared_ptr) other) // never throws { this_type(other).swap(*this); return *this; @@ -212,21 +223,23 @@ class shared_ptr //!This is equivalent to: //!this_type().swap(*this); void reset() - { - this_type().swap(*this); + { + this_type().swap(*this); } //!This is equivalent to: //!this_type(p, a, d).swap(*this); template void reset(const Pointer &p, const VoidAllocator &a = VoidAllocator(), const Deleter &d = Deleter()) - { + { //Check that the pointer passed is of the same type that //the pointer the allocator defines or it's a raw pointer - typedef typename boost::pointer_to_other::type ParameterPointer; - BOOST_STATIC_ASSERT((detail::is_same::value) || - (detail::is_pointer::value)); - this_type(p, a, d).swap(*this); + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type ParameterPointer; + BOOST_STATIC_ASSERT((ipcdetail::is_same::value) || + (ipcdetail::is_pointer::value)); + this_type(p, a, d).swap(*this); } template @@ -238,17 +251,17 @@ class shared_ptr //!Returns a reference to the //!pointed type reference operator* () const // never throws - { BOOST_ASSERT(m_pn.get_pointer() != 0); return *m_pn.get_pointer(); } + { BOOST_ASSERT(m_pn.to_raw_pointer() != 0); return *m_pn.to_raw_pointer(); } - //!Returns the pointer pointing + //!Returns the pointer pointing //!to the owned object pointer operator-> () const // never throws - { BOOST_ASSERT(m_pn.get_pointer() != 0); return m_pn.get_pointer(); } + { BOOST_ASSERT(m_pn.to_raw_pointer() != 0); return m_pn.to_raw_pointer(); } - //!Returns the pointer pointing + //!Returns the pointer pointing //!to the owned object pointer get() const // never throws - { return m_pn.get_pointer(); } + { return m_pn.to_raw_pointer(); } /// @cond // implicit conversion to "bool" @@ -256,13 +269,13 @@ class shared_ptr typedef void (this_type::*unspecified_bool_type)() const; operator unspecified_bool_type() const // never throws - { return !m_pn.get_pointer() ? 0 : &this_type::unspecified_bool_type_func; } + { return !m_pn.to_raw_pointer() ? 0 : &this_type::unspecified_bool_type_func; } /// @endcond //!Not operator. //!Returns true if this->get() != 0, false otherwise bool operator! () const // never throws - { return !m_pn.get_pointer(); } + { return !m_pn.to_raw_pointer(); } //!Returns use_count() == 1. //!unique() might be faster than use_count() @@ -284,7 +297,7 @@ class shared_ptr /// @cond - template + template bool _internal_less(shared_ptr const & rhs) const { return m_pn < rhs.m_pn; } @@ -299,46 +312,46 @@ class shared_ptr template friend class shared_ptr; template friend class weak_ptr; - detail::shared_count m_pn; // reference counter + ipcdetail::shared_count m_pn; // reference counter /// @endcond }; // shared_ptr -template inline +template inline bool operator==(shared_ptr const & a, shared_ptr const & b) { return a.get() == b.get(); } -template inline +template inline bool operator!=(shared_ptr const & a, shared_ptr const & b) { return a.get() != b.get(); } -template inline +template inline bool operator<(shared_ptr const & a, shared_ptr const & b) { return a._internal_less(b); } -template inline +template inline void swap(shared_ptr & a, shared_ptr & b) { a.swap(b); } template inline shared_ptr static_pointer_cast(shared_ptr const & r) -{ return shared_ptr(r, detail::static_cast_tag()); } +{ return shared_ptr(r, ipcdetail::static_cast_tag()); } -template inline +template inline shared_ptr const_pointer_cast(shared_ptr const & r) -{ return shared_ptr(r, detail::const_cast_tag()); } +{ return shared_ptr(r, ipcdetail::const_cast_tag()); } -template inline +template inline shared_ptr dynamic_pointer_cast(shared_ptr const & r) -{ return shared_ptr(r, detail::dynamic_cast_tag()); } +{ return shared_ptr(r, ipcdetail::dynamic_cast_tag()); } -// get_pointer() enables boost::mem_fn to recognize shared_ptr +// to_raw_pointer() enables boost::mem_fn to recognize shared_ptr template inline -T * get_pointer(shared_ptr const & p) +T * to_raw_pointer(shared_ptr const & p) { return p.get(); } // operator<< template inline -std::basic_ostream & operator<< +std::basic_ostream & operator<< (std::basic_ostream & os, shared_ptr const & p) { os << p.get(); return os; } @@ -368,14 +381,35 @@ inline typename managed_shared_ptr::type ); } +//!Returns an instance of a shared pointer constructed +//!with the default allocator and deleter from a pointer +//!of type T that has been allocated in the passed managed segment. +//!Does not throw, return null shared pointer in error. +template +inline typename managed_shared_ptr::type + make_managed_shared_ptr(T *constructed_object, ManagedMemory &managed_memory, std::nothrow_t) +{ + try{ + return typename managed_shared_ptr::type + ( constructed_object + , managed_memory.template get_allocator() + , managed_memory.template get_deleter() + ); + } + catch(...){ + return typename managed_shared_ptr::type(); + } +} + + } // namespace interprocess /// @cond #if defined(_MSC_VER) && (_MSC_VER < 1400) -// get_pointer() enables boost::mem_fn to recognize shared_ptr +// to_raw_pointer() enables boost::mem_fn to recognize shared_ptr template inline -T * get_pointer(boost::interprocess::shared_ptr const & p) +T * to_raw_pointer(boost::interprocess::shared_ptr const & p) { return p.get(); } #endif diff --git a/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp index 1e27cd77a5..89cdb1e6e2 100644 --- a/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include @@ -38,7 +38,7 @@ namespace interprocess{ /// @cond template class unique_ptr; -namespace detail { +namespace ipcdetail { template struct unique_ptr_error; @@ -48,7 +48,7 @@ struct unique_ptr_error > typedef unique_ptr type; }; -} //namespace detail { +} //namespace ipcdetail { /// @endcond //!Template unique_ptr stores a pointer to an object and deletes that object @@ -83,15 +83,15 @@ class unique_ptr { /// @cond struct nat {int for_bool_;}; - typedef typename detail::add_reference::type deleter_reference; - typedef typename detail::add_reference::type deleter_const_reference; + typedef typename ipcdetail::add_reference::type deleter_reference; + typedef typename ipcdetail::add_reference::type deleter_const_reference; /// @endcond public: typedef T element_type; typedef D deleter_type; - typedef typename detail::pointer_type::type pointer; + typedef typename ipcdetail::pointer_type::type pointer; //!Requires: D must be default constructible, and that construction must not //!throw an exception. D must not be a reference type. @@ -128,9 +128,9 @@ class unique_ptr //! //!Throws: nothing. unique_ptr(pointer p - ,typename detail::if_ + ,typename ipcdetail::if_ ,D - ,typename detail::add_reference::type>::type d) + ,typename ipcdetail::add_reference::type>::type d) : ptr_(p, d) {} @@ -143,7 +143,7 @@ class unique_ptr //! //!After the construction, u no longer owns a pointer. //![ Note: The deleter constructor can be implemented with - //! boost::interprocess::forward. -end note ] + //! boost::forward. -end note ] //! //!Postconditions: get() == value u.get() had before the construction. //!get_deleter() returns a reference to the internally stored deleter which @@ -151,8 +151,8 @@ class unique_ptr //!deleter() and u.get_deleter() both reference the same lvalue deleter. //! //!Throws: nothing. - unique_ptr(BOOST_INTERPROCESS_RV_REF(unique_ptr) u) - : ptr_(u.release(), boost::interprocess::forward(u.get_deleter())) + unique_ptr(BOOST_RV_REF(unique_ptr) u) + : ptr_(u.release(), boost::forward(u.get_deleter())) {} //!Requires: If D is not a reference type, construction of the deleter @@ -175,18 +175,18 @@ class unique_ptr //! //!Throws: nothing. template - unique_ptr(BOOST_INTERPROCESS_RV_REF_2_TEMPL_ARGS(unique_ptr, U, E) u, - typename detail::enable_if_c< - detail::is_convertible::pointer, pointer>::value && - detail::is_convertible::value && + unique_ptr(BOOST_RV_REF_2_TEMPL_ARGS(unique_ptr, U, E) u, + typename ipcdetail::enable_if_c< + ipcdetail::is_convertible::pointer, pointer>::value && + ipcdetail::is_convertible::value && ( - !detail::is_reference::value || - detail::is_same::value + !ipcdetail::is_reference::value || + ipcdetail::is_same::value ) , nat >::type = nat()) - : ptr_(const_cast&>(u).release(), boost::interprocess::move(u.get_deleter())) + : ptr_(const_cast&>(u).release(), boost::move(u.get_deleter())) {} //!Effects: If get() == 0 there are no effects. Otherwise get_deleter()(get()). @@ -208,10 +208,10 @@ class unique_ptr //!Returns: *this. //! //!Throws: nothing. - unique_ptr& operator=(BOOST_INTERPROCESS_RV_REF(unique_ptr) u) + unique_ptr& operator=(BOOST_RV_REF(unique_ptr) u) { reset(u.release()); - ptr_.second() = boost::interprocess::move(u.get_deleter()); + ptr_.second() = boost::move(u.get_deleter()); return *this; } @@ -230,10 +230,10 @@ class unique_ptr //! //!Throws: nothing. template - unique_ptr& operator=(BOOST_INTERPROCESS_RV_REF_2_TEMPL_ARGS(unique_ptr, U, E) u) + unique_ptr& operator=(BOOST_RV_REF_2_TEMPL_ARGS(unique_ptr, U, E) u) { reset(u.release()); - ptr_.second() = boost::interprocess::move(u.get_deleter()); + ptr_.second() = boost::move(u.get_deleter()); return *this; } @@ -255,7 +255,7 @@ class unique_ptr //!Requires: get() != 0. //!Returns: *get(). //!Throws: nothing. - typename detail::add_reference::type operator*() const + typename ipcdetail::add_reference::type operator*() const { return *ptr_.first(); } //!Requires: get() != 0. @@ -272,20 +272,20 @@ class unique_ptr //!Returns: A reference to the stored deleter. //! //!Throws: nothing. - deleter_reference get_deleter() + deleter_reference get_deleter() { return ptr_.second(); } //!Returns: A const reference to the stored deleter. //! //!Throws: nothing. - deleter_const_reference get_deleter() const + deleter_const_reference get_deleter() const { return ptr_.second(); } //!Returns: An unspecified value that, when used in boolean //!contexts, is equivalent to get() != 0. //! //!Throws: nothing. - operator int nat::*() const + operator int nat::*() const { return ptr_.first() ? &nat::for_bool_ : 0; } //!Postcondition: get() == 0. @@ -325,12 +325,12 @@ class unique_ptr /// @cond private: boost::compressed_pair ptr_; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(unique_ptr) + BOOST_MOVABLE_BUT_NOT_COPYABLE(unique_ptr) template unique_ptr(unique_ptr&); - template unique_ptr(U&, typename detail::unique_ptr_error::type = 0); - + template unique_ptr(U&, typename ipcdetail::unique_ptr_error::type = 0); + template unique_ptr& operator=(unique_ptr&); - template typename detail::unique_ptr_error::type operator=(U&); + template typename ipcdetail::unique_ptr_error::type operator=(U&); /// @endcond }; /* @@ -338,12 +338,12 @@ template class unique_ptr { struct nat {int for_bool_;}; - typedef typename detail::add_reference::type deleter_reference; - typedef typename detail::add_reference::type deleter_const_reference; + typedef typename ipcdetail::add_reference::type deleter_reference; + typedef typename ipcdetail::add_reference::type deleter_const_reference; public: typedef T element_type; typedef D deleter_type; - typedef typename detail::pointer_type::type pointer; + typedef typename ipcdetail::pointer_type::type pointer; // constructors unique_ptr() : ptr_(pointer()) {} @@ -351,7 +351,7 @@ public: unique_ptr(pointer p, typename if_< boost::is_reference, D, - typename detail::add_reference::type>::type d) + typename ipcdetail::add_reference::type>::type d) : ptr_(p, d) {} unique_ptr(const unique_ptr& u) : ptr_(const_cast(u).release(), u.get_deleter()) {} @@ -374,7 +374,7 @@ public: } // observers - typename detail::add_reference::type operator[](std::size_t i) const {return ptr_.first()[i];} + typename ipcdetail::add_reference::type operator[](std::size_t i) const {return ptr_.first()[i];} pointer get() const {return ptr_.first();} deleter_reference get_deleter() {return ptr_.second();} deleter_const_reference get_deleter() const {return ptr_.second();} @@ -406,22 +406,22 @@ private: typename boost::enable_if >::type* = 0); unique_ptr(unique_ptr&); - template unique_ptr(U&, typename detail::unique_ptr_error::type = 0); + template unique_ptr(U&, typename ipcdetail::unique_ptr_error::type = 0); unique_ptr& operator=(unique_ptr&); - template typename detail::unique_ptr_error::type operator=(U&); + template typename ipcdetail::unique_ptr_error::type operator=(U&); }; template class unique_ptr { struct nat {int for_bool_;}; - typedef typename detail::add_reference::type deleter_reference; - typedef typename detail::add_reference::type deleter_const_reference; + typedef typename ipcdetail::add_reference::type deleter_reference; + typedef typename ipcdetail::add_reference::type deleter_const_reference; public: typedef T element_type; typedef D deleter_type; - typedef typename detail::pointer_type::type pointer; + typedef typename ipcdetail::pointer_type::type pointer; static const std::size_t size = N; // constructors @@ -430,7 +430,7 @@ public: unique_ptr(pointer p, typename if_< boost::is_reference, D, - typename detail::add_reference::type>::type d) + typename ipcdetail::add_reference::type>::type d) : ptr_(p, d) {} unique_ptr(const unique_ptr& u) : ptr_(const_cast(u).release(), u.get_deleter()) {} @@ -453,7 +453,7 @@ public: } // observers - typename detail::add_reference::type operator[](std::size_t i) const {return ptr_.first()[i];} + typename ipcdetail::add_reference::type operator[](std::size_t i) const {return ptr_.first()[i];} pointer get() const {return ptr_.first();} deleter_reference get_deleter() {return ptr_.second();} deleter_const_reference get_deleter() const {return ptr_.second();} @@ -485,10 +485,10 @@ private: typename boost::enable_if >::type* = 0); unique_ptr(unique_ptr&); - template unique_ptr(U&, typename detail::unique_ptr_error::type = 0); + template unique_ptr(U&, typename ipcdetail::unique_ptr_error::type = 0); unique_ptr& operator=(unique_ptr&); - template typename detail::unique_ptr_error::type operator=(U&); + template typename ipcdetail::unique_ptr_error::type operator=(U&); }; */ template inline @@ -539,7 +539,7 @@ template inline typename managed_unique_ptr::type make_managed_unique_ptr(T *constructed_object, ManagedMemory &managed_memory) { - return typename managed_unique_ptr::type + return typename managed_unique_ptr::type (constructed_object, managed_memory.template get_deleter()); } diff --git a/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp index 9229bd5eb4..5202ede91c 100644 --- a/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp @@ -3,7 +3,7 @@ // This file is the adaptation for Interprocess of boost/weak_ptr.hpp // // (C) Copyright Peter Dimov 2001, 2002, 2003 -// (C) Copyright Ion Gaztanaga 2006-2009. +// (C) Copyright Ion Gaztanaga 2006-2011. // 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) @@ -22,7 +22,7 @@ #include #include #include -#include +#include //!\file //!Describes the smart pointer weak_ptr. @@ -31,7 +31,7 @@ namespace boost{ namespace interprocess{ //!The weak_ptr class template stores a "weak reference" to an object -//!that's already managed by a shared_ptr. To access the object, a weak_ptr +//!that's already managed by a shared_ptr. To access the object, a weak_ptr //!can be converted to a shared_ptr using the shared_ptr constructor or the //!member function lock. When the last shared_ptr to the object goes away //!and the object is deleted, the attempt to obtain a shared_ptr from the @@ -54,11 +54,12 @@ class weak_ptr private: // Borland 5.5.1 specific workarounds typedef weak_ptr this_type; - typedef typename boost::pointer_to_other - ::type pointer; - typedef typename detail::add_reference + typedef typename boost::intrusive:: + pointer_traits::template + rebind_pointer::type pointer; + typedef typename ipcdetail::add_reference ::type reference; - typedef typename detail::add_reference + typedef typename ipcdetail::add_reference ::type const_reference; /// @endcond @@ -98,11 +99,11 @@ class weak_ptr template weak_ptr(weak_ptr const & r) : m_pn(r.m_pn) // never throws - { + { //Construct a temporary shared_ptr so that nobody //can destroy the value while constructing this const shared_ptr &ref = r.lock(); - m_pn.set_pointer(ref.get()); + m_pn.set_pointer(ref.get()); } //!Effects: If r is empty, constructs an empty weak_ptr; otherwise, @@ -125,7 +126,7 @@ class weak_ptr //!implied guarantees) via different means, without creating a temporary. template weak_ptr & operator=(weak_ptr const & r) // never throws - { + { //Construct a temporary shared_ptr so that nobody //can destroy the value while constructing this const shared_ptr &ref = r.lock(); @@ -173,7 +174,7 @@ class weak_ptr //!testing purposes, not for production code. long use_count() const // never throws { return m_pn.use_count(); } - + //!Returns: Returns: use_count() == 0. //! //!Throws: nothing. @@ -192,15 +193,15 @@ class weak_ptr //! //!Throws: nothing. void swap(this_type & other) // never throws - { detail::do_swap(m_pn, other.m_pn); } + { ipcdetail::do_swap(m_pn, other.m_pn); } /// @cond - template + template bool _internal_less(weak_ptr const & rhs) const { return m_pn < rhs.m_pn; } - + template - void _internal_assign(const detail::shared_count & pn2) + void _internal_assign(const ipcdetail::shared_count & pn2) { m_pn = pn2; @@ -211,11 +212,11 @@ class weak_ptr template friend class shared_ptr; template friend class weak_ptr; - detail::weak_count m_pn; // reference counter + ipcdetail::weak_count m_pn; // reference counter /// @endcond }; // weak_ptr -template inline +template inline bool operator<(weak_ptr const & a, weak_ptr const & b) { return a._internal_less(b); } diff --git a/3party/boost/boost/interprocess/streams/bufferstream.hpp b/3party/boost/boost/interprocess/streams/bufferstream.hpp index a04184af53..3ae9f5e2dc 100644 --- a/3party/boost/boost/interprocess/streams/bufferstream.hpp +++ b/3party/boost/boost/interprocess/streams/bufferstream.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -42,7 +42,7 @@ #include #include #include -#include // char traits +#include // char traits #include // ptrdiff_t #include #include @@ -53,7 +53,7 @@ namespace boost { namespace interprocess { //!a basic_xbufferstream. The elements are transmitted from a to a fixed //!size buffer template -class basic_bufferbuf +class basic_bufferbuf : public std::basic_streambuf { public: @@ -74,7 +74,7 @@ class basic_bufferbuf //!Constructor. Assigns formatting buffer. //!Does not throw. - explicit basic_bufferbuf(CharT *buffer, std::size_t length, + explicit basic_bufferbuf(CharT *buffer, std::size_t length, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : base_t(), m_mode(mode), m_buffer(buffer), m_length(length) @@ -83,7 +83,7 @@ class basic_bufferbuf virtual ~basic_bufferbuf(){} public: - //!Returns the pointer and size of the internal buffer. + //!Returns the pointer and size of the internal buffer. //!Does not throw. std::pair buffer() const { return std::pair(m_buffer, m_length); } @@ -172,13 +172,13 @@ class basic_bufferbuf } virtual pos_type seekoff(off_type off, std::ios_base::seekdir dir, - std::ios_base::openmode mode + std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { bool in = false; bool out = false; - - const std::ios_base::openmode inout = + + const std::ios_base::openmode inout = std::ios_base::in | std::ios_base::out; if((mode & inout) == inout) { @@ -205,7 +205,7 @@ class basic_bufferbuf newoff = static_cast(m_length); break; case std::ios_base::cur: - newoff = in ? static_cast(this->gptr() - this->eback()) + newoff = in ? static_cast(this->gptr() - this->eback()) : static_cast(this->pptr() - this->pbase()); break; default: @@ -237,7 +237,7 @@ class basic_bufferbuf return pos_type(off); } - virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode + virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { return seekoff(pos - pos_type(off_type(0)), std::ios_base::beg, mode); } @@ -277,7 +277,7 @@ class basic_ibufferstream //!Does not throw. basic_ibufferstream(const CharT *buffer, std::size_t length, std::ios_base::openmode mode = std::ios_base::in) - : basic_ios_t(), base_t(0), + : basic_ios_t(), base_t(0), m_buf(const_cast(buffer), length, mode | std::ios_base::in) { basic_ios_t::init(&m_buf); } @@ -289,12 +289,12 @@ class basic_ibufferstream basic_bufferbuf* rdbuf() const { return const_cast*>(&m_buf); } - //!Returns the pointer and size of the internal buffer. + //!Returns the pointer and size of the internal buffer. //!Does not throw. std::pair buffer() const { return m_buf.buffer(); } - //!Sets the underlying buffer to a new value. Resets + //!Sets the underlying buffer to a new value. Resets //!stream position. Does not throw. void buffer(const CharT *buffer, std::size_t length) { m_buf.buffer(const_cast(buffer), length); } @@ -335,7 +335,7 @@ class basic_obufferstream //!Does not throw. basic_obufferstream(CharT *buffer, std::size_t length, std::ios_base::openmode mode = std::ios_base::out) - : basic_ios_t(), base_t(0), + : basic_ios_t(), base_t(0), m_buf(buffer, length, mode | std::ios_base::out) { basic_ios_t::init(&m_buf); } @@ -347,12 +347,12 @@ class basic_obufferstream basic_bufferbuf* rdbuf() const { return const_cast*>(&m_buf); } - //!Returns the pointer and size of the internal buffer. + //!Returns the pointer and size of the internal buffer. //!Does not throw. std::pair buffer() const { return m_buf.buffer(); } - //!Sets the underlying buffer to a new value. Resets + //!Sets the underlying buffer to a new value. Resets //!stream position. Does not throw. void buffer(CharT *buffer, std::size_t length) { m_buf.buffer(buffer, length); } @@ -367,7 +367,7 @@ class basic_obufferstream //!A basic_iostream class that uses a fixed size character buffer //!as its formatting buffer. template -class basic_bufferstream +class basic_bufferstream : public std::basic_iostream { @@ -388,7 +388,7 @@ class basic_bufferstream public: //!Constructor. //!Does not throw. - basic_bufferstream(std::ios_base::openmode mode + basic_bufferstream(std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : basic_ios_t(), base_t(0), m_buf(mode) { basic_ios_t::init(&m_buf); } @@ -409,12 +409,12 @@ class basic_bufferstream basic_bufferbuf* rdbuf() const { return const_cast*>(&m_buf); } - //!Returns the pointer and size of the internal buffer. + //!Returns the pointer and size of the internal buffer. //!Does not throw. std::pair buffer() const { return m_buf.buffer(); } - //!Sets the underlying buffer to a new value. Resets + //!Sets the underlying buffer to a new value. Resets //!stream position. Does not throw. void buffer(CharT *buffer, std::size_t length) { m_buf.buffer(buffer, length); } diff --git a/3party/boost/boost/interprocess/streams/vectorstream.hpp b/3party/boost/boost/interprocess/streams/vectorstream.hpp index fa16c8ae72..3cee7200ab 100644 --- a/3party/boost/boost/interprocess/streams/vectorstream.hpp +++ b/3party/boost/boost/interprocess/streams/vectorstream.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -30,7 +30,7 @@ //!This file defines basic_vectorbuf, basic_ivectorstream, //!basic_ovectorstream, and basic_vectorstreamclasses. These classes //!represent streamsbufs and streams whose sources or destinations are -//!STL-like vectors that can be swapped with external vectors to avoid +//!STL-like vectors that can be swapped with external vectors to avoid //!unnecessary allocations/copies. #ifndef BOOST_INTERPROCESS_VECTORSTREAM_HPP @@ -43,7 +43,7 @@ #include #include #include -#include // char traits +#include // char traits #include // ptrdiff_t #include #include @@ -51,9 +51,9 @@ namespace boost { namespace interprocess { //!A streambuf class that controls the transmission of elements to and from -//!a basic_ivectorstream, basic_ovectorstream or basic_vectorstream. +//!a basic_ivectorstream, basic_ovectorstream or basic_vectorstream. //!It holds a character vector specified by CharVector template parameter -//!as its formatting buffer. The vector must have contiguous storage, like +//!as its formatting buffer. The vector must have contiguous storage, like //!std::vector, boost::interprocess::vector or boost::interprocess::basic_string template class basic_vectorbuf @@ -96,11 +96,11 @@ class basic_vectorbuf public: - //!Swaps the underlying vector with the passed vector. + //!Swaps the underlying vector with the passed vector. //!This function resets the read/write position in the stream. //!Does not throw. void swap_vector(vector_type &vect) - { + { if (this->m_mode & std::ios_base::out){ //Update high water if necessary //And resize vector to remove extra size @@ -118,8 +118,8 @@ class basic_vectorbuf //!Returns a const reference to the internal vector. //!Does not throw. - const vector_type &vector() const - { + const vector_type &vector() const + { if (this->m_mode & std::ios_base::out){ if (mp_high_water < base_t::pptr()){ //Restore the vector's size if necessary @@ -137,13 +137,13 @@ class basic_vectorbuf const_cast(this)->base_t::pbump(old_pos); } } - return m_vect; + return m_vect; } //!Preallocates memory from the internal vector. //!Resets the stream to the first position. //!Throws if the internals vector's memory allocation throws. - void reserve(typename vector_type::size_type size) + void reserve(typename vector_type::size_type size) { if (this->m_mode & std::ios_base::out && size > m_vect.size()){ typename vector_type::difference_type write_pos = base_t::pptr() - base_t::pbase(); @@ -282,7 +282,7 @@ class basic_vectorbuf } virtual pos_type seekoff(off_type off, std::ios_base::seekdir dir, - std::ios_base::openmode mode + std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { //Get seek mode @@ -325,7 +325,7 @@ class basic_vectorbuf newoff = limit; break; case std::ios_base::cur: - newoff = in ? static_cast(this->gptr() - this->eback()) + newoff = in ? static_cast(this->gptr() - this->eback()) : static_cast(this->pptr() - this->pbase()); break; default: @@ -350,7 +350,7 @@ class basic_vectorbuf return pos_type(newoff); } - virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode + virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) { return seekoff(pos - pos_type(off_type(0)), std::ios_base::beg, mode); } @@ -413,7 +413,7 @@ class basic_ivectorstream basic_vectorbuf* rdbuf() const { return const_cast*>(&m_buf()); } - //!Swaps the underlying vector with the passed vector. + //!Swaps the underlying vector with the passed vector. //!This function resets the read position in the stream. //!Does not throw. void swap_vector(vector_type &vect) @@ -421,18 +421,18 @@ class basic_ivectorstream //!Returns a const reference to the internal vector. //!Does not throw. - const vector_type &vector() const + const vector_type &vector() const { return m_buf().vector(); } //!Calls reserve() method of the internal vector. //!Resets the stream to the first position. //!Throws if the internals vector's reserve throws. - void reserve(typename vector_type::size_type size) + void reserve(typename vector_type::size_type size) { m_buf().reserve(size); } //!Calls clear() method of the internal vector. //!Resets the stream to the first position. - void clear() + void clear() { m_buf().clear(); } }; @@ -488,7 +488,7 @@ class basic_ovectorstream basic_vectorbuf* rdbuf() const { return const_cast*>(&m_buf()); } - //!Swaps the underlying vector with the passed vector. + //!Swaps the underlying vector with the passed vector. //!This function resets the write position in the stream. //!Does not throw. void swap_vector(vector_type &vect) @@ -496,13 +496,13 @@ class basic_ovectorstream //!Returns a const reference to the internal vector. //!Does not throw. - const vector_type &vector() const + const vector_type &vector() const { return m_buf().vector(); } //!Calls reserve() method of the internal vector. //!Resets the stream to the first position. //!Throws if the internals vector's reserve throws. - void reserve(typename vector_type::size_type size) + void reserve(typename vector_type::size_type size) { m_buf().reserve(size); } }; @@ -534,7 +534,7 @@ class basic_vectorstream public: //!Constructor. Throws if vector_type default //!constructor throws. - basic_vectorstream(std::ios_base::openmode mode + basic_vectorstream(std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : basic_ios_t(), base_t(0), m_buf(mode) { basic_ios_t::init(&m_buf); } @@ -554,7 +554,7 @@ class basic_vectorstream basic_vectorbuf* rdbuf() const { return const_cast*>(&m_buf); } - //!Swaps the underlying vector with the passed vector. + //!Swaps the underlying vector with the passed vector. //!This function resets the read/write position in the stream. //!Does not throw. void swap_vector(vector_type &vect) @@ -562,18 +562,18 @@ class basic_vectorstream //!Returns a const reference to the internal vector. //!Does not throw. - const vector_type &vector() const + const vector_type &vector() const { return m_buf.vector(); } //!Calls reserve() method of the internal vector. //!Resets the stream to the first position. //!Throws if the internals vector's reserve throws. - void reserve(typename vector_type::size_type size) + void reserve(typename vector_type::size_type size) { m_buf.reserve(size); } //!Calls clear() method of the internal vector. //!Resets the stream to the first position. - void clear() + void clear() { m_buf.clear(); } /// @cond diff --git a/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp b/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp new file mode 100644 index 0000000000..eaad671cdf --- /dev/null +++ b/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp @@ -0,0 +1,316 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_CONDITION_ALGORITHM_8A_HPP +#define BOOST_INTERPROCESS_DETAIL_CONDITION_ALGORITHM_8A_HPP + +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +// +// Condition variable algorithm taken from pthreads-win32 discussion. +// +// The algorithm was developed by Alexander Terekhov in colaboration with +// Louis Thomas. +// +// Algorithm 8a / IMPL_SEM,UNBLOCK_STRATEGY == UNBLOCK_ALL +// +// semBlockLock - bin.semaphore +// semBlockQueue - semaphore +// mtxExternal - mutex or CS +// mtxUnblockLock - mutex or CS +// nWaitersGone - int +// nWaitersBlocked - int +// nWaitersToUnblock - int +// +// wait( timeout ) { +// +// [auto: register int result ] // error checking omitted +// [auto: register int nSignalsWasLeft ] +// [auto: register int nWaitersWasGone ] +// +// sem_wait( semBlockLock ); +// nWaitersBlocked++; +// sem_post( semBlockLock ); +// +// unlock( mtxExternal ); +// bTimedOut = sem_wait( semBlockQueue,timeout ); +// +// lock( mtxUnblockLock ); +// if ( 0 != (nSignalsWasLeft = nWaitersToUnblock) ) { +// if ( bTimedOut ) { // timeout (or canceled) +// if ( 0 != nWaitersBlocked ) { +// nWaitersBlocked--; +// } +// else { +// nWaitersGone++; // count spurious wakeups. +// } +// } +// if ( 0 == --nWaitersToUnblock ) { +// if ( 0 != nWaitersBlocked ) { +// sem_post( semBlockLock ); // open the gate. +// nSignalsWasLeft = 0; // do not open the gate +// // below again. +// } +// else if ( 0 != (nWaitersWasGone = nWaitersGone) ) { +// nWaitersGone = 0; +// } +// } +// } +// else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or +// // spurious semaphore :-) +// sem_wait( semBlockLock ); +// nWaitersBlocked -= nWaitersGone; // something is going on here +// // - test of timeouts? :-) +// sem_post( semBlockLock ); +// nWaitersGone = 0; +// } +// unlock( mtxUnblockLock ); +// +// if ( 1 == nSignalsWasLeft ) { +// if ( 0 != nWaitersWasGone ) { +// // sem_adjust( semBlockQueue,-nWaitersWasGone ); +// while ( nWaitersWasGone-- ) { +// sem_wait( semBlockQueue ); // better now than spurious later +// } +// } sem_post( semBlockLock ); // open the gate +// } +// +// lock( mtxExternal ); +// +// return ( bTimedOut ) ? ETIMEOUT : 0; +// } +// +// signal(bAll) { +// +// [auto: register int result ] +// [auto: register int nSignalsToIssue] +// +// lock( mtxUnblockLock ); +// +// if ( 0 != nWaitersToUnblock ) { // the gate is closed!!! +// if ( 0 == nWaitersBlocked ) { // NO-OP +// return unlock( mtxUnblockLock ); +// } +// if (bAll) { +// nWaitersToUnblock += nSignalsToIssue=nWaitersBlocked; +// nWaitersBlocked = 0; +// } +// else { +// nSignalsToIssue = 1; +// nWaitersToUnblock++; +// nWaitersBlocked--; +// } +// } +// else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION! +// sem_wait( semBlockLock ); // close the gate +// if ( 0 != nWaitersGone ) { +// nWaitersBlocked -= nWaitersGone; +// nWaitersGone = 0; +// } +// if (bAll) { +// nSignalsToIssue = nWaitersToUnblock = nWaitersBlocked; +// nWaitersBlocked = 0; +// } +// else { +// nSignalsToIssue = nWaitersToUnblock = 1; +// nWaitersBlocked--; +// } +// } +// else { // NO-OP +// return unlock( mtxUnblockLock ); +// } +// +// unlock( mtxUnblockLock ); +// sem_post( semBlockQueue,nSignalsToIssue ); +// return result; +// } +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + + +// Required interface for ConditionMembers +// class ConditionMembers +// { +// typedef implementation_defined semaphore_type; +// typedef implementation_defined mutex_type; +// typedef implementation_defined integer_type; +// +// integer_type &get_nwaiters_blocked() +// integer_type &get_nwaiters_gone() +// integer_type &get_nwaiters_to_unblock() +// semaphore_type &get_sem_block_queue() +// semaphore_type &get_sem_block_lock() +// mutex_type &get_mtx_unblock_lock() +// }; +// +template +class condition_algorithm_8a +{ + private: + condition_algorithm_8a(); + ~condition_algorithm_8a(); + condition_algorithm_8a(const condition_algorithm_8a &); + condition_algorithm_8a &operator=(const condition_algorithm_8a &); + + typedef typename ConditionMembers::semaphore_type semaphore_type; + typedef typename ConditionMembers::mutex_type mutex_type; + typedef typename ConditionMembers::integer_type integer_type; + + // nwaiters_blocked == 0 + // nwaiters_gone() == 0 + // nwaiters_to_unblock == 0 + // sem_block_queue() == initial count 0 + // sem_block_lock() == initial count 1 + // mtx_unblock_lock (unlocked) + + public: + template + static bool wait (ConditionMembers &data, bool timeout_enabled, const boost::posix_time::ptime &abs_time, InterprocessMutex &mut); + static void signal(ConditionMembers &data, bool broadcast); +}; + +template +inline void condition_algorithm_8a::signal(ConditionMembers &data, bool broadcast) +{ + integer_type nsignals_to_issue; + + { + scoped_lock locker(data.get_mtx_unblock_lock()); + + if ( 0 != data.get_nwaiters_to_unblock() ) { // the gate is closed!!! + if ( 0 == data.get_nwaiters_blocked() ) { // NO-OP + //locker's destructor triggers data.get_mtx_unblock_lock().unlock() + return; + } + if (broadcast) { + data.get_nwaiters_to_unblock() += nsignals_to_issue = data.get_nwaiters_blocked(); + data.get_nwaiters_blocked() = 0; + } + else { + nsignals_to_issue = 1; + data.get_nwaiters_to_unblock()++; + data.get_nwaiters_blocked()--; + } + } + else if ( data.get_nwaiters_blocked() > data.get_nwaiters_gone() ) { // HARMLESS RACE CONDITION! + data.get_sem_block_lock().wait(); // close the gate + if ( 0 != data.get_nwaiters_gone() ) { + data.get_nwaiters_blocked() -= data.get_nwaiters_gone(); + data.get_nwaiters_gone() = 0; + } + if (broadcast) { + nsignals_to_issue = data.get_nwaiters_to_unblock() = data.get_nwaiters_blocked(); + data.get_nwaiters_blocked() = 0; + } + else { + nsignals_to_issue = data.get_nwaiters_to_unblock() = 1; + data.get_nwaiters_blocked()--; + } + } + else { // NO-OP + //locker's destructor triggers data.get_mtx_unblock_lock().unlock() + return; + } + //locker's destructor triggers data.get_mtx_unblock_lock().unlock() + } + data.get_sem_block_queue().post(nsignals_to_issue); +} + +template +template +inline bool condition_algorithm_8a::wait + (ConditionMembers &data, bool tout_enabled, const boost::posix_time::ptime &abs_time, InterprocessMutex &mtxExternal) +{ + //Initialize to avoid warnings + integer_type nsignals_was_left = 0; + integer_type nwaiters_was_gone = 0; + + data.get_sem_block_lock().wait(); + ++data.get_nwaiters_blocked(); + data.get_sem_block_lock().post(); + + struct scoped_unlock + { + InterprocessMutex & mut; + scoped_unlock(InterprocessMutex & m) + : mut(m) + { m.unlock(); } + + ~scoped_unlock() + { mut.lock(); } + } unlocker(mtxExternal); + + + bool bTimedOut = tout_enabled ? !data.get_sem_block_queue().timed_wait(abs_time) : (data.get_sem_block_queue().wait(), false); + + { + scoped_lock locker(data.get_mtx_unblock_lock()); + if ( 0 != (nsignals_was_left = data.get_nwaiters_to_unblock()) ) { + if ( bTimedOut ) { // timeout (or canceled) + if ( 0 != data.get_nwaiters_blocked() ) { + data.get_nwaiters_blocked()--; + } + else { + data.get_nwaiters_gone()++; // count spurious wakeups. + } + } + if ( 0 == --data.get_nwaiters_to_unblock() ) { + if ( 0 != data.get_nwaiters_blocked() ) { + data.get_sem_block_lock().post(); // open the gate. + nsignals_was_left = 0; // do not open the gate below again. + } + else if ( 0 != (nwaiters_was_gone = data.get_nwaiters_gone()) ) { + data.get_nwaiters_gone() = 0; + } + } + } + else if ( (std::numeric_limits::max)()/2 + == ++data.get_nwaiters_gone() ) { // timeout/canceled or spurious semaphore :-) + data.get_sem_block_lock().wait(); + data.get_nwaiters_blocked() -= data.get_nwaiters_gone(); // something is going on here - test of timeouts? :-) + data.get_sem_block_lock().post(); + data.get_nwaiters_gone() = 0; + } + //locker's destructor triggers data.get_mtx_unblock_lock().unlock() + } + + if ( 1 == nsignals_was_left ) { + if ( 0 != nwaiters_was_gone ) { + // sem_adjust( data.get_sem_block_queue(),-nwaiters_was_gone ); + while ( nwaiters_was_gone-- ) { + data.get_sem_block_queue().wait(); // better now than spurious later + } + } + data.get_sem_block_lock().post(); // open the gate + } + + //mtxExternal.lock(); called from unlocker + + return ( bTimedOut ) ? false : true; +} + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_CONDITION_ALGORITHM_8A_HPP diff --git a/3party/boost/boost/interprocess/sync/emulation/interprocess_condition.hpp b/3party/boost/boost/interprocess/sync/emulation/interprocess_condition.hpp deleted file mode 100644 index 592b71cde6..0000000000 --- a/3party/boost/boost/interprocess/sync/emulation/interprocess_condition.hpp +++ /dev/null @@ -1,200 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#include -#include -namespace boost { -namespace interprocess { - -inline interprocess_condition::interprocess_condition() -{ - //Note that this class is initialized to zero. - //So zeroed memory can be interpreted as an initialized - //condition variable - m_command = SLEEP; - m_num_waiters = 0; -} - -inline interprocess_condition::~interprocess_condition() -{ - //Trivial destructor -} - -inline void interprocess_condition::notify_one() -{ - this->notify(NOTIFY_ONE); -} - -inline void interprocess_condition::notify_all() -{ - this->notify(NOTIFY_ALL); -} - -inline void interprocess_condition::notify(boost::uint32_t command) -{ - //This interprocess_mutex guarantees that no other thread can enter to the - //do_timed_wait method logic, so that thread count will be - //constant until the function writes a NOTIFY_ALL command. - //It also guarantees that no other notification can be signaled - //on this interprocess_condition before this one ends - m_enter_mut.lock(); - - //Return if there are no waiters - if(!detail::atomic_read32(&m_num_waiters)) { - m_enter_mut.unlock(); - return; - } - - //Notify that all threads should execute wait logic - while(SLEEP != detail::atomic_cas32(const_cast(&m_command), command, SLEEP)){ - detail::thread_yield(); - } -/* - //Wait until the threads are woken - while(SLEEP != detail::atomic_cas32(const_cast(&m_command), 0)){ - detail::thread_yield(); - } -*/ - //The enter interprocess_mutex will rest locked until the last waiting thread unlocks it -} - -inline void interprocess_condition::do_wait(interprocess_mutex &mut) -{ - this->do_timed_wait(false, boost::posix_time::ptime(), mut); -} - -inline bool interprocess_condition::do_timed_wait - (const boost::posix_time::ptime &abs_time, interprocess_mutex &mut) -{ - return this->do_timed_wait(true, abs_time, mut); -} - -inline bool interprocess_condition::do_timed_wait(bool tout_enabled, - const boost::posix_time::ptime &abs_time, - interprocess_mutex &mut) -{ - boost::posix_time::ptime now = microsec_clock::universal_time(); - - if(tout_enabled){ - if(now >= abs_time) return false; - } - - typedef boost::interprocess::scoped_lock InternalLock; - //The enter interprocess_mutex guarantees that while executing a notification, - //no other thread can execute the do_timed_wait method. - { - //--------------------------------------------------------------- - InternalLock lock; - if(tout_enabled){ - InternalLock dummy(m_enter_mut, abs_time); - lock = boost::interprocess::move(dummy); - } - else{ - InternalLock dummy(m_enter_mut); - lock = boost::interprocess::move(dummy); - } - - if(!lock) - return false; - //--------------------------------------------------------------- - //We increment the waiting thread count protected so that it will be - //always constant when another thread enters the notification logic. - //The increment marks this thread as "waiting on interprocess_condition" - detail::atomic_inc32(const_cast(&m_num_waiters)); - - //We unlock the external interprocess_mutex atomically with the increment - mut.unlock(); - } - - //By default, we suppose that no timeout has happened - bool timed_out = false, unlock_enter_mut= false; - - //Loop until a notification indicates that the thread should - //exit or timeout occurs - while(1){ - //The thread sleeps/spins until a interprocess_condition commands a notification - //Notification occurred, we will lock the checking interprocess_mutex so that - while(detail::atomic_read32(&m_command) == SLEEP){ - detail::thread_yield(); - - //Check for timeout - if(tout_enabled){ - now = microsec_clock::universal_time(); - - if(now >= abs_time){ - //If we can lock the interprocess_mutex it means that no notification - //is being executed in this interprocess_condition variable - timed_out = m_enter_mut.try_lock(); - - //If locking fails, indicates that another thread is executing - //notification, so we play the notification game - if(!timed_out){ - //There is an ongoing notification, we will try again later - continue; - } - //No notification in execution, since enter interprocess_mutex is locked. - //We will execute time-out logic, so we will decrement count, - //release the enter interprocess_mutex and return false. - break; - } - } - } - - //If a timeout occurred, the interprocess_mutex will not execute checking logic - if(tout_enabled && timed_out){ - //Decrement wait count - detail::atomic_dec32(const_cast(&m_num_waiters)); - unlock_enter_mut = true; - break; - } - else{ - boost::uint32_t result = detail::atomic_cas32 - (const_cast(&m_command), SLEEP, NOTIFY_ONE); - if(result == SLEEP){ - //Other thread has been notified and since it was a NOTIFY one - //command, this thread must sleep again - continue; - } - else if(result == NOTIFY_ONE){ - //If it was a NOTIFY_ONE command, only this thread should - //exit. This thread has atomically marked command as sleep before - //so no other thread will exit. - //Decrement wait count. - unlock_enter_mut = true; - detail::atomic_dec32(const_cast(&m_num_waiters)); - break; - } - else{ - //If it is a NOTIFY_ALL command, all threads should return - //from do_timed_wait function. Decrement wait count. - unlock_enter_mut = 1 == detail::atomic_dec32(const_cast(&m_num_waiters)); - //Check if this is the last thread of notify_all waiters - //Only the last thread will release the interprocess_mutex - if(unlock_enter_mut){ - detail::atomic_cas32(const_cast(&m_command), SLEEP, NOTIFY_ALL); - } - break; - } - } - } - - //Unlock the enter interprocess_mutex if it is a single notification, if this is - //the last notified thread in a notify_all or a timeout has occurred - if(unlock_enter_mut){ - m_enter_mut.unlock(); - } - - //Lock external again before returning from the method - mut.lock(); - return !timed_out; -} - -} //namespace interprocess -} // namespace boost diff --git a/3party/boost/boost/interprocess/sync/emulation/interprocess_semaphore.hpp b/3party/boost/boost/interprocess/sync/emulation/interprocess_semaphore.hpp deleted file mode 100644 index 5da3419a81..0000000000 --- a/3party/boost/boost/interprocess/sync/emulation/interprocess_semaphore.hpp +++ /dev/null @@ -1,75 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#include -#include - -namespace boost { -namespace interprocess { - - -inline interprocess_semaphore::~interprocess_semaphore() -{} - -inline interprocess_semaphore::interprocess_semaphore(unsigned int initialCount) -{ detail::atomic_write32(&this->m_count, boost::uint32_t(initialCount)); } - -inline void interprocess_semaphore::post() -{ - detail::atomic_inc32(&m_count); -} - -inline void interprocess_semaphore::wait() -{ - while(!detail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0))){ - while(detail::atomic_read32(&m_count) == 0){ - detail::thread_yield(); - } - } -} - -inline bool interprocess_semaphore::try_wait() -{ - return detail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0)); -} - -inline bool interprocess_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(); - return true; - } - //Obtain current count and target time - boost::posix_time::ptime now(microsec_clock::universal_time()); - if(now >= abs_time) - return false; - - do{ - if(this->try_wait()){ - break; - } - now = microsec_clock::universal_time(); - - if(now >= abs_time){ - return this->try_wait(); - } - // relinquish current time slice - detail::thread_yield(); - }while (true); - return true; -} -/* -inline int interprocess_semaphore::get_count() const -{ - return (int)detail::atomic_read32(&m_count); -}*/ - -} //namespace interprocess { -} //namespace boost { diff --git a/3party/boost/boost/interprocess/sync/emulation/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/emulation/recursive_mutex.hpp deleted file mode 100644 index d29a873ab1..0000000000 --- a/3party/boost/boost/interprocess/sync/emulation/recursive_mutex.hpp +++ /dev/null @@ -1,167 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// -// -// Parts of the pthread code come from Boost Threads code: -// -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2001-2003 -// William E. Kempf -// -// Permission to use, copy, modify, distribute and sell this software -// and its documentation for any purpose is hereby granted without fee, -// provided that the above copyright notice appear in all copies and -// that both that copyright notice and this permission notice appear -// in supporting documentation. William E. Kempf makes no representations -// about the suitability of this software for any purpose. -// It is provided "as is" without express or implied warranty. -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_INTERPROCESS_DETAIL_EMULATION_RECURSIVE_MUTEX_HPP -#define BOOST_INTERPROCESS_DETAIL_EMULATION_RECURSIVE_MUTEX_HPP - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { -namespace interprocess { -namespace detail { - -class emulation_recursive_mutex -{ - emulation_recursive_mutex(const emulation_recursive_mutex &); - emulation_recursive_mutex &operator=(const emulation_recursive_mutex &); - public: - - emulation_recursive_mutex(); - ~emulation_recursive_mutex(); - - void lock(); - bool try_lock(); - bool timed_lock(const boost::posix_time::ptime &abs_time); - void unlock(); - void take_ownership(); - private: - emulation_mutex m_mutex; - unsigned int m_nLockCount; - volatile detail::OS_systemwide_thread_id_t m_nOwner; - volatile boost::uint32_t m_s; -}; - -inline emulation_recursive_mutex::emulation_recursive_mutex() - : m_nLockCount(0), m_nOwner(detail::get_invalid_systemwide_thread_id()){} - -inline emulation_recursive_mutex::~emulation_recursive_mutex(){} - -inline void emulation_recursive_mutex::lock() -{ - typedef detail::OS_systemwide_thread_id_t handle_t; - const handle_t thr_id(detail::get_current_systemwide_thread_id()); - handle_t old_id; - detail::systemwide_thread_id_copy(m_nOwner, old_id); - if(detail::equal_systemwide_thread_id(thr_id , old_id)){ - if((unsigned int)(m_nLockCount+1) == 0){ - //Overflow, throw an exception - throw interprocess_exception("boost::interprocess::emulation_recursive_mutex recursive lock overflow"); - } - ++m_nLockCount; - } - else{ - m_mutex.lock(); - detail::systemwide_thread_id_copy(thr_id, m_nOwner); - m_nLockCount = 1; - } -} - -inline bool emulation_recursive_mutex::try_lock() -{ - typedef detail::OS_systemwide_thread_id_t handle_t; - handle_t thr_id(detail::get_current_systemwide_thread_id()); - handle_t old_id; - detail::systemwide_thread_id_copy(m_nOwner, old_id); - if(detail::equal_systemwide_thread_id(thr_id , old_id)) { // we own it - if((unsigned int)(m_nLockCount+1) == 0){ - //Overflow, throw an exception - throw interprocess_exception("boost::interprocess::emulation_recursive_mutex recursive lock overflow"); - } - ++m_nLockCount; - return true; - } - if(m_mutex.try_lock()){ - detail::systemwide_thread_id_copy(thr_id, m_nOwner); - m_nLockCount = 1; - return true; - } - return false; -} - -inline bool emulation_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) -{ - typedef detail::OS_systemwide_thread_id_t handle_t; - if(abs_time == boost::posix_time::pos_infin){ - this->lock(); - return true; - } - const handle_t thr_id(detail::get_current_systemwide_thread_id()); - handle_t old_id; - detail::systemwide_thread_id_copy(m_nOwner, old_id); - if(detail::equal_systemwide_thread_id(thr_id , old_id)) { // we own it - if((unsigned int)(m_nLockCount+1) == 0){ - //Overflow, throw an exception - throw interprocess_exception("boost::interprocess::emulation_recursive_mutex recursive lock overflow"); - } - ++m_nLockCount; - return true; - } - if(m_mutex.timed_lock(abs_time)){ - detail::systemwide_thread_id_copy(thr_id, m_nOwner); - m_nLockCount = 1; - return true; - } - return false; -} - -inline void emulation_recursive_mutex::unlock() -{ - typedef detail::OS_systemwide_thread_id_t handle_t; - handle_t old_id; - detail::systemwide_thread_id_copy(m_nOwner, old_id); - const handle_t thr_id(detail::get_current_systemwide_thread_id()); - (void)old_id; - (void)thr_id; - BOOST_ASSERT(detail::equal_systemwide_thread_id(thr_id, old_id)); - --m_nLockCount; - if(!m_nLockCount){ - const handle_t new_id(detail::get_invalid_systemwide_thread_id()); - detail::systemwide_thread_id_copy(new_id, m_nOwner); - m_mutex.unlock(); - } -} - -inline void emulation_recursive_mutex::take_ownership() -{ - typedef detail::OS_systemwide_thread_id_t handle_t; - this->m_nLockCount = 1; - const handle_t thr_id(detail::get_current_systemwide_thread_id()); - detail::systemwide_thread_id_copy - (thr_id, m_nOwner); -} - -} //namespace detail { -} //namespace interprocess { -} //namespace boost { - -#endif //BOOST_INTERPROCESS_DETAIL_EMULATION_RECURSIVE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/file_lock.hpp b/3party/boost/boost/interprocess/sync/file_lock.hpp index 30b91c1246..e0f75465fb 100644 --- a/3party/boost/boost/interprocess/sync/file_lock.hpp +++ b/3party/boost/boost/interprocess/sync/file_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -21,7 +21,7 @@ #include #include #include -#include +#include //!\file //!Describes a class that wraps file locking capabilities. @@ -39,35 +39,35 @@ class file_lock { /// @cond //Non-copyable - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(file_lock) + BOOST_MOVABLE_BUT_NOT_COPYABLE(file_lock) /// @endcond public: //!Constructs an empty file mapping. //!Does not throw file_lock() - : m_file_hnd(file_handle_t(detail::invalid_file())) + : m_file_hnd(file_handle_t(ipcdetail::invalid_file())) {} //!Opens a file lock. Throws interprocess_exception if the file does not //!exist or there are no operating system resources. file_lock(const char *name); - //!Moves the ownership of "moved"'s file mapping object to *this. - //!After the call, "moved" does not represent any file mapping object. + //!Moves the ownership of "moved"'s file mapping object to *this. + //!After the call, "moved" does not represent any file mapping object. //!Does not throw - file_lock(BOOST_INTERPROCESS_RV_REF(file_lock) moved) - : m_file_hnd(file_handle_t(detail::invalid_file())) + file_lock(BOOST_RV_REF(file_lock) moved) + : m_file_hnd(file_handle_t(ipcdetail::invalid_file())) { this->swap(moved); } //!Moves the ownership of "moved"'s file mapping to *this. - //!After the call, "moved" does not represent any file mapping. + //!After the call, "moved" does not represent any file mapping. //!Does not throw - file_lock &operator=(BOOST_INTERPROCESS_RV_REF(file_lock) moved) - { - file_lock tmp(boost::interprocess::move(moved)); + file_lock &operator=(BOOST_RV_REF(file_lock) moved) + { + file_lock tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Closes a file lock. Does not throw. @@ -81,7 +81,7 @@ class file_lock m_file_hnd = other.m_file_hnd; other.m_file_hnd = tmp; } - + //Exclusive locking //!Effects: The calling thread tries to obtain exclusive ownership of the mutex, @@ -99,14 +99,14 @@ class file_lock bool try_lock(); //!Effects: The calling thread tries to acquire exclusive ownership of the mutex - //! waiting if necessary until no other thread has has exclusive, or sharable + //! waiting if necessary until no other thread has exclusive, or sharable //! ownership of the mutex or abs_time is reached. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have exclusive ownership of the mutex. - //!Effects: The calling thread releases the exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The calling thread releases the exclusive ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock(); @@ -119,22 +119,22 @@ class file_lock void lock_sharable(); //!Effects: The calling thread tries to acquire sharable ownership of the mutex - //! without waiting. If no other thread has has exclusive ownership of the - //! mutex this succeeds. + //! without waiting. If no other thread has exclusive ownership of the + //! mutex this succeeds. //!Returns: If it can acquire sharable ownership immediately returns true. If it - //! has to wait, returns false. + //! has to wait, returns false. //!Throws: interprocess_exception on error. bool try_lock_sharable(); //!Effects: The calling thread tries to acquire sharable ownership of the mutex - //! waiting if necessary until no other thread has has exclusive ownership of - //! the mutex or abs_time is reached. - //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. + //! waiting if necessary until no other thread has exclusive ownership of + //! the mutex or abs_time is reached. + //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock_sharable(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have sharable ownership of the mutex. - //!Effects: The calling thread releases the sharable ownership of the mutex. + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The calling thread releases the sharable ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock_sharable(); /// @cond @@ -151,7 +151,7 @@ class file_lock if(now >= abs_time) return false; do{ - if(!detail::try_acquire_file_lock(hnd, acquired)) + if(!ipcdetail::try_acquire_file_lock(hnd, acquired)) return false; if(acquired) @@ -164,14 +164,14 @@ class file_lock return true; } // relinquish current time slice - detail::thread_yield(); + ipcdetail::thread_yield(); } }while (true); } bool timed_acquire_file_lock_sharable (file_handle_t hnd, bool &acquired, const boost::posix_time::ptime &abs_time) - { + { //Obtain current count and target time boost::posix_time::ptime now = microsec_clock::universal_time(); using namespace boost::detail; @@ -179,7 +179,7 @@ class file_lock if(now >= abs_time) return false; do{ - if(!detail::try_acquire_file_lock_sharable(hnd, acquired)) + if(!ipcdetail::try_acquire_file_lock_sharable(hnd, acquired)) return false; if(acquired) @@ -192,7 +192,7 @@ class file_lock return true; } // relinquish current time slice - detail::thread_yield(); + ipcdetail::thread_yield(); } }while (true); } @@ -201,9 +201,9 @@ class file_lock inline file_lock::file_lock(const char *name) { - m_file_hnd = detail::open_existing_file(name, read_write); + m_file_hnd = ipcdetail::open_existing_file(name, read_write); - if(m_file_hnd == detail::invalid_file()){ + if(m_file_hnd == ipcdetail::invalid_file()){ error_info err(system_error_code()); throw interprocess_exception(err); } @@ -211,15 +211,15 @@ inline file_lock::file_lock(const char *name) inline file_lock::~file_lock() { - if(m_file_hnd != detail::invalid_file()){ - detail::close_file(m_file_hnd); - m_file_hnd = detail::invalid_file(); + if(m_file_hnd != ipcdetail::invalid_file()){ + ipcdetail::close_file(m_file_hnd); + m_file_hnd = ipcdetail::invalid_file(); } } inline void file_lock::lock() { - if(!detail::acquire_file_lock(m_file_hnd)){ + if(!ipcdetail::acquire_file_lock(m_file_hnd)){ error_info err(system_error_code()); throw interprocess_exception(err); } @@ -228,7 +228,7 @@ inline void file_lock::lock() inline bool file_lock::try_lock() { bool result; - if(!detail::try_acquire_file_lock(m_file_hnd, result)){ + if(!ipcdetail::try_acquire_file_lock(m_file_hnd, result)){ error_info err(system_error_code()); throw interprocess_exception(err); } @@ -251,7 +251,7 @@ inline bool file_lock::timed_lock(const boost::posix_time::ptime &abs_time) inline void file_lock::unlock() { - if(!detail::release_file_lock(m_file_hnd)){ + if(!ipcdetail::release_file_lock(m_file_hnd)){ error_info err(system_error_code()); throw interprocess_exception(err); } @@ -259,7 +259,7 @@ inline void file_lock::unlock() inline void file_lock::lock_sharable() { - if(!detail::acquire_file_lock_sharable(m_file_hnd)){ + if(!ipcdetail::acquire_file_lock_sharable(m_file_hnd)){ error_info err(system_error_code()); throw interprocess_exception(err); } @@ -268,7 +268,7 @@ inline void file_lock::lock_sharable() inline bool file_lock::try_lock_sharable() { bool result; - if(!detail::try_acquire_file_lock_sharable(m_file_hnd, result)){ + if(!ipcdetail::try_acquire_file_lock_sharable(m_file_hnd, result)){ error_info err(system_error_code()); throw interprocess_exception(err); } @@ -291,7 +291,7 @@ inline bool file_lock::timed_lock_sharable(const boost::posix_time::ptime &abs_t inline void file_lock::unlock_sharable() { - if(!detail::release_file_lock_sharable(m_file_hnd)){ + if(!ipcdetail::release_file_lock_sharable(m_file_hnd)){ error_info err(system_error_code()); throw interprocess_exception(err); } diff --git a/3party/boost/boost/interprocess/sync/interprocess_barrier.hpp b/3party/boost/boost/interprocess/sync/interprocess_barrier.hpp deleted file mode 100644 index 6c88dbf07f..0000000000 --- a/3party/boost/boost/interprocess/sync/interprocess_barrier.hpp +++ /dev/null @@ -1,115 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// -// -// barrier is a modified version of Boost Threads barrier -// -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2002-2003 -// David Moore, William E. Kempf -// -// Permission to use, copy, modify, distribute and sell this software -// and its documentation for any purpose is hereby granted without fee, -// provided that the above copyright notice appear in all copies and -// that both that copyright notice and this permission notice appear -// in supporting documentation. William E. Kempf makes no representations -// about the suitability of this software for any purpose. -// It is provided "as is" without express or implied warranty. - -#ifndef BOOST_INTERPROCESS_BARRIER_HPP -#define BOOST_INTERPROCESS_BARRIER_HPP - -/// @cond - -#if (defined _MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif - -#include -#include - -#if defined BOOST_INTERPROCESS_POSIX_PROCESS_SHARED && defined BOOST_INTERPROCESS_POSIX_BARRIERS -# include -# include -# include -# define BOOST_INTERPROCESS_USE_POSIX -#else -# include -# include -# include -# include -# define BOOST_INTERPROCESS_USE_GENERIC_EMULATION -#endif - -# include - -/// @endcond - -namespace boost { -namespace interprocess { - -//!An object of class barrier is a synchronization primitive that -//!can be placed in shared memory used to cause a set of threads from -//!different processes to wait until they each perform a certain -//!function or each reach a particular point in their execution. -class barrier -{ - public: - //!Constructs a barrier object that will cause count threads - //!to block on a call to wait(). - barrier(unsigned int count); - - //!Destroys *this. If threads are still executing their wait() - //!operations, the behavior for these threads is undefined. - ~barrier(); - - //!Effects: Wait until N threads call wait(), where N equals the count - //!provided to the constructor for the barrier object. - //!Note that if the barrier is destroyed before wait() can return, - //!the behavior is undefined. - //!Returns: Exactly one of the N threads will receive a return value - //!of true, the others will receive a value of false. Precisely which - //!thread receives the return value of true will be implementation-defined. - //!Applications can use this value to designate one thread as a leader that - //!will take a certain action, and the other threads emerging from the barrier - //!can wait for that action to take place. - bool wait(); - - /// @cond - private: - #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - interprocess_mutex m_mutex; - interprocess_condition m_cond; - unsigned int m_threshold; - unsigned int m_count; - unsigned int m_generation; - #else //#if defined BOOST_INTERPROCESS_USE_POSIX - pthread_barrier_t m_barrier; - #endif//#if defined BOOST_INTERPROCESS_USE_POSIX - /// @endcond -}; - -} // namespace interprocess -} // namespace boost - - -#ifdef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# include -#endif - -#ifdef BOOST_INTERPROCESS_USE_POSIX -# undef BOOST_INTERPROCESS_USE_POSIX -# include -#endif - -#include - -#endif diff --git a/3party/boost/boost/interprocess/sync/interprocess_condition.hpp b/3party/boost/boost/interprocess/sync/interprocess_condition.hpp index 5e909a94e7..9d0bea640e 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_condition.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -21,22 +21,20 @@ #include #include -#include -#include #include #include #include #include #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) - #include - #include - #include + #include #define BOOST_INTERPROCESS_USE_POSIX -#else - #include - #include - #include +//Experimental... +#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + #include #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION #endif @@ -66,29 +64,31 @@ class interprocess_condition /// @endcond public: //!Constructs a interprocess_condition. On error throws interprocess_exception. - interprocess_condition(); + interprocess_condition(){} //!Destroys *this //!liberating system resources. - ~interprocess_condition(); + ~interprocess_condition(){} - //!If there is a thread waiting on *this, change that + //!If there is a thread waiting on *this, change that //!thread's state to ready. Otherwise there is no effect. - void notify_one(); + void notify_one() + { m_condition.notify_one(); } //!Change the state of all threads waiting on *this to ready. //!If there are no waiting threads, notify_all() has no effect. - void notify_all(); + void notify_all() + { m_condition.notify_all(); } - //!Releases the lock on the interprocess_mutex object associated with lock, blocks - //!the current thread of execution until readied by a call to + //!Releases the lock on the interprocess_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to //!this->notify_one() or this->notify_all(), and then reacquires the lock. template void wait(L& lock) { if (!lock) throw lock_exception(); - do_wait(*lock.mutex()); + this->do_wait(*lock.mutex()); } //!The same as: @@ -100,12 +100,12 @@ class interprocess_condition throw lock_exception(); while (!pred()) - do_wait(*lock.mutex()); + this->do_wait(*lock.mutex()); } - //!Releases the lock on the interprocess_mutex object associated with lock, blocks - //!the current thread of execution until readied by a call to - //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!Releases the lock on the interprocess_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, //!and then reacquires the lock. //!Returns: false if time abs_time is reached, otherwise true. template @@ -117,11 +117,11 @@ class interprocess_condition } if (!lock) throw lock_exception(); - return do_timed_wait(abs_time, *lock.mutex()); + return this->do_timed_wait(abs_time, *lock.mutex()); } - //!The same as: while (!pred()) { - //! if (!timed_wait(lock, abs_time)) return pred(); + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); //! } return true; template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) @@ -133,7 +133,7 @@ class interprocess_condition if (!lock) throw lock_exception(); while (!pred()){ - if (!do_timed_wait(abs_time, *lock.mutex())) + if (!this->do_timed_wait(abs_time, *lock.mutex())) return pred(); } @@ -141,39 +141,32 @@ class interprocess_condition } /// @cond + + void do_wait(interprocess_mutex &mut) + { m_condition.do_wait(mut.mutex); } + + bool do_timed_wait(const boost::posix_time::ptime &abs_time, interprocess_mutex &mut) + { return m_condition.do_timed_wait(abs_time, mut.mutex); } + private: - void do_wait(interprocess_mutex &mut); - - bool do_timed_wait(const boost::posix_time::ptime &abs_time, interprocess_mutex &mut); - #if defined (BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - enum { SLEEP = 0, NOTIFY_ONE, NOTIFY_ALL }; - interprocess_mutex m_enter_mut; - //interprocess_mutex m_check_mut; - volatile boost::uint32_t m_command; - volatile boost::uint32_t m_num_waiters; - bool do_timed_wait(bool tout_enabled, const boost::posix_time::ptime &abs_time, interprocess_mutex &mut); - void notify(boost::uint32_t command); + #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION + ipcdetail::spin_condition m_condition; #elif defined(BOOST_INTERPROCESS_USE_POSIX) - pthread_cond_t m_condition; + #undef BOOST_INTERPROCESS_USE_POSIX + ipcdetail::posix_condition m_condition; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + ipcdetail::windows_condition m_condition; + #else + #error "Unknown platform for interprocess_mutex" #endif /// @endcond }; } //namespace interprocess - } // namespace boost -#ifdef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# include -#endif - -#ifdef BOOST_INTERPROCESS_USE_POSIX -# undef BOOST_INTERPROCESS_USE_POSIX -# include -#endif - #include #endif // BOOST_INTERPROCESS_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp index 867dd2ae1d..8110c8472b 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -22,22 +22,25 @@ #endif #include +#include #include #include #include #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) - #include - #include - #include + #include #define BOOST_INTERPROCESS_USE_POSIX -#else - #include +//Experimental... +#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + #include #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ namespace robust_emulation_helpers { template @@ -58,7 +61,7 @@ namespace interprocess { class interprocess_condition; -//!Wraps a interprocess_mutex that can be placed in shared memory and can be +//!Wraps a interprocess_mutex that can be placed in shared memory and can be //!shared between processes. Allows timed lock tries class interprocess_mutex { @@ -95,9 +98,9 @@ class interprocess_mutex //!Effects: The calling thread will try to obtain exclusive ownership of the //! mutex if it can do so in until the specified time is reached. If the //! mutex supports recursive locking, the mutex must be unlocked the same - //! number of times it is locked. + //! number of times it is locked. //!Returns: If the thread acquires ownership of the mutex, returns true, if - //! the timeout expires returns false. + //! the timeout expires returns false. //!Throws: interprocess_exception on error. bool timed_lock(const boost::posix_time::ptime &abs_time); @@ -107,42 +110,61 @@ class interprocess_mutex /// @cond private: - #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - friend class detail::robust_emulation_helpers::mutex_traits; - void take_ownership(){ mutex.take_ownership(); } - detail::emulation_mutex mutex; + #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) + #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION + friend class ipcdetail::robust_emulation_helpers::mutex_traits; + void take_ownership(){ mutex.take_ownership(); } + ipcdetail::spin_mutex mutex; #elif defined(BOOST_INTERPROCESS_USE_POSIX) - pthread_mutex_t m_mut; - #endif //#if (defined BOOST_INTERPROCESS_WINDOWS) + #undef BOOST_INTERPROCESS_USE_POSIX + ipcdetail::posix_mutex mutex; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + ipcdetail::windows_mutex mutex; + #else + #error "Unknown platform for interprocess_mutex" + #endif /// @endcond }; } //namespace interprocess { } //namespace boost { -#ifdef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION namespace boost { namespace interprocess { inline interprocess_mutex::interprocess_mutex(){} + inline interprocess_mutex::~interprocess_mutex(){} -inline void interprocess_mutex::lock(){ mutex.lock(); } -inline bool interprocess_mutex::try_lock(){ return mutex.try_lock(); } -inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_time){ return mutex.timed_lock(abs_time); } -inline void interprocess_mutex::unlock(){ mutex.unlock(); } + +inline void interprocess_mutex::lock() +{ + #ifdef BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING + boost::posix_time::ptime wait_time + = boost::posix_time::microsec_clock::universal_time() + + boost::posix_time::milliseconds(BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS); + if (!mutex.timed_lock(wait_time)) + { + throw interprocess_exception(timeout_when_locking_error, "Interprocess mutex timeout when locking. Possible deadlock: owner died without unlocking?"); + } + #else + mutex.lock(); + #endif +} + +inline bool interprocess_mutex::try_lock() +{ return mutex.try_lock(); } + +inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ return mutex.timed_lock(abs_time); } + +inline void interprocess_mutex::unlock() +{ mutex.unlock(); } } //namespace interprocess { } //namespace boost { -#endif - -#ifdef BOOST_INTERPROCESS_USE_POSIX -#include -# undef BOOST_INTERPROCESS_USE_POSIX -#endif - #include #endif //BOOST_INTERPROCESS_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp index 818cc2cf7a..3079108645 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -40,19 +40,21 @@ #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && \ (defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) && defined (BOOST_INTERPROCESS_POSIX_RECURSIVE_MUTEXES)) - #include - #include - #include + #include #define BOOST_INTERPROCESS_USE_POSIX -#else - #include +//Experimental... +#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + #include #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION #endif #if defined (BOOST_INTERPROCESS_USE_GENERIC_EMULATION) namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ namespace robust_emulation_helpers { template @@ -70,8 +72,8 @@ class mutex_traits; namespace boost { namespace interprocess { -//!Wraps a interprocess_mutex that can be placed in shared memory and can be -//!shared between processes. Allows several locking calls by the same +//!Wraps a interprocess_mutex that can be placed in shared memory and can be +//!shared between processes. Allows several locking calls by the same //!process. Allows timed lock tries class interprocess_recursive_mutex { @@ -97,7 +99,7 @@ class interprocess_recursive_mutex //!Throws: interprocess_exception on error. void lock(); - //!Tries to lock the interprocess_mutex, returns false when interprocess_mutex + //!Tries to lock the interprocess_mutex, returns false when interprocess_mutex //!is already locked, returns true when success. The mutex must be unlocked //!the same number of times it is locked. //!Throws: interprocess_exception if a severe error is found @@ -118,41 +120,58 @@ class interprocess_recursive_mutex private: #if defined (BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - void take_ownership(){ mutex.take_ownership(); } - friend class detail::robust_emulation_helpers::mutex_traits; - detail::emulation_recursive_mutex mutex; - #else //#if defined (BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - pthread_mutex_t m_mut; - #endif //#if (defined BOOST_INTERPROCESS_WINDOWS) + #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION + void take_ownership(){ mutex.take_ownership(); } + friend class ipcdetail::robust_emulation_helpers::mutex_traits; + ipcdetail::spin_recursive_mutex mutex; + #elif defined(BOOST_INTERPROCESS_USE_POSIX) + #undef BOOST_INTERPROCESS_USE_POSIX + ipcdetail::posix_recursive_mutex mutex; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + ipcdetail::windows_recursive_mutex mutex; + #else + #error "Unknown platform for interprocess_mutex" + #endif /// @endcond }; } //namespace interprocess { } //namespace boost { -#ifdef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION - namespace boost { namespace interprocess { inline interprocess_recursive_mutex::interprocess_recursive_mutex(){} + inline interprocess_recursive_mutex::~interprocess_recursive_mutex(){} -inline void interprocess_recursive_mutex::lock(){ mutex.lock(); } -inline bool interprocess_recursive_mutex::try_lock(){ return mutex.try_lock(); } -inline bool interprocess_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time){ return mutex.timed_lock(abs_time); } -inline void interprocess_recursive_mutex::unlock(){ mutex.unlock(); } + +inline void interprocess_recursive_mutex::lock() +{ + #ifdef BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING + boost::posix_time::ptime wait_time + = boost::posix_time::microsec_clock::universal_time() + + boost::posix_time::milliseconds(BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS); + if (!mutex.timed_lock(wait_time)){ + throw interprocess_exception(timeout_when_locking_error, "Interprocess mutex timeout when locking. Possible deadlock: owner died without unlocking?"); + } + #else + mutex.lock(); + #endif +} + +inline bool interprocess_recursive_mutex::try_lock() +{ return mutex.try_lock(); } + +inline bool interprocess_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ return mutex.timed_lock(abs_time); } + +inline void interprocess_recursive_mutex::unlock() +{ mutex.unlock(); } } //namespace interprocess { } //namespace boost { -#endif - -#ifdef BOOST_INTERPROCESS_USE_POSIX -# undef BOOST_INTERPROCESS_USE_POSIX -#include -#endif - #include #endif //BOOST_INTERPROCESS_RECURSIVE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp b/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp index 33b17c9ca9..2a2f34fdcf 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,23 +19,21 @@ #include #include + #include #include #include #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && \ (defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) && defined(BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES)) - #include //O_CREAT, O_*... - #include //close - #include //std::string - #include //sem_* family, SEM_VALUE_MAX - #include //mode_t, S_IRWXG, S_IRWXO, S_IRWXU, - #include + #include #define BOOST_INTERPROCESS_USE_POSIX -#else - #include - #include - #include +//Experimental... +#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#elif !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) + #include #define BOOST_INTERPROCESS_USE_GENERIC_EMULATION #endif @@ -45,10 +43,9 @@ //!Describes a interprocess_semaphore class for inter-process synchronization namespace boost { - namespace interprocess { -//!Wraps a interprocess_semaphore that can be placed in shared memory and can be +//!Wraps a interprocess_semaphore that can be placed in shared memory and can be //!shared between processes. Allows timed lock tries class interprocess_semaphore { @@ -58,7 +55,7 @@ class interprocess_semaphore interprocess_semaphore &operator=(const interprocess_semaphore &); /// @endcond public: - //!Creates a interprocess_semaphore with the given initial count. + //!Creates a interprocess_semaphore with the given initial count. //!interprocess_exception if there is an error.*/ interprocess_semaphore(unsigned int initialCount); @@ -72,7 +69,7 @@ class interprocess_semaphore void post(); //!Decrements the interprocess_semaphore. If the interprocess_semaphore value is not greater than zero, - //!then the calling process/thread blocks until it can decrement the counter. + //!then the calling process/thread blocks until it can decrement the counter. //!If there is an error an interprocess_exception exception is thrown. void wait(); @@ -93,26 +90,55 @@ class interprocess_semaphore /// @cond private: #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - volatile boost::uint32_t m_count; - #else - detail::semaphore_wrapper m_sem; + #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION + ipcdetail::spin_semaphore m_sem; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + ipcdetail::windows_semaphore m_sem; + #else + #undef BOOST_INTERPROCESS_USE_POSIX + ipcdetail::posix_semaphore m_sem; #endif //#if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) /// @endcond }; } //namespace interprocess { - } //namespace boost { -#ifdef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION -# include -#endif +namespace boost { +namespace interprocess { -#ifdef BOOST_INTERPROCESS_USE_POSIX -# undef BOOST_INTERPROCESS_USE_POSIX -# include -#endif +inline interprocess_semaphore::interprocess_semaphore(unsigned int initialCount) + : m_sem(initialCount) +{} + +inline interprocess_semaphore::~interprocess_semaphore(){} + +inline void interprocess_semaphore::wait() +{ + #ifdef BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING + boost::posix_time::ptime wait_time + = boost::posix_time::microsec_clock::universal_time() + + boost::posix_time::milliseconds(BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS); + if (!m_sem.timed_wait(wait_time)) + { + throw interprocess_exception(timeout_when_waiting_error, "Interprocess semaphore timeout when waiting. Possible deadlock: owner died without posting?"); + } + #else + m_sem.wait(); + #endif +} +inline bool interprocess_semaphore::try_wait() +{ return m_sem.try_wait(); } + +inline bool interprocess_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ return m_sem.timed_wait(abs_time); } + +inline void interprocess_semaphore::post() +{ m_sem.post(); } + +} //namespace interprocess { +} //namespace boost { #include diff --git a/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp index 551de0a242..8d5a452626 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -29,7 +30,7 @@ namespace boost { namespace interprocess { -//!Wraps a interprocess_upgradable_mutex that can be placed in shared memory and can be +//!Wraps a interprocess_upgradable_mutex that can be placed in shared memory and can be //!shared between processes. Allows timed lock tries class interprocess_upgradable_mutex { @@ -65,42 +66,42 @@ class interprocess_upgradable_mutex bool try_lock(); //!Effects: The calling thread tries to acquire exclusive ownership of the mutex - //! waiting if necessary until no other thread has has exclusive, sharable or - //! upgradable ownership of the mutex or abs_time is reached. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //! waiting if necessary until no other thread has exclusive, sharable or + //! upgradable ownership of the mutex or abs_time is reached. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have exclusive ownership of the mutex. - //!Effects: The calling thread releases the exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The calling thread releases the exclusive ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock(); //Sharable locking //!Effects: The calling thread tries to obtain sharable ownership of the mutex, - //! and if another thread has exclusive or upgradable ownership of the mutex, + //! and if another thread has exclusive ownership of the mutex, //! waits until it can obtain the ownership. //!Throws: interprocess_exception on error. void lock_sharable(); //!Effects: The calling thread tries to acquire sharable ownership of the mutex - //! without waiting. If no other thread has has exclusive or upgradable ownership - //! of the mutex this succeeds. + //! without waiting. If no other thread has exclusive ownership + //! of the mutex this succeeds. //!Returns: If it can acquire sharable ownership immediately returns true. If it - //! has to wait, returns false. + //! has to wait, returns false. //!Throws: interprocess_exception on error. bool try_lock_sharable(); //!Effects: The calling thread tries to acquire sharable ownership of the mutex - //! waiting if necessary until no other thread has has exclusive or upgradable - //! ownership of the mutex or abs_time is reached. - //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. + //! waiting if necessary until no other thread has exclusive + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock_sharable(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have sharable ownership of the mutex. - //!Effects: The calling thread releases the sharable ownership of the mutex. + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The calling thread releases the sharable ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock_sharable(); @@ -113,84 +114,84 @@ class interprocess_upgradable_mutex void lock_upgradable(); //!Effects: The calling thread tries to acquire upgradable ownership of the mutex - //! without waiting. If no other thread has has exclusive or upgradable ownership - //! of the mutex this succeeds. + //! without waiting. If no other thread has exclusive or upgradable ownership + //! of the mutex this succeeds. //!Returns: If it can acquire upgradable ownership immediately returns true. //! If it has to wait, returns false. //!Throws: interprocess_exception on error. bool try_lock_upgradable(); //!Effects: The calling thread tries to acquire upgradable ownership of the mutex - //! waiting if necessary until no other thread has has exclusive or upgradable + //! waiting if necessary until no other thread has exclusive or upgradable //! ownership of the mutex or abs_time is reached. - //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. + //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock_upgradable(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have upgradable ownership of the mutex. - //!Effects: The calling thread releases the upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The calling thread releases the upgradable ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock_upgradable(); //Demotions - //!Precondition: The thread must have exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. //!Effects: The thread atomically releases exclusive ownership and acquires - //! upgradable ownership. This operation is non-blocking. + //! upgradable ownership. This operation is non-blocking. //!Throws: An exception derived from interprocess_exception on error. void unlock_and_lock_upgradable(); - //!Precondition: The thread must have exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. //!Effects: The thread atomically releases exclusive ownership and acquires - //! sharable ownership. This operation is non-blocking. + //! sharable ownership. This operation is non-blocking. //!Throws: An exception derived from interprocess_exception on error. void unlock_and_lock_sharable(); - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and acquires - //! sharable ownership. This operation is non-blocking. + //! sharable ownership. This operation is non-blocking. //!Throws: An exception derived from interprocess_exception on error. void unlock_upgradable_and_lock_sharable(); //Promotions - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and acquires //! exclusive ownership. This operation will block until all threads with - //! sharable ownership release their sharable lock. + //! sharable ownership release their sharable lock. //!Throws: An exception derived from interprocess_exception on error. void unlock_upgradable_and_lock(); - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and tries to //! acquire exclusive ownership. This operation will fail if there are threads - //! with sharable ownership, but it will maintain upgradable ownership. + //! with sharable ownership, but it will maintain upgradable ownership. //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_upgradable_and_lock(); - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and tries to acquire //! exclusive ownership, waiting if necessary until abs_time. This operation will //! fail if there are threads with sharable ownership or timeout reaches, but it - //! will maintain upgradable ownership. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //! will maintain upgradable ownership. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. */ bool timed_unlock_upgradable_and_lock(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have sharable ownership of the mutex. + //!Precondition: The thread must have sharable ownership of the mutex. //!Effects: The thread atomically releases sharable ownership and tries to acquire //! exclusive ownership. This operation will fail if there are threads with sharable //! or upgradable ownership, but it will maintain sharable ownership. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_sharable_and_lock(); - //!Precondition: The thread must have sharable ownership of the mutex. + //!Precondition: The thread must have sharable ownership of the mutex. //!Effects: The thread atomically releases sharable ownership and tries to acquire //! upgradable ownership. This operation will fail if there are threads with sharable - //! or upgradable ownership, but it will maintain sharable ownership. - //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. + //! or upgradable ownership, but it will maintain sharable ownership. + //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_sharable_and_lock_upgradable(); @@ -248,7 +249,7 @@ class interprocess_upgradable_mutex if(mp_ctrl){ //Recover upgradable lock mp_ctrl->upgradable_in = 1; - ++mp_ctrl->num_upr_shar; + ++mp_ctrl->num_upr_shar; //Execute the second half of exclusive locking mp_ctrl->exclusive_in = 0; } @@ -259,7 +260,7 @@ class interprocess_upgradable_mutex template struct base_constants_t { - static const unsigned max_readers + static const unsigned max_readers = ~(unsigned(3) << (sizeof(unsigned)*CHAR_BIT-2)); }; typedef base_constants_t<0> constants; @@ -308,10 +309,10 @@ inline bool interprocess_upgradable_mutex::try_lock() { scoped_lock_t lock(m_mut, try_to_lock); - //If we can't lock or any has there is any exclusive, upgradable + //If we can't lock or any has there is any exclusive, upgradable //or sharable mark return false; - if(!lock.owns() - || this->m_ctrl.exclusive_in + if(!lock.owns() + || this->m_ctrl.exclusive_in || this->m_ctrl.num_upr_shar){ return false; } @@ -386,9 +387,9 @@ inline bool interprocess_upgradable_mutex::try_lock_upgradable() //The upgradable lock must fail //if an exclusive or upgradable lock has been acquired //or there are too many sharable locks - if(!lock.owns() - || this->m_ctrl.exclusive_in - || this->m_ctrl.upgradable_in + if(!lock.owns() + || this->m_ctrl.exclusive_in + || this->m_ctrl.upgradable_in || this->m_ctrl.num_upr_shar == constants::max_readers){ return false; } @@ -413,11 +414,11 @@ inline bool interprocess_upgradable_mutex::timed_lock_upgradable //The upgradable lock must block in the first gate //if an exclusive or upgradable lock has been acquired //or there are too many sharable locks - while(this->m_ctrl.exclusive_in + while(this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in || this->m_ctrl.num_upr_shar == constants::max_readers){ if(!this->m_first_gate.timed_wait(lock, abs_time)){ - return!(this->m_ctrl.exclusive_in + return!(this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in || this->m_ctrl.num_upr_shar == constants::max_readers); } @@ -560,7 +561,7 @@ inline void interprocess_upgradable_mutex::unlock_upgradable_and_lock() //Simulate unlock_upgradable() without //notifying sharables. this->m_ctrl.upgradable_in = 0; - --this->m_ctrl.num_upr_shar; + --this->m_ctrl.num_upr_shar; //Execute the second half of exclusive locking this->m_ctrl.exclusive_in = 1; @@ -583,7 +584,7 @@ inline bool interprocess_upgradable_mutex::try_unlock_upgradable_and_lock() } //Now unlock upgradable and mark exclusive this->m_ctrl.upgradable_in = 0; - --this->m_ctrl.num_upr_shar; + --this->m_ctrl.num_upr_shar; this->m_ctrl.exclusive_in = 1; return true; } @@ -597,7 +598,7 @@ inline bool interprocess_upgradable_mutex::timed_unlock_upgradable_and_lock //Simulate unlock_upgradable() without //notifying sharables. this->m_ctrl.upgradable_in = 0; - --this->m_ctrl.num_upr_shar; + --this->m_ctrl.num_upr_shar; //Execute the second half of exclusive locking this->m_ctrl.exclusive_in = 1; @@ -617,10 +618,10 @@ inline bool interprocess_upgradable_mutex::try_unlock_sharable_and_lock() { scoped_lock_t lock(m_mut, try_to_lock); - //If we can't lock or any has there is any exclusive, upgradable + //If we can't lock or any has there is any exclusive, upgradable //or sharable mark return false; - if(!lock.owns() - || this->m_ctrl.exclusive_in + if(!lock.owns() + || this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in || this->m_ctrl.num_upr_shar != 1){ return false; @@ -637,7 +638,7 @@ inline bool interprocess_upgradable_mutex::try_unlock_sharable_and_lock_upgradab //The upgradable lock must fail //if an exclusive or upgradable lock has been acquired if(!lock.owns() - || this->m_ctrl.exclusive_in + || this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in){ return false; } diff --git a/3party/boost/boost/interprocess/sync/lock_options.hpp b/3party/boost/boost/interprocess/sync/lock_options.hpp index 05c0d7e641..74f3399a4c 100644 --- a/3party/boost/boost/interprocess/sync/lock_options.hpp +++ b/3party/boost/boost/interprocess/sync/lock_options.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // diff --git a/3party/boost/boost/interprocess/sync/mutex_family.hpp b/3party/boost/boost/interprocess/sync/mutex_family.hpp index 1f4ced2c47..b153ffea3e 100644 --- a/3party/boost/boost/interprocess/sync/mutex_family.hpp +++ b/3party/boost/boost/interprocess/sync/mutex_family.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -29,7 +29,7 @@ namespace boost { namespace interprocess { -//!Describes interprocess_mutex family to use with Interprocess framework +//!Describes interprocess_mutex family to use with Interprocess framework //!based on boost::interprocess synchronization objects. struct mutex_family { @@ -37,7 +37,7 @@ struct mutex_family typedef boost::interprocess::interprocess_recursive_mutex recursive_mutex_type; }; -//!Describes interprocess_mutex family to use with Interprocess frameworks +//!Describes interprocess_mutex family to use with Interprocess frameworks //!based on null operation synchronization objects. struct null_mutex_family { diff --git a/3party/boost/boost/interprocess/sync/named_condition.hpp b/3party/boost/boost/interprocess/sync/named_condition.hpp index a38d4181c7..ca0205ad73 100644 --- a/3party/boost/boost/interprocess/sync/named_condition.hpp +++ b/3party/boost/boost/interprocess/sync/named_condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -17,31 +17,26 @@ #include #include -#include -#include #include #include -#include -#include -#include -#include -#include -#include +#include #include -#if defined BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES -#include -#include +#include +#if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#else + #include #endif - //!\file -//!Describes process-shared variables interprocess_condition class +//!Describes a named condition class for inter-process synchronization namespace boost { namespace interprocess { /// @cond -namespace detail{ class interprocess_tester; } +namespace ipcdetail{ class interprocess_tester; } /// @endcond //! A global condition variable that can be created by name. @@ -60,7 +55,7 @@ class named_condition //!If the condition can't be created throws interprocess_exception named_condition(create_only_t create_only, const char *name, const permissions &perm = permissions()); - //!Opens or creates a global condition with a name. + //!Opens or creates a global condition with a name. //!If the condition is created, this call is equivalent to //!named_condition(create_only_t, ... ) //!If the condition is already created, this call is equivalent @@ -81,7 +76,7 @@ class named_condition //!use remove(). ~named_condition(); - //!If there is a thread waiting on *this, change that + //!If there is a thread waiting on *this, change that //!thread's state to ready. Otherwise there is no effect.*/ void notify_one(); @@ -89,8 +84,8 @@ class named_condition //!If there are no waiting threads, notify_all() has no effect. void notify_all(); - //!Releases the lock on the named_mutex object associated with lock, blocks - //!the current thread of execution until readied by a call to + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to //!this->notify_one() or this->notify_all(), and then reacquires the lock. template void wait(L& lock); @@ -100,16 +95,16 @@ class named_condition template void wait(L& lock, Pr pred); - //!Releases the lock on the named_mutex object associated with lock, blocks - //!the current thread of execution until readied by a call to - //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, //!and then reacquires the lock. //!Returns: false if time abs_time is reached, otherwise true. template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time); - //!The same as: while (!pred()) { - //! if (!timed_wait(lock, abs_time)) return pred(); + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); //! } return true; template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred); @@ -120,78 +115,16 @@ class named_condition /// @cond private: - - struct condition_holder - { - interprocess_condition cond_; - //If named_mutex is implemented using semaphores - //we need to store an additional mutex - #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - interprocess_mutex mutex_; - #endif - }; - - interprocess_condition *condition() const - { return &static_cast(m_shmem.get_user_address())->cond_; } - - template - class lock_inverter - { - Lock &l_; - public: - lock_inverter(Lock &l) - : l_(l) - {} - void lock() { l_.unlock(); } - void unlock() { l_.lock(); } - }; - - #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - interprocess_mutex *mutex() const - { return &static_cast(m_shmem.get_user_address())->mutex_; } - - template - void do_wait(Lock& lock) - { - //named_condition only works with named_mutex - BOOST_STATIC_ASSERT((detail::is_convertible::value == true)); - - //lock internal before unlocking external to avoid race with a notifier - scoped_lock internal_lock(*this->mutex()); - lock_inverter inverted_lock(lock); - scoped_lock > external_unlock(inverted_lock); - - //unlock internal first to avoid deadlock with near simultaneous waits - scoped_lock internal_unlock; - internal_lock.swap(internal_unlock); - this->condition()->wait(internal_unlock); - } - - template - bool do_timed_wait(Lock& lock, const boost::posix_time::ptime &abs_time) - { - //named_condition only works with named_mutex - BOOST_STATIC_ASSERT((detail::is_convertible::value == true)); - //lock internal before unlocking external to avoid race with a notifier - scoped_lock internal_lock(*this->mutex(), abs_time); - if(!internal_lock) return false; - lock_inverter inverted_lock(lock); - scoped_lock > external_unlock(inverted_lock); - - //unlock internal first to avoid deadlock with near simultaneous waits - scoped_lock internal_unlock; - internal_lock.swap(internal_unlock); - return this->condition()->timed_wait(internal_unlock, abs_time); - } + #if defined(BOOST_INTERPROCESS_USE_WINDOWS) + typedef ipcdetail::windows_named_condition condition_type; + #else + typedef ipcdetail::shm_named_condition condition_type; #endif + condition_type m_cond; - friend class detail::interprocess_tester; - void dont_close_on_destruction(); - - detail::managed_open_or_create_impl m_shmem; - - template friend class boost::interprocess::detail::named_creation_functor; - typedef detail::named_creation_functor construct_func_t; + friend class ipcdetail::interprocess_tester; + void dont_close_on_destruction() + { ipcdetail::interprocess_tester::dont_close_on_destruction(m_cond); } /// @endcond }; @@ -201,165 +134,43 @@ inline named_condition::~named_condition() {} inline named_condition::named_condition(create_only_t, const char *name, const permissions &perm) - : m_shmem (create_only - ,name - ,sizeof(condition_holder) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoCreate) - ,perm) + : m_cond(create_only_t(), name, perm) {} inline named_condition::named_condition(open_or_create_t, const char *name, const permissions &perm) - : m_shmem (open_or_create - ,name - ,sizeof(condition_holder) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoOpenOrCreate) - ,perm) + : m_cond(open_or_create_t(), name, perm) {} inline named_condition::named_condition(open_only_t, const char *name) - : m_shmem (open_only - ,name - ,read_write - ,0 - ,construct_func_t(detail::DoOpen)) + : m_cond(open_only_t(), name) {} -inline void named_condition::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_shmem); } - -#if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - inline void named_condition::notify_one() -{ - scoped_lock internal_lock(*this->mutex()); - this->condition()->notify_one(); -} +{ m_cond.notify_one(); } inline void named_condition::notify_all() -{ - scoped_lock internal_lock(*this->mutex()); - this->condition()->notify_all(); -} +{ m_cond.notify_all(); } template inline void named_condition::wait(L& lock) -{ - if (!lock) - throw lock_exception(); - this->do_wait(lock); -} +{ m_cond.wait(lock); } template inline void named_condition::wait(L& lock, Pr pred) -{ - if (!lock) - throw lock_exception(); - while (!pred()) - this->do_wait(lock); -} +{ m_cond.wait(lock, pred); } template inline bool named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock); - return true; - } - if (!lock) - throw lock_exception(); - return this->do_timed_wait(lock, abs_time); -} +{ return m_cond.timed_wait(lock, abs_time); } template inline bool named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock, pred); - return true; - } - if (!lock) - throw lock_exception(); - - while (!pred()){ - if(!this->do_timed_wait(lock, abs_time)){ - return pred(); - } - } - return true; -} - -#else - -inline void named_condition::notify_one() -{ this->condition()->notify_one(); } - -inline void named_condition::notify_all() -{ this->condition()->notify_all(); } - -template -inline void named_condition::wait(L& lock) -{ - if (!lock) - throw lock_exception(); - this->condition()->do_wait(*lock.mutex()->mutex()); -} - -template -inline void named_condition::wait(L& lock, Pr pred) -{ - if (!lock) - throw lock_exception(); - - while (!pred()) - this->condition()->do_wait(*lock.mutex()->mutex()); -} - -template -inline bool named_condition::timed_wait - (L& lock, const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock); - return true; - } - if (!lock) - throw lock_exception(); - return this->condition()->do_timed_wait(abs_time, *lock.mutex()->mutex()); -} - -template -inline bool named_condition::timed_wait - (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock, pred); - return true; - } - if (!lock) - throw lock_exception(); - - while (!pred()){ - if (!this->condition()->do_timed_wait(abs_time, *lock.mutex()->mutex())) - return pred(); - } - - return true; -} - -#endif +{ return m_cond.timed_wait(lock, abs_time, pred); } inline bool named_condition::remove(const char *name) -{ return shared_memory_object::remove(name); } +{ return condition_type::remove(name); } /// @endcond diff --git a/3party/boost/boost/interprocess/sync/named_mutex.hpp b/3party/boost/boost/interprocess/sync/named_mutex.hpp index 4aca03b880..c34193c697 100644 --- a/3party/boost/boost/interprocess/sync/named_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/named_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,17 +19,18 @@ #include #include #include -#include #include +#include #include #if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - #include + #include + #define BOOST_INTERPROCESS_USE_POSIX_SEMAPHORES +#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS #else - #include - #include - #include - #include +#include #endif //!\file @@ -40,7 +41,7 @@ namespace interprocess { class named_condition; -//!A mutex with a global name, so it can be found from different +//!A mutex with a global name, so it can be found from different //!processes. This mutex can't be placed in shared memory, and //!each process should have it's own named_mutex. class named_mutex @@ -59,7 +60,7 @@ class named_mutex //!Throws interprocess_exception on error. named_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); - //!Opens or creates a global mutex with a name. + //!Opens or creates a global mutex with a name. //!If the mutex is created, this call is equivalent to //!named_mutex(create_only_t, ... ) //!If the mutex is already created, this call is equivalent @@ -88,7 +89,7 @@ class named_mutex //!Throws interprocess_exception if a severe error is found void lock(); - //!Tries to lock the interprocess_mutex, returns false when interprocess_mutex + //!Tries to lock the interprocess_mutex, returns false when interprocess_mutex //!is already locked, returns true when success. //!Throws interprocess_exception if a severe error is found bool try_lock(); @@ -104,126 +105,62 @@ class named_mutex /// @cond private: - friend class detail::interprocess_tester; + friend class ipcdetail::interprocess_tester; void dont_close_on_destruction(); - #if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - detail::named_semaphore_wrapper m_sem; + #if defined(BOOST_INTERPROCESS_USE_POSIX_SEMAPHORES) + typedef ipcdetail::posix_named_mutex impl_t; + impl_t m_mut; + #undef BOOST_INTERPROCESS_USE_POSIX_SEMAPHORES + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + typedef ipcdetail::windows_named_mutex impl_t; + impl_t m_mut; + #undef BOOST_INTERPROCESS_USE_WINDOWS #else - interprocess_mutex *mutex() const - { return static_cast(m_shmem.get_user_address()); } - - detail::managed_open_or_create_impl m_shmem; - typedef detail::named_creation_functor construct_func_t; + typedef ipcdetail::shm_named_mutex impl_t; + impl_t m_mut; + public: + interprocess_mutex *mutex() const + { return m_mut.mutex(); } #endif + /// @endcond }; /// @cond -#if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - inline named_mutex::named_mutex(create_only_t, const char *name, const permissions &perm) - : m_sem(detail::DoCreate, name, 1, perm) + : m_mut(create_only_t(), name, perm) {} inline named_mutex::named_mutex(open_or_create_t, const char *name, const permissions &perm) - : m_sem(detail::DoOpenOrCreate, name, 1, perm) + : m_mut(open_or_create_t(), name, perm) {} inline named_mutex::named_mutex(open_only_t, const char *name) - : m_sem(detail::DoOpen, name, 1, permissions()) + : m_mut(open_only_t(), name) {} inline void named_mutex::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_sem); } +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_mut); } inline named_mutex::~named_mutex() {} inline void named_mutex::lock() -{ m_sem.wait(); } +{ m_mut.lock(); } inline void named_mutex::unlock() -{ m_sem.post(); } +{ m_mut.unlock(); } inline bool named_mutex::try_lock() -{ return m_sem.try_wait(); } +{ return m_mut.try_lock(); } inline bool named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->lock(); - return true; - } - return m_sem.timed_wait(abs_time); -} +{ return m_mut.timed_lock(abs_time); } inline bool named_mutex::remove(const char *name) -{ return detail::named_semaphore_wrapper::remove(name); } - -#else - -inline void named_mutex::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_shmem); } - -inline named_mutex::~named_mutex() -{} - -inline named_mutex::named_mutex(create_only_t, const char *name, const permissions &perm) - : m_shmem (create_only - ,name - ,sizeof(interprocess_mutex) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoCreate) - ,perm) -{} - -inline named_mutex::named_mutex(open_or_create_t, const char *name, const permissions &perm) - : m_shmem (open_or_create - ,name - ,sizeof(interprocess_mutex) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoOpenOrCreate) - ,perm) -{} - -inline named_mutex::named_mutex(open_only_t, const char *name) - : m_shmem (open_only - ,name - ,read_write - ,0 - ,construct_func_t(detail::DoOpen)) -{} - -inline void named_mutex::lock() -{ this->mutex()->lock(); } - -inline void named_mutex::unlock() -{ this->mutex()->unlock(); } - -inline bool named_mutex::try_lock() -{ return this->mutex()->try_lock(); } - -inline bool named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->lock(); - return true; - } - return this->mutex()->timed_lock(abs_time); -} - -inline bool named_mutex::remove(const char *name) -{ return shared_memory_object::remove(name); } - -#endif +{ return impl_t::remove(name); } /// @endcond diff --git a/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp index aa34bc1260..2d4b9b2416 100644 --- a/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -18,13 +18,14 @@ #include #include #include -#include #include -#include -#include -#include -#include #include +#if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#else + #include +#endif //!\file //!Describes a named named_recursive_mutex class for inter-process synchronization @@ -33,10 +34,10 @@ namespace boost { namespace interprocess { /// @cond -namespace detail{ class interprocess_tester; } +namespace ipcdetail{ class interprocess_tester; } /// @endcond -//!A recursive mutex with a global name, so it can be found from different +//!A recursive mutex with a global name, so it can be found from different //!processes. This mutex can't be placed in shared memory, and //!each process should have it's own named_recursive_mutex. class named_recursive_mutex @@ -53,7 +54,7 @@ class named_recursive_mutex //!If the recursive_mutex can't be created throws interprocess_exception named_recursive_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); - //!Opens or creates a global recursive_mutex with a name. + //!Opens or creates a global recursive_mutex with a name. //!If the recursive_mutex is created, this call is equivalent to //!named_recursive_mutex(create_only_t, ... ) //!If the recursive_mutex is already created, this call is equivalent @@ -82,7 +83,7 @@ class named_recursive_mutex //!Throws interprocess_exception if a severe error is found. void lock(); - //!Tries to lock the named_recursive_mutex, returns false when named_recursive_mutex + //!Tries to lock the named_recursive_mutex, returns false when named_recursive_mutex //!is already locked, returns true when success. //!Throws interprocess_exception if a severe error is found. bool try_lock(); @@ -98,14 +99,17 @@ class named_recursive_mutex /// @cond private: - friend class detail::interprocess_tester; + friend class ipcdetail::interprocess_tester; void dont_close_on_destruction(); - interprocess_recursive_mutex *mutex() const - { return static_cast(m_shmem.get_user_address()); } + #if defined(BOOST_INTERPROCESS_USE_WINDOWS) + typedef ipcdetail::windows_named_recursive_mutex impl_t; + #undef BOOST_INTERPROCESS_USE_WINDOWS + #else + typedef ipcdetail::shm_named_recursive_mutex impl_t; + #endif + impl_t m_mut; - detail::managed_open_or_create_impl m_shmem; - typedef detail::named_creation_functor construct_func_t; /// @endcond }; @@ -115,48 +119,28 @@ inline named_recursive_mutex::~named_recursive_mutex() {} inline void named_recursive_mutex::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_shmem); } +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_mut); } inline named_recursive_mutex::named_recursive_mutex(create_only_t, const char *name, const permissions &perm) - : m_shmem (create_only - ,name - ,sizeof(interprocess_recursive_mutex) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoCreate) - ,perm) + : m_mut (create_only, name, perm) {} inline named_recursive_mutex::named_recursive_mutex(open_or_create_t, const char *name, const permissions &perm) - : m_shmem (open_or_create - ,name - ,sizeof(interprocess_recursive_mutex) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoOpenOrCreate) - ,perm) + : m_mut (open_or_create, name, perm) {} inline named_recursive_mutex::named_recursive_mutex(open_only_t, const char *name) - : m_shmem (open_only - ,name - ,read_write - ,0 - ,construct_func_t(detail::DoOpen)) + : m_mut (open_only, name) {} inline void named_recursive_mutex::lock() -{ this->mutex()->lock(); } +{ m_mut.lock(); } inline void named_recursive_mutex::unlock() -{ this->mutex()->unlock(); } +{ m_mut.unlock(); } inline bool named_recursive_mutex::try_lock() -{ return this->mutex()->try_lock(); } +{ return m_mut.try_lock(); } inline bool named_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) { @@ -164,11 +148,11 @@ inline bool named_recursive_mutex::timed_lock(const boost::posix_time::ptime &ab this->lock(); return true; } - return this->mutex()->timed_lock(abs_time); + return m_mut.timed_lock(abs_time); } inline bool named_recursive_mutex::remove(const char *name) -{ return shared_memory_object::remove(name); } +{ return impl_t::remove(name); } /// @endcond diff --git a/3party/boost/boost/interprocess/sync/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/named_semaphore.hpp index d8a4d58182..39c9096fb6 100644 --- a/3party/boost/boost/interprocess/sync/named_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/named_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -24,12 +24,13 @@ #include #if defined(BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES) -#include +#include +//Experimental... +#elif !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS #else -#include -#include -#include -#include +#include #endif //!\file @@ -38,8 +39,8 @@ namespace boost { namespace interprocess { -//!A semaphore with a global name, so it can be found from different -//!processes. Allows several resource sharing patterns and efficient +//!A semaphore with a global name, so it can be found from different +//!processes. Allows several resource sharing patterns and efficient //!acknowledgment mechanisms. class named_semaphore { @@ -52,11 +53,11 @@ class named_semaphore /// @endcond public: - //!Creates a global semaphore with a name, and an initial count. + //!Creates a global semaphore with a name, and an initial count. //!If the semaphore can't be created throws interprocess_exception named_semaphore(create_only_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()); - //!Opens or creates a global semaphore with a name, and an initial count. + //!Opens or creates a global semaphore with a name, and an initial count. //!If the semaphore is created, this call is equivalent to //!named_semaphore(create_only_t, ...) //!If the semaphore is already created, this call is equivalent to @@ -83,7 +84,7 @@ class named_semaphore void post(); //!Decrements the semaphore. If the semaphore value is not greater than zero, - //!then the calling process/thread blocks until it can decrement the counter. + //!then the calling process/thread blocks until it can decrement the counter. //!If there is an error an interprocess_exception exception is thrown. void wait(); @@ -105,44 +106,42 @@ class named_semaphore /// @cond private: - friend class detail::interprocess_tester; + friend class ipcdetail::interprocess_tester; void dont_close_on_destruction(); #if defined(BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES) - detail::named_semaphore_wrapper m_sem; + typedef ipcdetail::posix_named_semaphore impl_t; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + typedef ipcdetail::windows_named_semaphore impl_t; #else - interprocess_semaphore *semaphore() const - { return static_cast(m_shmem.get_user_address()); } - - detail::managed_open_or_create_impl m_shmem; - typedef detail::named_creation_functor construct_func_t; + typedef ipcdetail::shm_named_semaphore impl_t; #endif + impl_t m_sem; /// @endcond }; /// @cond -#if defined(BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES) - inline named_semaphore::named_semaphore (create_only_t, const char *name, unsigned int initialCount, const permissions &perm) - : m_sem(detail::DoCreate, name, initialCount, perm) + : m_sem(create_only, name, initialCount, perm) {} inline named_semaphore::named_semaphore (open_or_create_t, const char *name, unsigned int initialCount, const permissions &perm) - : m_sem(detail::DoOpenOrCreate, name, initialCount, perm) + : m_sem(open_or_create, name, initialCount, perm) {} inline named_semaphore::named_semaphore(open_only_t, const char *name) - : m_sem(detail::DoOpen, name, 1, permissions()) + : m_sem(open_only, name) {} inline named_semaphore::~named_semaphore() {} inline void named_semaphore::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_sem); } +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_sem); } inline void named_semaphore::wait() { m_sem.wait(); } @@ -163,73 +162,7 @@ inline bool named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time } inline bool named_semaphore::remove(const char *name) -{ return detail::named_semaphore_wrapper::remove(name); } - -#else - -inline named_semaphore::~named_semaphore() -{} - -inline void named_semaphore::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_shmem); } - -inline named_semaphore::named_semaphore - (create_only_t, const char *name, unsigned int initialCount, const permissions &perm) - : m_shmem (create_only - ,name - ,sizeof(interprocess_semaphore) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoCreate, initialCount) - ,perm) -{} - -inline named_semaphore::named_semaphore - (open_or_create_t, const char *name, unsigned int initialCount, const permissions &perm) - : m_shmem (open_or_create - ,name - ,sizeof(interprocess_semaphore) + - detail::managed_open_or_create_impl:: - ManagedOpenOrCreateUserOffset - ,read_write - ,0 - ,construct_func_t(detail::DoOpenOrCreate, initialCount) - ,perm) -{} - -inline named_semaphore::named_semaphore - (open_only_t, const char *name) - : m_shmem (open_only - ,name - ,read_write - ,0 - ,construct_func_t(detail::DoOpen, 0)) -{} - -inline void named_semaphore::post() -{ semaphore()->post(); } - -inline void named_semaphore::wait() -{ semaphore()->wait(); } - -inline bool named_semaphore::try_wait() -{ return semaphore()->try_wait(); } - -inline bool named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(); - return true; - } - return semaphore()->timed_wait(abs_time); -} - -inline bool named_semaphore::remove(const char *name) -{ return shared_memory_object::remove(name); } - -#endif +{ return impl_t::remove(name); } /// @endcond diff --git a/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp index 0cb246818e..c45fd08270 100644 --- a/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include //!\file @@ -33,12 +33,12 @@ namespace boost { namespace interprocess { /// @cond -namespace detail{ class interprocess_tester; } +namespace ipcdetail{ class interprocess_tester; } /// @endcond class named_condition; -//!A upgradable mutex with a global name, so it can be found from different +//!A upgradable mutex with a global name, so it can be found from different //!processes. This mutex can't be placed in shared memory, and //!each process should have it's own named upgradable mutex. class named_upgradable_mutex @@ -52,11 +52,11 @@ class named_upgradable_mutex /// @endcond public: - //!Creates a global upgradable mutex with a name. + //!Creates a global upgradable mutex with a name. //!If the upgradable mutex can't be created throws interprocess_exception named_upgradable_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); - //!Opens or creates a global upgradable mutex with a name, and an initial count. + //!Opens or creates a global upgradable mutex with a name, and an initial count. //!If the upgradable mutex is created, this call is equivalent to //!named_upgradable_mutex(create_only_t, ...) //!If the upgradable mutex is already created, this call is equivalent to @@ -94,42 +94,42 @@ class named_upgradable_mutex bool try_lock(); //!Effects: The calling thread tries to acquire exclusive ownership of the mutex - //! waiting if necessary until no other thread has has exclusive, sharable or - //! upgradable ownership of the mutex or abs_time is reached. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //! waiting if necessary until no other thread has exclusive, sharable or + //! upgradable ownership of the mutex or abs_time is reached. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have exclusive ownership of the mutex. - //!Effects: The calling thread releases the exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The calling thread releases the exclusive ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock(); //Sharable locking //!Effects: The calling thread tries to obtain sharable ownership of the mutex, - //! and if another thread has exclusive or upgradable ownership of the mutex, + //! and if another thread has exclusive ownership of the mutex, //! waits until it can obtain the ownership. //!Throws: interprocess_exception on error. void lock_sharable(); //!Effects: The calling thread tries to acquire sharable ownership of the mutex - //! without waiting. If no other thread has has exclusive or upgradable ownership - //! of the mutex this succeeds. + //! without waiting. If no other thread has exclusive ownership + //! of the mutex this succeeds. //!Returns: If it can acquire sharable ownership immediately returns true. If it - //! has to wait, returns false. + //! has to wait, returns false. //!Throws: interprocess_exception on error. bool try_lock_sharable(); //!Effects: The calling thread tries to acquire sharable ownership of the mutex - //! waiting if necessary until no other thread has has exclusive or upgradable - //! ownership of the mutex or abs_time is reached. - //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. + //! waiting if necessary until no other thread has exclusive + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock_sharable(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have sharable ownership of the mutex. - //!Effects: The calling thread releases the sharable ownership of the mutex. + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The calling thread releases the sharable ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock_sharable(); @@ -142,76 +142,76 @@ class named_upgradable_mutex void lock_upgradable(); //!Effects: The calling thread tries to acquire upgradable ownership of the mutex - //! without waiting. If no other thread has has exclusive or upgradable ownership - //! of the mutex this succeeds. + //! without waiting. If no other thread has exclusive or upgradable ownership + //! of the mutex this succeeds. //!Returns: If it can acquire upgradable ownership immediately returns true. //! If it has to wait, returns false. //!Throws: interprocess_exception on error. bool try_lock_upgradable(); //!Effects: The calling thread tries to acquire upgradable ownership of the mutex - //! waiting if necessary until no other thread has has exclusive or upgradable + //! waiting if necessary until no other thread has exclusive or upgradable //! ownership of the mutex or abs_time is reached. - //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. + //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. //!Throws: interprocess_exception on error. bool timed_lock_upgradable(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have upgradable ownership of the mutex. - //!Effects: The calling thread releases the upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The calling thread releases the upgradable ownership of the mutex. //!Throws: An exception derived from interprocess_exception on error. void unlock_upgradable(); //Demotions - //!Precondition: The thread must have exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. //!Effects: The thread atomically releases exclusive ownership and acquires - //! upgradable ownership. This operation is non-blocking. + //! upgradable ownership. This operation is non-blocking. //!Throws: An exception derived from interprocess_exception on error. void unlock_and_lock_upgradable(); - //!Precondition: The thread must have exclusive ownership of the mutex. + //!Precondition: The thread must have exclusive ownership of the mutex. //!Effects: The thread atomically releases exclusive ownership and acquires - //! sharable ownership. This operation is non-blocking. + //! sharable ownership. This operation is non-blocking. //!Throws: An exception derived from interprocess_exception on error. void unlock_and_lock_sharable(); - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and acquires - //! sharable ownership. This operation is non-blocking. + //! sharable ownership. This operation is non-blocking. //!Throws: An exception derived from interprocess_exception on error. void unlock_upgradable_and_lock_sharable(); //Promotions - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and acquires //! exclusive ownership. This operation will block until all threads with - //! sharable ownership release it. + //! sharable ownership release it. //!Throws: An exception derived from interprocess_exception on error. void unlock_upgradable_and_lock(); - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and tries to //! acquire exclusive ownership. This operation will fail if there are threads - //! with sharable ownership, but it will maintain upgradable ownership. + //! with sharable ownership, but it will maintain upgradable ownership. //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_upgradable_and_lock(); - //!Precondition: The thread must have upgradable ownership of the mutex. + //!Precondition: The thread must have upgradable ownership of the mutex. //!Effects: The thread atomically releases upgradable ownership and tries to acquire //! exclusive ownership, waiting if necessary until abs_time. This operation will //! fail if there are threads with sharable ownership or timeout reaches, but it - //! will maintain upgradable ownership. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //! will maintain upgradable ownership. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. bool timed_unlock_upgradable_and_lock(const boost::posix_time::ptime &abs_time); - //!Precondition: The thread must have sharable ownership of the mutex. + //!Precondition: The thread must have sharable ownership of the mutex. //!Effects: The thread atomically releases sharable ownership and tries to acquire //! exclusive ownership. This operation will fail if there are threads with sharable //! or upgradable ownership, but it will maintain sharable ownership. - //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_sharable_and_lock(); @@ -223,14 +223,14 @@ class named_upgradable_mutex /// @cond private: - friend class detail::interprocess_tester; + friend class ipcdetail::interprocess_tester; void dont_close_on_destruction(); interprocess_upgradable_mutex *mutex() const { return static_cast(m_shmem.get_user_address()); } - detail::managed_open_or_create_impl m_shmem; - typedef detail::named_creation_functor construct_func_t; + ipcdetail::managed_open_or_create_impl m_shmem; + typedef ipcdetail::named_creation_functor construct_func_t; /// @endcond }; @@ -244,11 +244,11 @@ inline named_upgradable_mutex::named_upgradable_mutex : m_shmem (create_only ,name ,sizeof(interprocess_upgradable_mutex) + - detail::managed_open_or_create_impl:: + ipcdetail::managed_open_or_create_impl:: ManagedOpenOrCreateUserOffset ,read_write ,0 - ,construct_func_t(detail::DoCreate) + ,construct_func_t(ipcdetail::DoCreate) ,perm) {} @@ -257,11 +257,11 @@ inline named_upgradable_mutex::named_upgradable_mutex : m_shmem (open_or_create ,name ,sizeof(interprocess_upgradable_mutex) + - detail::managed_open_or_create_impl:: + ipcdetail::managed_open_or_create_impl:: ManagedOpenOrCreateUserOffset ,read_write ,0 - ,construct_func_t(detail::DoOpenOrCreate) + ,construct_func_t(ipcdetail::DoOpenOrCreate) ,perm) {} @@ -271,11 +271,11 @@ inline named_upgradable_mutex::named_upgradable_mutex ,name ,read_write ,0 - ,construct_func_t(detail::DoOpen)) + ,construct_func_t(ipcdetail::DoOpen)) {} inline void named_upgradable_mutex::dont_close_on_destruction() -{ detail::interprocess_tester::dont_close_on_destruction(m_shmem); } +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_shmem); } inline void named_upgradable_mutex::lock() { this->mutex()->lock(); } diff --git a/3party/boost/boost/interprocess/sync/null_mutex.hpp b/3party/boost/boost/interprocess/sync/null_mutex.hpp index 182b40dbfa..afe444ed3f 100644 --- a/3party/boost/boost/interprocess/sync/null_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/null_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // diff --git a/3party/boost/boost/interprocess/sync/posix/condition.hpp b/3party/boost/boost/interprocess/sync/posix/condition.hpp new file mode 100644 index 0000000000..48be099f60 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/posix/condition.hpp @@ -0,0 +1,191 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_CONDITION_HPP +#define BOOST_INTERPROCESS_POSIX_CONDITION_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class posix_condition +{ + //Non-copyable + posix_condition(const posix_condition &); + posix_condition &operator=(const posix_condition &); + + public: + //!Constructs a posix_condition. On error throws interprocess_exception. + posix_condition(); + + //!Destroys *this + //!liberating system resources. + ~posix_condition(); + + //!If there is a thread waiting on *this, change that + //!thread's state to ready. Otherwise there is no effect. + void notify_one(); + + //!Change the state of all threads waiting on *this to ready. + //!If there are no waiting threads, notify_all() has no effect. + void notify_all(); + + //!Releases the lock on the posix_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), and then reacquires the lock. + template + void wait(L& lock) + { + if (!lock) + throw lock_exception(); + this->do_wait(*lock.mutex()); + } + + //!The same as: + //!while (!pred()) wait(lock) + template + void wait(L& lock, Pr pred) + { + if (!lock) + throw lock_exception(); + + while (!pred()) + this->do_wait(*lock.mutex()); + } + + //!Releases the lock on the posix_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!and then reacquires the lock. + //!Returns: false if time abs_time is reached, otherwise true. + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return this->do_timed_wait(abs_time, *lock.mutex()); + } + + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); + //! } return true; + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + while (!pred()){ + if (!this->do_timed_wait(abs_time, *lock.mutex())) + return pred(); + } + + return true; + } + + + void do_wait(posix_mutex &mut); + + bool do_timed_wait(const boost::posix_time::ptime &abs_time, posix_mutex &mut); + + private: + pthread_cond_t m_condition; +}; + +inline posix_condition::posix_condition() +{ + int res; + pthread_condattr_t cond_attr; + res = pthread_condattr_init(&cond_attr); + if(res != 0){ + throw interprocess_exception("pthread_condattr_init failed"); + } + res = pthread_condattr_setpshared(&cond_attr, PTHREAD_PROCESS_SHARED); + if(res != 0){ + pthread_condattr_destroy(&cond_attr); + throw interprocess_exception(res); + } + res = pthread_cond_init(&m_condition, &cond_attr); + pthread_condattr_destroy(&cond_attr); + if(res != 0){ + throw interprocess_exception(res); + } +} + +inline posix_condition::~posix_condition() +{ + int res = 0; + res = pthread_cond_destroy(&m_condition); + BOOST_ASSERT(res == 0); +} + +inline void posix_condition::notify_one() +{ + int res = 0; + res = pthread_cond_signal(&m_condition); + BOOST_ASSERT(res == 0); +} + +inline void posix_condition::notify_all() +{ + int res = 0; + res = pthread_cond_broadcast(&m_condition); + BOOST_ASSERT(res == 0); +} + +inline void posix_condition::do_wait(posix_mutex &mut) +{ + pthread_mutex_t* pmutex = &mut.m_mut; + int res = 0; + res = pthread_cond_wait(&m_condition, pmutex); + BOOST_ASSERT(res == 0); +} + +inline bool posix_condition::do_timed_wait + (const boost::posix_time::ptime &abs_time, posix_mutex &mut) +{ + timespec ts = ptime_to_timespec(abs_time); + pthread_mutex_t* pmutex = &mut.m_mut; + int res = 0; + res = pthread_cond_timedwait(&m_condition, pmutex, &ts); + BOOST_ASSERT(res == 0 || res == ETIMEDOUT); + + return res != ETIMEDOUT; +} + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif //#ifndef BOOST_INTERPROCESS_POSIX_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/posix/interprocess_barrier.hpp b/3party/boost/boost/interprocess/sync/posix/interprocess_barrier.hpp deleted file mode 100644 index fd1d48fa1d..0000000000 --- a/3party/boost/boost/interprocess/sync/posix/interprocess_barrier.hpp +++ /dev/null @@ -1,45 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2006. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include - -namespace boost { -namespace interprocess { - -inline barrier::barrier(unsigned int count) -{ - if (count == 0) - throw std::invalid_argument("count cannot be zero."); - detail::barrierattr_wrapper barrier_attr; - detail::barrier_initializer barrier - (m_barrier, barrier_attr, static_cast(count)); - barrier.release(); -} - -inline barrier::~barrier() -{ - int res = pthread_barrier_destroy(&m_barrier); - BOOST_ASSERT(res == 0);(void)res; -} - -inline bool barrier::wait() -{ - int res = pthread_barrier_wait(&m_barrier); - - if (res != PTHREAD_BARRIER_SERIAL_THREAD && res != 0){ - throw interprocess_exception(res); - } - return res == PTHREAD_BARRIER_SERIAL_THREAD; -} - -} //namespace interprocess { -} //namespace boost { diff --git a/3party/boost/boost/interprocess/sync/posix/interprocess_condition.hpp b/3party/boost/boost/interprocess/sync/posix/interprocess_condition.hpp deleted file mode 100644 index a506b619cf..0000000000 --- a/3party/boost/boost/interprocess/sync/posix/interprocess_condition.hpp +++ /dev/null @@ -1,82 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include - -namespace boost { - -namespace interprocess { - -inline interprocess_condition::interprocess_condition() -{ - int res; - pthread_condattr_t cond_attr; - res = pthread_condattr_init(&cond_attr); - if(res != 0){ - throw interprocess_exception("pthread_condattr_init failed"); - } - res = pthread_condattr_setpshared(&cond_attr, PTHREAD_PROCESS_SHARED); - if(res != 0){ - pthread_condattr_destroy(&cond_attr); - throw interprocess_exception(res); - } - res = pthread_cond_init(&m_condition, &cond_attr); - pthread_condattr_destroy(&cond_attr); - if(res != 0){ - throw interprocess_exception(res); - } -} - -inline interprocess_condition::~interprocess_condition() -{ - int res = 0; - res = pthread_cond_destroy(&m_condition); - BOOST_ASSERT(res == 0); -} - -inline void interprocess_condition::notify_one() -{ - int res = 0; - res = pthread_cond_signal(&m_condition); - BOOST_ASSERT(res == 0); -} - -inline void interprocess_condition::notify_all() -{ - int res = 0; - res = pthread_cond_broadcast(&m_condition); - BOOST_ASSERT(res == 0); -} - -inline void interprocess_condition::do_wait(interprocess_mutex &mut) -{ - pthread_mutex_t* pmutex = &mut.m_mut; - int res = 0; - res = pthread_cond_wait(&m_condition, pmutex); - BOOST_ASSERT(res == 0); -} - -inline bool interprocess_condition::do_timed_wait - (const boost::posix_time::ptime &abs_time, interprocess_mutex &mut) -{ - timespec ts = detail::ptime_to_timespec(abs_time); - pthread_mutex_t* pmutex = &mut.m_mut; - int res = 0; - res = pthread_cond_timedwait(&m_condition, pmutex, &ts); - BOOST_ASSERT(res == 0 || res == ETIMEDOUT); - - return res != ETIMEDOUT; -} - -} //namespace interprocess - -} // namespace boost diff --git a/3party/boost/boost/interprocess/sync/posix/interprocess_semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/interprocess_semaphore.hpp deleted file mode 100644 index 893cad25d8..0000000000 --- a/3party/boost/boost/interprocess/sync/posix/interprocess_semaphore.hpp +++ /dev/null @@ -1,49 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2009. 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) -// -// See http://www.boost.org/libs/interprocess for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#include -#include - -namespace boost { - -namespace interprocess { - -inline interprocess_semaphore::~interprocess_semaphore() -{} - -inline interprocess_semaphore::interprocess_semaphore(unsigned int initialCount) - : m_sem(initialCount) -{} - -inline void interprocess_semaphore::post() -{ m_sem.post(); } - -inline void interprocess_semaphore::wait() -{ m_sem.wait(); } - -inline bool interprocess_semaphore::try_wait() -{ return m_sem.try_wait(); } - -inline bool interprocess_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(); - return true; - } - return m_sem.timed_wait(abs_time); -} -/* -inline int interprocess_semaphore::get_count() const -{ return m_sem.get_count(); } -*/ -} //namespace interprocess { - -} //namespace boost { - diff --git a/3party/boost/boost/interprocess/sync/posix/interprocess_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/mutex.hpp similarity index 64% rename from 3party/boost/boost/interprocess/sync/posix/interprocess_mutex.hpp rename to 3party/boost/boost/interprocess/sync/posix/mutex.hpp index 8e5b4d91d8..393807c97a 100644 --- a/3party/boost/boost/interprocess/sync/posix/interprocess_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/posix/mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -24,9 +24,24 @@ // It is provided "as is" without express or implied warranty. ////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_INTERPROCESS_DETAIL_POSIX_MUTEX_HPP +#define BOOST_INTERPROCESS_DETAIL_POSIX_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include +#include #include #include #include +#include + #ifndef BOOST_INTERPROCESS_POSIX_TIMEOUTS # include #endif @@ -34,27 +49,50 @@ namespace boost { namespace interprocess { +namespace ipcdetail { -inline interprocess_mutex::interprocess_mutex() +class posix_condition; + +class posix_mutex { - detail::mutexattr_wrapper mut_attr; - detail::mutex_initializer mut(m_mut, mut_attr); + posix_mutex(const posix_mutex &); + posix_mutex &operator=(const posix_mutex &); + public: + + posix_mutex(); + ~posix_mutex(); + + void lock(); + bool try_lock(); + bool timed_lock(const boost::posix_time::ptime &abs_time); + void unlock(); + + friend class posix_condition; + + private: + pthread_mutex_t m_mut; +}; + +inline posix_mutex::posix_mutex() +{ + mutexattr_wrapper mut_attr; + mutex_initializer mut(m_mut, mut_attr); mut.release(); } -inline interprocess_mutex::~interprocess_mutex() +inline posix_mutex::~posix_mutex() { int res = pthread_mutex_destroy(&m_mut); BOOST_ASSERT(res == 0);(void)res; } -inline void interprocess_mutex::lock() +inline void posix_mutex::lock() { - if (pthread_mutex_lock(&m_mut) != 0) + if (pthread_mutex_lock(&m_mut) != 0) throw lock_exception(); } -inline bool interprocess_mutex::try_lock() +inline bool posix_mutex::try_lock() { int res = pthread_mutex_trylock(&m_mut); if (!(res == 0 || res == EBUSY)) @@ -62,7 +100,7 @@ inline bool interprocess_mutex::try_lock() return res == 0; } -inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +inline bool posix_mutex::timed_lock(const boost::posix_time::ptime &abs_time) { if(abs_time == boost::posix_time::pos_infin){ this->lock(); @@ -70,7 +108,7 @@ inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_t } #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS - timespec ts = detail::ptime_to_timespec(abs_time); + timespec ts = ptime_to_timespec(abs_time); int res = pthread_mutex_timedlock(&m_mut, &ts); if (res != 0 && res != ETIMEDOUT) throw lock_exception(); @@ -81,8 +119,6 @@ inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_t //Obtain current count and target time boost::posix_time::ptime now = microsec_clock::universal_time(); - if(now >= abs_time) return false; - do{ if(this->try_lock()){ break; @@ -93,19 +129,24 @@ inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_t return false; } // relinquish current time slice - detail::thread_yield(); + thread_yield(); }while (true); return true; #endif //BOOST_INTERPROCESS_POSIX_TIMEOUTS } -inline void interprocess_mutex::unlock() +inline void posix_mutex::unlock() { int res = 0; res = pthread_mutex_unlock(&m_mut); BOOST_ASSERT(res == 0); } +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { + +#include + +#endif //#ifndef BOOST_INTERPROCESS_DETAIL_POSIX_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp new file mode 100644 index 0000000000..931c731eff --- /dev/null +++ b/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp @@ -0,0 +1,116 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP +#define BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class named_condition; + +class posix_named_mutex +{ + /// @cond + + posix_named_mutex(); + posix_named_mutex(const posix_named_mutex &); + posix_named_mutex &operator=(const posix_named_mutex &); + friend class named_condition; + /// @endcond + + public: + posix_named_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); + + posix_named_mutex(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()); + + posix_named_mutex(open_only_t open_only, const char *name); + + ~posix_named_mutex(); + + void unlock(); + void lock(); + bool try_lock(); + bool timed_lock(const boost::posix_time::ptime &abs_time); + static bool remove(const char *name); + + /// @cond + private: + friend class interprocess_tester; + void dont_close_on_destruction(); + + posix_named_semaphore m_sem; + /// @endcond +}; + +/// @cond + +inline posix_named_mutex::posix_named_mutex(create_only_t, const char *name, const permissions &perm) + : m_sem(create_only, name, 1, perm) +{} + +inline posix_named_mutex::posix_named_mutex(open_or_create_t, const char *name, const permissions &perm) + : m_sem(open_or_create, name, 1, perm) +{} + +inline posix_named_mutex::posix_named_mutex(open_only_t, const char *name) + : m_sem(open_only, name) +{} + +inline void posix_named_mutex::dont_close_on_destruction() +{ interprocess_tester::dont_close_on_destruction(m_sem); } + +inline posix_named_mutex::~posix_named_mutex() +{} + +inline void posix_named_mutex::lock() +{ m_sem.wait(); } + +inline void posix_named_mutex::unlock() +{ m_sem.post(); } + +inline bool posix_named_mutex::try_lock() +{ return m_sem.try_wait(); } + +inline bool posix_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + return m_sem.timed_wait(abs_time); +} + +inline bool posix_named_mutex::remove(const char *name) +{ return posix_named_semaphore::remove(name); } + +/// @endcond + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp new file mode 100644 index 0000000000..f0327a4618 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp @@ -0,0 +1,84 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_NAMED_CONDITION_HPP +#define BOOST_INTERPROCESS_POSIX_NAMED_CONDITION_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include + +namespace boost { +namespace interprocess { + +/// @cond +namespace ipcdetail{ class interprocess_tester; } +/// @endcond + +namespace ipcdetail { + +class posix_named_semaphore +{ + posix_named_semaphore(); + posix_named_semaphore(const posix_named_semaphore&); + posix_named_semaphore &operator= (const posix_named_semaphore &); + + public: + posix_named_semaphore + (create_only_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()) + { semaphore_open(mp_sem, DoCreate, name, initialCount, perm); } + + posix_named_semaphore(open_or_create_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()) + { semaphore_open(mp_sem, DoOpenOrCreate, name, initialCount, perm); } + + posix_named_semaphore(open_only_t, const char *name) + { semaphore_open(mp_sem, DoOpen, name); } + + ~posix_named_semaphore() + { + if(mp_sem != BOOST_INTERPROCESS_POSIX_SEM_FAILED) + semaphore_close(mp_sem); + } + + void post() + { semaphore_post(mp_sem); } + + void wait() + { semaphore_wait(mp_sem); } + + bool try_wait() + { return semaphore_try_wait(mp_sem); } + + bool timed_wait(const boost::posix_time::ptime &abs_time) + { return semaphore_timed_wait(mp_sem, abs_time); } + + static bool remove(const char *name) + { return semaphore_unlink(name); } + + private: + friend class ipcdetail::interprocess_tester; + void dont_close_on_destruction() + { mp_sem = BOOST_INTERPROCESS_POSIX_SEM_FAILED; } + + sem_t *mp_sem; +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //#ifndef BOOST_INTERPROCESS_POSIX_NAMED_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp b/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp index e175b18567..bcbc44be33 100644 --- a/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp +++ b/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -19,17 +19,17 @@ #include #include -#include -#include +#include +#include namespace boost { namespace interprocess { -namespace detail{ +namespace ipcdetail{ #if defined BOOST_INTERPROCESS_POSIX_PROCESS_SHARED //!Makes pthread_mutexattr_t cleanup easy when using exceptions - struct mutexattr_wrapper + struct mutexattr_wrapper { //!Constructor mutexattr_wrapper(bool recursive = false) @@ -51,7 +51,7 @@ namespace detail{ }; //!Makes pthread_condattr_t cleanup easy when using exceptions - struct condattr_wrapper + struct condattr_wrapper { //!Constructor condattr_wrapper() @@ -86,7 +86,7 @@ namespace detail{ void release() {mp_mut = 0; } - private: + private: pthread_mutex_t *mp_mut; }; @@ -94,7 +94,7 @@ namespace detail{ class condition_initializer { public: - condition_initializer(pthread_cond_t &cond, pthread_condattr_t &cond_attr) + condition_initializer(pthread_cond_t &cond, pthread_condattr_t &cond_attr) : mp_cond(&cond) { if(pthread_cond_init(mp_cond, &cond_attr)!= 0) @@ -105,7 +105,7 @@ namespace detail{ void release() { mp_cond = 0; } - private: + private: pthread_cond_t *mp_cond; }; @@ -114,7 +114,7 @@ namespace detail{ #if defined(BOOST_INTERPROCESS_POSIX_BARRIERS) && defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) //!Makes pthread_barrierattr_t cleanup easy when using exceptions - struct barrierattr_wrapper + struct barrierattr_wrapper { //!Constructor barrierattr_wrapper() @@ -138,8 +138,8 @@ namespace detail{ { public: //!Constructor. Takes barrier attributes to initialize the barrier - barrier_initializer(pthread_barrier_t &mut, - pthread_barrierattr_t &mut_attr, + barrier_initializer(pthread_barrier_t &mut, + pthread_barrierattr_t &mut_attr, int count) : mp_barrier(&mut) { @@ -151,13 +151,13 @@ namespace detail{ void release() {mp_barrier = 0; } - private: + private: pthread_barrier_t *mp_barrier; }; #endif //#if defined(BOOST_INTERPROCESS_POSIX_BARRIERS) && defined(BOOST_INTERPROCESS_POSIX_PROCESS_SHARED) -}//namespace detail +}//namespace ipcdetail }//namespace interprocess diff --git a/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp b/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp index eaf160e835..7d787353bd 100644 --- a/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp +++ b/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -17,7 +17,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { inline timespec ptime_to_timespec (const boost::posix_time::ptime &tm) { @@ -29,7 +29,7 @@ inline timespec ptime_to_timespec (const boost::posix_time::ptime &tm) return ts; } -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { diff --git a/3party/boost/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp similarity index 64% rename from 3party/boost/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp rename to 3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp index b80bab1709..456c9a4874 100644 --- a/3party/boost/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -24,6 +24,15 @@ // It is provided "as is" without express or implied warranty. ////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_INTERPROCESS_DETAIL_POSIX_RECURSIVE_MUTEX_HPP +#define BOOST_INTERPROCESS_DETAIL_POSIX_RECURSIVE_MUTEX_HPP + +#include +#include + +#include +#include +#include #include #include #include @@ -33,29 +42,47 @@ #include namespace boost { - namespace interprocess { +namespace ipcdetail { -inline interprocess_recursive_mutex::interprocess_recursive_mutex() +class posix_recursive_mutex { - detail::mutexattr_wrapper mut_attr(true); - detail::mutex_initializer mut(m_mut, mut_attr); + posix_recursive_mutex(const posix_recursive_mutex &); + posix_recursive_mutex &operator=(const posix_recursive_mutex &); + public: + + posix_recursive_mutex(); + ~posix_recursive_mutex(); + + void lock(); + bool try_lock(); + bool timed_lock(const boost::posix_time::ptime &abs_time); + void unlock(); + + private: + pthread_mutex_t m_mut; +}; + +inline posix_recursive_mutex::posix_recursive_mutex() +{ + mutexattr_wrapper mut_attr(true); + mutex_initializer mut(m_mut, mut_attr); mut.release(); } -inline interprocess_recursive_mutex::~interprocess_recursive_mutex() +inline posix_recursive_mutex::~posix_recursive_mutex() { int res = pthread_mutex_destroy(&m_mut); BOOST_ASSERT(res == 0);(void)res; } -inline void interprocess_recursive_mutex::lock() +inline void posix_recursive_mutex::lock() { - if (pthread_mutex_lock(&m_mut) != 0) + if (pthread_mutex_lock(&m_mut) != 0) throw lock_exception(); } -inline bool interprocess_recursive_mutex::try_lock() +inline bool posix_recursive_mutex::try_lock() { int res = pthread_mutex_trylock(&m_mut); if (!(res == 0 || res == EBUSY)) @@ -63,7 +90,7 @@ inline bool interprocess_recursive_mutex::try_lock() return res == 0; } -inline bool interprocess_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +inline bool posix_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) { if(abs_time == boost::posix_time::pos_infin){ this->lock(); @@ -71,7 +98,7 @@ inline bool interprocess_recursive_mutex::timed_lock(const boost::posix_time::pt } #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS - timespec ts = detail::ptime_to_timespec(abs_time); + timespec ts = ptime_to_timespec(abs_time); int res = pthread_mutex_timedlock(&m_mut, &ts); if (res != 0 && res != ETIMEDOUT) throw lock_exception(); @@ -82,8 +109,6 @@ inline bool interprocess_recursive_mutex::timed_lock(const boost::posix_time::pt //Obtain current count and target time boost::posix_time::ptime now = microsec_clock::universal_time(); - if(now >= abs_time) return false; - do{ if(this->try_lock()){ break; @@ -94,19 +119,24 @@ inline bool interprocess_recursive_mutex::timed_lock(const boost::posix_time::pt return false; } // relinquish current time slice - detail::thread_yield(); + thread_yield(); }while (true); return true; #endif //BOOST_INTERPROCESS_POSIX_TIMEOUTS } -inline void interprocess_recursive_mutex::unlock() +inline void posix_recursive_mutex::unlock() { int res = 0; res = pthread_mutex_unlock(&m_mut); BOOST_ASSERT(res == 0); } +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { + +#include + +#endif //#ifndef BOOST_INTERPROCESS_DETAIL_POSIX_RECURSIVE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/posix/semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/semaphore.hpp new file mode 100644 index 0000000000..b7f62cc42d --- /dev/null +++ b/3party/boost/boost/interprocess/sync/posix/semaphore.hpp @@ -0,0 +1,63 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class posix_semaphore +{ + posix_semaphore(); + posix_semaphore(const posix_semaphore&); + posix_semaphore &operator= (const posix_semaphore &); + + public: + posix_semaphore(unsigned int initialCount) + { semaphore_init(&m_sem, initialCount); } + + ~posix_semaphore() + { semaphore_destroy(&m_sem); } + + void post() + { semaphore_post(&m_sem); } + + void wait() + { semaphore_wait(&m_sem); } + + bool try_wait() + { return semaphore_try_wait(&m_sem); } + + bool timed_wait(const boost::posix_time::ptime &abs_time) + { return semaphore_timed_wait(&m_sem, abs_time); } + + private: + sem_t m_sem; +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_HPP diff --git a/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp b/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp index 7945be8ab4..22184cda9d 100644 --- a/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp +++ b/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -17,8 +17,12 @@ #include #include #include -#include -#include + +#include //O_CREAT, O_*... +#include //close +#include //std::string +#include //sem_* family, SEM_VALUE_MAX +#include //mode_t, S_IRWXG, S_IRWXO, S_IRWXU, #include #ifdef SEM_FAILED @@ -35,49 +39,59 @@ namespace boost { namespace interprocess { - -/// @cond -namespace detail{ class interprocess_tester; } -/// @endcond - -namespace detail { +namespace ipcdetail { inline bool semaphore_open - (sem_t *&handle, detail::create_enum_t type, const char *origname, - unsigned int count, const permissions &perm = permissions()) + (sem_t *&handle, create_enum_t type, const char *origname, + unsigned int count = 0, const permissions &perm = permissions()) { std::string name; #ifndef BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES - detail::add_leading_slash(origname, name); + add_leading_slash(origname, name); #else - detail::create_tmp_and_clean_old_and_get_filename(origname, name); + create_tmp_and_clean_old_and_get_filename(origname, name); #endif //Create new mapping int oflag = 0; switch(type){ - case detail::DoOpen: + case DoOpen: + { //No addition + handle = ::sem_open(name.c_str(), oflag); + } break; - case detail::DoCreate: - oflag |= (O_CREAT | O_EXCL); - break; - case detail::DoOpenOrCreate: - oflag |= O_CREAT; + case DoOpenOrCreate: + case DoCreate: + { + while(1){ + oflag = (O_CREAT | O_EXCL); + handle = ::sem_open(name.c_str(), oflag, perm.get_permissions(), count); + if(handle != BOOST_INTERPROCESS_POSIX_SEM_FAILED){ + //We can't change semaphore permissions! + //::fchmod(handle, perm.get_permissions()); + break; + } + else if(errno == EEXIST && type == DoOpenOrCreate){ + oflag = 0; + if( (handle = ::sem_open(name.c_str(), oflag)) != BOOST_INTERPROCESS_POSIX_SEM_FAILED + || (errno != ENOENT) ){ + break; + } + } + else{ + break; + } + } + } break; default: - { - error_info err = other_error; - throw interprocess_exception(err); - } + { + error_info err(other_error); + throw interprocess_exception(err); + } } - //Open file using POSIX API - if(oflag & O_CREAT) - handle = sem_open(name.c_str(), oflag, perm.get_permissions(), count); - else - handle = sem_open(name.c_str(), oflag); - //Check for error if(handle == BOOST_INTERPROCESS_POSIX_SEM_FAILED){ throw interprocess_exception(error_info(errno)); @@ -89,7 +103,7 @@ inline bool semaphore_open inline void semaphore_close(sem_t *handle) { int ret = sem_close(handle); - if(ret != 0){ + if(ret != 0){ BOOST_ASSERT(0); } } @@ -99,11 +113,11 @@ inline bool semaphore_unlink(const char *semname) try{ std::string sem_str; #ifndef BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SEMAPHORES - detail::add_leading_slash(semname, sem_str); + add_leading_slash(semname, sem_str); #else - detail::tmp_filename(semname, sem_str); + tmp_filename(semname, sem_str); #endif - return 0 != sem_unlink(sem_str.c_str()); + return 0 == sem_unlink(sem_str.c_str()); } catch(...){ return false; @@ -124,7 +138,7 @@ inline void semaphore_init(sem_t *handle, unsigned int initialCount) inline void semaphore_destroy(sem_t *handle) { int ret = sem_destroy(handle); - if(ret != 0){ + if(ret != 0){ BOOST_ASSERT(0); } } @@ -159,8 +173,12 @@ inline bool semaphore_try_wait(sem_t *handle) inline bool semaphore_timed_wait(sem_t *handle, const boost::posix_time::ptime &abs_time) { + if(abs_time == boost::posix_time::pos_infin){ + semaphore_wait(handle); + return true; + } #ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS - timespec tspec = detail::ptime_to_timespec(abs_time); + timespec tspec = ptime_to_timespec(abs_time); for (;;){ int res = sem_timedwait(handle, &tspec); if(res == 0) @@ -177,89 +195,17 @@ inline bool semaphore_timed_wait(sem_t *handle, const boost::posix_time::ptime & return false; #else //#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS boost::posix_time::ptime now; - while((now = microsec_clock::universal_time()) < abs_time){ + do{ if(semaphore_try_wait(handle)) return true; thread_yield(); - } + }while((now = microsec_clock::universal_time()) < abs_time); return false; #endif //#ifdef BOOST_INTERPROCESS_POSIX_TIMEOUTS } - -class named_semaphore_wrapper -{ - named_semaphore_wrapper(); - named_semaphore_wrapper(const named_semaphore_wrapper&); - named_semaphore_wrapper &operator= (const named_semaphore_wrapper &); - - public: - named_semaphore_wrapper - (detail::create_enum_t type, const char *name, unsigned int count, const permissions &perm = permissions()) - { semaphore_open(mp_sem, type, name, count, perm); } - - ~named_semaphore_wrapper() - { - if(mp_sem != BOOST_INTERPROCESS_POSIX_SEM_FAILED) - semaphore_close(mp_sem); - } - - void post() - { semaphore_post(mp_sem); } - - void wait() - { semaphore_wait(mp_sem); } - - bool try_wait() - { return semaphore_try_wait(mp_sem); } - - bool timed_wait(const boost::posix_time::ptime &abs_time) - { return semaphore_timed_wait(mp_sem, abs_time); } - - static bool remove(const char *name) - { return semaphore_unlink(name); } - - private: - friend class detail::interprocess_tester; - void dont_close_on_destruction() - { mp_sem = BOOST_INTERPROCESS_POSIX_SEM_FAILED; } - - sem_t *mp_sem; -}; - -class semaphore_wrapper -{ - semaphore_wrapper(); - semaphore_wrapper(const semaphore_wrapper&); - semaphore_wrapper &operator= (const semaphore_wrapper &); - - public: - semaphore_wrapper(unsigned int initialCount) - { semaphore_init(&m_sem, initialCount); } - - ~semaphore_wrapper() - { semaphore_destroy(&m_sem); } - - void post() - { semaphore_post(&m_sem); } - - void wait() - { semaphore_wait(&m_sem); } - - bool try_wait() - { return semaphore_try_wait(&m_sem); } - - bool timed_wait(const boost::posix_time::ptime &abs_time) - { return semaphore_timed_wait(&m_sem, abs_time); } - - private: - sem_t m_sem; -}; - -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { -#undef BOOST_INTERPROCESS_POSIX_SEM_FAILED - #endif //#ifndef BOOST_INTERPROCESS_POSIX_SEMAPHORE_WRAPPER_HPP diff --git a/3party/boost/boost/interprocess/sync/scoped_lock.hpp b/3party/boost/boost/interprocess/sync/scoped_lock.hpp index 3bbdcebf5a..61fe93e5b3 100644 --- a/3party/boost/boost/interprocess/sync/scoped_lock.hpp +++ b/3party/boost/boost/interprocess/sync/scoped_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include //!\file @@ -53,7 +53,7 @@ class scoped_lock /// @cond private: typedef scoped_lock this_type; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(scoped_lock) + BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_lock) typedef bool this_type::*unspecified_bool_type; /// @endcond public: @@ -89,7 +89,7 @@ class scoped_lock : mp_mutex(&m), m_locked(true) {} - //!Effects: m.try_lock(). + //!Effects: m.try_lock(). //!Postconditions: mutex() == &m. owns() == the return value of the //! m.try_lock() executed within the constructor. //!Notes: The constructor will take ownership of the mutex if it can do @@ -101,7 +101,7 @@ class scoped_lock : mp_mutex(&m), m_locked(mp_mutex->try_lock()) {} - //!Effects: m.timed_lock(abs_time). + //!Effects: m.timed_lock(abs_time). //!Postconditions: mutex() == &m. owns() == the return value of the //! m.timed_lock(abs_time) executed within the constructor. //!Notes: The constructor will take ownership of the mutex if it can do @@ -120,15 +120,15 @@ class scoped_lock //! to thisscoped_lock with no blocking. If the scop scoped_lock does not //! own the mutex, then neither will this scoped_lock. Only a moved //! scoped_lock's will match this signature. An non-moved scoped_lock - //! can be moved with the expression: "boost::interprocess::move(lock);". This + //! can be moved with the expression: "boost::move(lock);". This //! constructor does not alter the state of the mutex, only potentially //! who owns it. - scoped_lock(BOOST_INTERPROCESS_RV_REF(scoped_lock) scop) + scoped_lock(BOOST_RV_REF(scoped_lock) scop) : mp_mutex(0), m_locked(scop.owns()) { mp_mutex = scop.release(); } //!Effects: If upgr.owns() then calls unlock_upgradable_and_lock() on the - //! referenced mutex. upgr.release() is called. + //! referenced mutex. upgr.release() is called. //!Postconditions: mutex() == the value upgr.mutex() had before the construction. //! upgr.mutex() == 0. owns() == upgr.owns() before the construction. //! upgr.owns() == false after the construction. @@ -136,12 +136,12 @@ class scoped_lock //! unlocking upgr. If upgr is unlocked, then this scoped_lock will be //! unlocked as well. Only a moved upgradable_lock's will match this //! signature. An non-moved upgradable_lock can be moved with - //! the expression: "boost::interprocess::move(lock);" This constructor may block if + //! the expression: "boost::move(lock);" This constructor may block if //! other threads hold a sharable_lock on this mutex (sharable_lock's can //! share ownership with an upgradable_lock). template - explicit scoped_lock(BOOST_INTERPROCESS_RV_REF(upgradable_lock) upgr - , typename detail::enable_if< detail::is_same >::type * = 0) + explicit scoped_lock(BOOST_RV_REF(upgradable_lock) upgr + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { upgradable_lock &u_lock = upgr; @@ -155,12 +155,12 @@ class scoped_lock //!Effects: If upgr.owns() then calls try_unlock_upgradable_and_lock() on the //!referenced mutex: //! a)if try_unlock_upgradable_and_lock() returns true then mutex() obtains - //! the value from upgr.release() and owns() is set to true. + //! the value from upgr.release() and owns() is set to true. //! b)if try_unlock_upgradable_and_lock() returns false then upgr is - //! unaffected and this scoped_lock construction as the same effects as - //! a default construction. + //! unaffected and this scoped_lock construction as the same effects as + //! a default construction. //! c)Else upgr.owns() is false. mutex() obtains the value from upgr.release() - //! and owns() is set to false + //! and owns() is set to false //!Notes: This construction will not block. It will try to obtain mutex //! ownership from upgr immediately, while changing the lock type from a //! "read lock" to a "write lock". If the "read lock" isn't held in the @@ -168,8 +168,8 @@ class scoped_lock //! If the "read lock" is held, then mutex transfer occurs only if it can //! do so in a non-blocking manner. template - scoped_lock(BOOST_INTERPROCESS_RV_REF(upgradable_lock) upgr, try_to_lock_type - , typename detail::enable_if< detail::is_same >::type * = 0) + scoped_lock(BOOST_RV_REF(upgradable_lock) upgr, try_to_lock_type + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { upgradable_lock &u_lock = upgr; @@ -186,20 +186,20 @@ class scoped_lock //!Effects: If upgr.owns() then calls timed_unlock_upgradable_and_lock(abs_time) //! on the referenced mutex: //! a)if timed_unlock_upgradable_and_lock(abs_time) returns true then mutex() - //! obtains the value from upgr.release() and owns() is set to true. + //! obtains the value from upgr.release() and owns() is set to true. //! b)if timed_unlock_upgradable_and_lock(abs_time) returns false then upgr //! is unaffected and this scoped_lock construction as the same effects //! as a default construction. //! c)Else upgr.owns() is false. mutex() obtains the value from upgr.release() - //! and owns() is set to false + //! and owns() is set to false //!Notes: This construction will not block. It will try to obtain mutex ownership //! from upgr immediately, while changing the lock type from a "read lock" to a //! "write lock". If the "read lock" isn't held in the first place, the mutex //! merely changes type to an unlocked "write lock". If the "read lock" is held, //! then mutex transfer occurs only if it can do so in a non-blocking manner. template - scoped_lock(BOOST_INTERPROCESS_RV_REF(upgradable_lock) upgr, boost::posix_time::ptime &abs_time - , typename detail::enable_if< detail::is_same >::type * = 0) + scoped_lock(BOOST_RV_REF(upgradable_lock) upgr, boost::posix_time::ptime &abs_time + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { upgradable_lock &u_lock = upgr; @@ -214,14 +214,14 @@ class scoped_lock } //!Effects: If shar.owns() then calls try_unlock_sharable_and_lock() on the - //!referenced mutex. + //!referenced mutex. //! a)if try_unlock_sharable_and_lock() returns true then mutex() obtains - //! the value from shar.release() and owns() is set to true. + //! the value from shar.release() and owns() is set to true. //! b)if try_unlock_sharable_and_lock() returns false then shar is //! unaffected and this scoped_lock construction has the same - //! effects as a default construction. + //! effects as a default construction. //! c)Else shar.owns() is false. mutex() obtains the value from - //! shar.release() and owns() is set to false + //! shar.release() and owns() is set to false //!Notes: This construction will not block. It will try to obtain mutex //! ownership from shar immediately, while changing the lock type from a //! "read lock" to a "write lock". If the "read lock" isn't held in the @@ -229,8 +229,8 @@ class scoped_lock //! If the "read lock" is held, then mutex transfer occurs only if it can //! do so in a non-blocking manner. template - scoped_lock(BOOST_INTERPROCESS_RV_REF(sharable_lock) shar, try_to_lock_type - , typename detail::enable_if< detail::is_same >::type * = 0) + scoped_lock(BOOST_RV_REF(sharable_lock) shar, try_to_lock_type + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { sharable_lock &s_lock = shar; @@ -253,13 +253,13 @@ class scoped_lock } //!Effects: If owns() before the call, then unlock() is called on mutex(). - //! *this gets the state of scop and scop gets set to a default constructed state. + //! *this gets the state of scop and scop gets set to a default constructed state. //!Notes: With a recursive mutex it is possible that both this and scop own //! the same mutex before the assignment. In this case, this will own the //! mutex after the assignment (and scop will not), but the mutex's lock //! count will be decremented by one. - scoped_lock &operator=(BOOST_INTERPROCESS_RV_REF(scoped_lock) scop) - { + scoped_lock &operator=(BOOST_RV_REF(scoped_lock) scop) + { if(this->owns()) this->unlock(); m_locked = scop.owns(); @@ -281,7 +281,7 @@ class scoped_lock } //!Effects: If mutex() == 0 or if already locked, throws a lock_exception() - //! exception. Calls try_lock() on the referenced mutex. + //! exception. Calls try_lock() on the referenced mutex. //!Postconditions: owns() == the value returned from mutex()->try_lock(). //!Notes: The scoped_lock changes from a state of not owning the mutex, to //! owning the mutex, but only if blocking was not required. If the @@ -348,8 +348,8 @@ class scoped_lock m_locked = false; return mut; } - - //!Effects: Swaps state with moved lock. + + //!Effects: Swaps state with moved lock. //!Throws: Nothing. void swap( scoped_lock &other) { @@ -359,7 +359,7 @@ class scoped_lock /// @cond private: - mutex_type *mp_mutex; + mutex_type *mp_mutex; bool m_locked; /// @endcond }; diff --git a/3party/boost/boost/interprocess/sync/sharable_lock.hpp b/3party/boost/boost/interprocess/sync/sharable_lock.hpp index 42d0d050ee..9342e45a46 100644 --- a/3party/boost/boost/interprocess/sync/sharable_lock.hpp +++ b/3party/boost/boost/interprocess/sync/sharable_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include //!\file @@ -56,7 +56,7 @@ class sharable_lock typedef sharable_lock this_type; explicit sharable_lock(scoped_lock&); typedef bool this_type::*unspecified_bool_type; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(sharable_lock) + BOOST_MOVABLE_BUT_NOT_COPYABLE(sharable_lock) /// @endcond public: @@ -67,7 +67,7 @@ class sharable_lock {} //!Effects: m.lock_sharable(). - //!Postconditions: owns() == true and mutex() == &m. + //!Postconditions: owns() == true and mutex() == &m. //!Notes: The constructor will take sharable-ownership of the mutex. If //! another thread already owns the mutex with exclusive ownership //! (scoped_lock), this thread will block until the mutex is released. @@ -104,7 +104,7 @@ class sharable_lock : mp_mutex(&m), m_locked(false) { m_locked = mp_mutex->try_lock_sharable(); } - //!Effects: m.timed_lock_sharable(abs_time) + //!Effects: m.timed_lock_sharable(abs_time) //!Postconditions: mutex() == &m. owns() == the return value of the //! m.timed_lock_sharable() executed within the constructor. //!Notes: The constructor will take sharable-ownership of the mutex if it @@ -122,9 +122,9 @@ class sharable_lock //! sharable_lock with no blocking. If the upgr sharable_lock does not own the mutex, then //! neither will this sharable_lock. Only a moved sharable_lock's will match this //! signature. An non-moved sharable_lock can be moved with the expression: - //! "boost::interprocess::move(lock);". This constructor does not alter the state of the mutex, + //! "boost::move(lock);". This constructor does not alter the state of the mutex, //! only potentially who owns it. - sharable_lock(BOOST_INTERPROCESS_RV_REF(sharable_lock) upgr) + sharable_lock(BOOST_RV_REF(sharable_lock) upgr) : mp_mutex(0), m_locked(upgr.owns()) { mp_mutex = upgr.release(); } @@ -132,14 +132,14 @@ class sharable_lock //! referenced mutex. //!Postconditions: mutex() == the value upgr.mutex() had before the construction. //! upgr.mutex() == 0 owns() == the value of upgr.owns() before construction. - //! upgr.owns() == false after the construction. + //! upgr.owns() == false after the construction. //!Notes: If upgr is locked, this constructor will lock this sharable_lock while //! unlocking upgr. Only a moved sharable_lock's will match this //! signature. An non-moved upgradable_lock can be moved with the expression: - //! "boost::interprocess::move(lock);".*/ + //! "boost::move(lock);".*/ template - sharable_lock(BOOST_INTERPROCESS_RV_REF(upgradable_lock) upgr - , typename detail::enable_if< detail::is_same >::type * = 0) + sharable_lock(BOOST_RV_REF(upgradable_lock) upgr + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { upgradable_lock &u_lock = upgr; @@ -156,13 +156,13 @@ class sharable_lock //! scop.mutex() == 0 owns() == scop.owns() before the constructor. After the //! construction, scop.owns() == false. //!Notes: If scop is locked, this constructor will transfer the exclusive ownership - //! to a sharable-ownership of this sharable_lock. + //! to a sharable-ownership of this sharable_lock. //! Only a moved scoped_lock's will match this //! signature. An non-moved scoped_lock can be moved with the expression: - //! "boost::interprocess::move(lock);". + //! "boost::move(lock);". template - sharable_lock(BOOST_INTERPROCESS_RV_REF(scoped_lock) scop - , typename detail::enable_if< detail::is_same >::type * = 0) + sharable_lock(BOOST_RV_REF(scoped_lock) scop + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { scoped_lock &e_lock = scop; @@ -184,12 +184,12 @@ class sharable_lock } //!Effects: If owns() before the call, then unlock_sharable() is called on mutex(). - //! *this gets the state of upgr and upgr gets set to a default constructed state. + //! *this gets the state of upgr and upgr gets set to a default constructed state. //!Notes: With a recursive mutex it is possible that both this and upgr own the mutex //! before the assignment. In this case, this will own the mutex after the assignment //! (and upgr will not), but the mutex's lock count will be decremented by one. - sharable_lock &operator=(BOOST_INTERPROCESS_RV_REF(sharable_lock) upgr) - { + sharable_lock &operator=(BOOST_RV_REF(sharable_lock) upgr) + { if(this->owns()) this->unlock(); m_locked = upgr.owns(); @@ -203,7 +203,7 @@ class sharable_lock //!Notes: The sharable_lock changes from a state of not owning the //! mutex, to owning the mutex, blocking if necessary. void lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); mp_mutex->lock_sharable(); @@ -219,7 +219,7 @@ class sharable_lock //! mutex_type does not support try_lock_sharable(), this function will //! fail at compile time if instantiated, but otherwise have no effect. bool try_lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->try_lock_sharable(); @@ -236,7 +236,7 @@ class sharable_lock //! timed_lock_sharable(), this function will fail at compile time if //! instantiated, but otherwise have no effect. bool timed_lock(const boost::posix_time::ptime& abs_time) - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->timed_lock_sharable(abs_time); @@ -282,7 +282,7 @@ class sharable_lock return mut; } - //!Effects: Swaps state with moved lock. + //!Effects: Swaps state with moved lock. //!Throws: Nothing. void swap(sharable_lock &other) { diff --git a/3party/boost/boost/interprocess/sync/shm/named_condition.hpp b/3party/boost/boost/interprocess/sync/shm/named_condition.hpp new file mode 100644 index 0000000000..9d7cd77e11 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/shm/named_condition.hpp @@ -0,0 +1,382 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SHM_NAMED_CONDITION_HPP +#define BOOST_INTERPROCESS_SHM_NAMED_CONDITION_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) +#include +#include +#endif + + +//!\file +//!Describes process-shared variables interprocess_condition class + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +/// @cond +class interprocess_tester; +/// @endcond + +//! A global condition variable that can be created by name. +//! This condition variable is designed to work with named_mutex and +//! can't be placed in shared memory or memory mapped files. +class shm_named_condition +{ + /// @cond + //Non-copyable + shm_named_condition(); + shm_named_condition(const shm_named_condition &); + shm_named_condition &operator=(const shm_named_condition &); + /// @endcond + public: + //!Creates a global condition with a name. + //!If the condition can't be created throws interprocess_exception + shm_named_condition(create_only_t create_only, const char *name, const permissions &perm = permissions()); + + //!Opens or creates a global condition with a name. + //!If the condition is created, this call is equivalent to + //!shm_named_condition(create_only_t, ... ) + //!If the condition is already created, this call is equivalent + //!shm_named_condition(open_only_t, ... ) + //!Does not throw + shm_named_condition(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()); + + //!Opens a global condition with a name if that condition is previously + //!created. If it is not previously created this function throws + //!interprocess_exception. + shm_named_condition(open_only_t open_only, const char *name); + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~shm_named_condition(); + + //!If there is a thread waiting on *this, change that + //!thread's state to ready. Otherwise there is no effect.*/ + void notify_one(); + + //!Change the state of all threads waiting on *this to ready. + //!If there are no waiting threads, notify_all() has no effect. + void notify_all(); + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), and then reacquires the lock. + template + void wait(L& lock); + + //!The same as: + //!while (!pred()) wait(lock) + template + void wait(L& lock, Pr pred); + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!and then reacquires the lock. + //!Returns: false if time abs_time is reached, otherwise true. + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time); + + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); + //! } return true; + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred); + + //!Erases a named condition from the system. + //!Returns false on error. Never throws. + static bool remove(const char *name); + + /// @cond + private: + + struct condition_holder + { + interprocess_condition cond_; + //If named_mutex is implemented using semaphores + //we need to store an additional mutex + #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + interprocess_mutex mutex_; + #endif + }; + + interprocess_condition *condition() const + { return &static_cast(m_shmem.get_user_address())->cond_; } + + template + class lock_inverter + { + Lock &l_; + public: + lock_inverter(Lock &l) + : l_(l) + {} + void lock() { l_.unlock(); } + void unlock() { l_.lock(); } + }; + + //If named mutex uses POSIX semaphores, then the shm based condition variable + //must use it's internal lock to wait, as sem_t does not store a pthread_mutex_t + //instance needed by pthread_mutex_cond_t + #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + interprocess_mutex *mutex() const + { return &static_cast(m_shmem.get_user_address())->mutex_; } + + template + void do_wait(Lock& lock) + { + //shm_named_condition only works with named_mutex + BOOST_STATIC_ASSERT((is_convertible::value == true)); + + //lock internal before unlocking external to avoid race with a notifier + scoped_lock internal_lock(*this->mutex()); + lock_inverter inverted_lock(lock); + scoped_lock > external_unlock(inverted_lock); + + //unlock internal first to avoid deadlock with near simultaneous waits + scoped_lock internal_unlock; + internal_lock.swap(internal_unlock); + this->condition()->wait(internal_unlock); + } + + template + bool do_timed_wait(Lock& lock, const boost::posix_time::ptime &abs_time) + { + //shm_named_condition only works with named_mutex + BOOST_STATIC_ASSERT((is_convertible::value == true)); + //lock internal before unlocking external to avoid race with a notifier + scoped_lock internal_lock(*this->mutex(), abs_time); + if(!internal_lock) return false; + lock_inverter inverted_lock(lock); + scoped_lock > external_unlock(inverted_lock); + + //unlock internal first to avoid deadlock with near simultaneous waits + scoped_lock internal_unlock; + internal_lock.swap(internal_unlock); + return this->condition()->timed_wait(internal_unlock, abs_time); + } + #else //defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + template + class lock_wrapper + { + typedef void (lock_wrapper::*unspecified_bool_type)(); + public: + + typedef interprocess_mutex mutex_type; + + lock_wrapper(Lock &l) + : l_(l) + {} + + mutex_type* mutex() const + { return l_.mutex()->mutex(); } + + void lock() { l_.lock(); } + + void unlock() { l_.unlock(); } + + operator unspecified_bool_type() const + { return l_ ? &lock_wrapper::lock : 0; } + + private: + Lock &l_; + }; + #endif //defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + + friend class boost::interprocess::ipcdetail::interprocess_tester; + void dont_close_on_destruction(); + + managed_open_or_create_impl m_shmem; + + template friend class boost::interprocess::ipcdetail::named_creation_functor; + typedef boost::interprocess::ipcdetail::named_creation_functor construct_func_t; + /// @endcond +}; + +/// @cond + +inline shm_named_condition::~shm_named_condition() +{} + +inline shm_named_condition::shm_named_condition(create_only_t, const char *name, const permissions &perm) + : m_shmem (create_only + ,name + ,sizeof(condition_holder) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoCreate) + ,perm) +{} + +inline shm_named_condition::shm_named_condition(open_or_create_t, const char *name, const permissions &perm) + : m_shmem (open_or_create + ,name + ,sizeof(condition_holder) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoOpenOrCreate) + ,perm) +{} + +inline shm_named_condition::shm_named_condition(open_only_t, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(DoOpen)) +{} + +inline void shm_named_condition::dont_close_on_destruction() +{ interprocess_tester::dont_close_on_destruction(m_shmem); } + +#if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + +inline void shm_named_condition::notify_one() +{ + scoped_lock internal_lock(*this->mutex()); + this->condition()->notify_one(); +} + +inline void shm_named_condition::notify_all() +{ + scoped_lock internal_lock(*this->mutex()); + this->condition()->notify_all(); +} + +template +inline void shm_named_condition::wait(L& lock) +{ + if (!lock) + throw lock_exception(); + this->do_wait(lock); +} + +template +inline void shm_named_condition::wait(L& lock, Pr pred) +{ + if (!lock) + throw lock_exception(); + while (!pred()) + this->do_wait(lock); +} + +template +inline bool shm_named_condition::timed_wait + (L& lock, const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return this->do_timed_wait(lock, abs_time); +} + +template +inline bool shm_named_condition::timed_wait + (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + + while (!pred()){ + if(!this->do_timed_wait(lock, abs_time)){ + return pred(); + } + } + return true; +} + +#else + +inline void shm_named_condition::notify_one() +{ this->condition()->notify_one(); } + +inline void shm_named_condition::notify_all() +{ this->condition()->notify_all(); } + +template +inline void shm_named_condition::wait(L& lock) +{ + lock_wrapper newlock(lock); + this->condition()->wait(newlock); +} + +template +inline void shm_named_condition::wait(L& lock, Pr pred) +{ + lock_wrapper newlock(lock); + this->condition()->wait(newlock, pred); +} + +template +inline bool shm_named_condition::timed_wait + (L& lock, const boost::posix_time::ptime &abs_time) +{ + lock_wrapper newlock(lock); + return this->condition()->timed_wait(newlock, abs_time); +} + +template +inline bool shm_named_condition::timed_wait + (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) +{ + lock_wrapper newlock(lock); + return this->condition()->timed_wait(newlock, abs_time, pred); +} + +#endif + +inline bool shm_named_condition::remove(const char *name) +{ return shared_memory_object::remove(name); } + +/// @endcond + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif // BOOST_INTERPROCESS_SHM_NAMED_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/emulation/named_creation_functor.hpp b/3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp similarity index 83% rename from 3party/boost/boost/interprocess/sync/emulation/named_creation_functor.hpp rename to 3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp index 8bc88f3051..9d752c837a 100644 --- a/3party/boost/boost/interprocess/sync/emulation/named_creation_functor.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-2011. 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) // @@ -17,7 +17,7 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { struct named_creation_functor_no_arg{}; @@ -26,7 +26,7 @@ class named_creation_functor { typedef named_creation_functor_no_arg no_arg_t; public: - named_creation_functor(detail::create_enum_t type, Arg arg = Arg()) + named_creation_functor(create_enum_t type, Arg arg = Arg()) : m_creation_type(type), m_arg(arg){} template @@ -38,13 +38,13 @@ class named_creation_functor { new(address)T(m_arg); } bool operator()(void *address, std::size_t, bool created) const - { + { switch(m_creation_type){ - case detail::DoOpen: + case DoOpen: return true; break; - case detail::DoCreate: - case detail::DoOpenOrCreate: + case DoCreate: + case DoOpenOrCreate: if(created){ construct(address); } @@ -57,11 +57,11 @@ class named_creation_functor } } private: - detail::create_enum_t m_creation_type; + create_enum_t m_creation_type; Arg m_arg; }; -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp new file mode 100644 index 0000000000..f32fa70044 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp @@ -0,0 +1,184 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SHM_NAMED_MUTEX_HPP +#define BOOST_INTERPROCESS_SHM_NAMED_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +//!\file +//!Describes a named mutex class for inter-process synchronization + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class named_condition; + +//!A mutex with a global name, so it can be found from different +//!processes. This mutex can't be placed in shared memory, and +//!each process should have it's own named mutex. +class shm_named_mutex +{ + /// @cond + + //Non-copyable + shm_named_mutex(); + shm_named_mutex(const shm_named_mutex &); + shm_named_mutex &operator=(const shm_named_mutex &); + friend class named_condition; + /// @endcond + + public: + //!Creates a global interprocess_mutex with a name. + //!Throws interprocess_exception on error. + shm_named_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); + + //!Opens or creates a global mutex with a name. + //!If the mutex is created, this call is equivalent to + //!shm_named_mutex(create_only_t, ... ) + //!If the mutex is already created, this call is equivalent + //!shm_named_mutex(open_only_t, ... ) + //!Does not throw + shm_named_mutex(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()); + + //!Opens a global mutex with a name if that mutex is previously + //!created. If it is not previously created this function throws + //!interprocess_exception. + shm_named_mutex(open_only_t open_only, const char *name); + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~shm_named_mutex(); + + //!Unlocks a previously locked + //!interprocess_mutex. + void unlock(); + + //!Locks interprocess_mutex, sleeps when interprocess_mutex is already locked. + //!Throws interprocess_exception if a severe error is found + void lock(); + + //!Tries to lock the interprocess_mutex, returns false when interprocess_mutex + //!is already locked, returns true when success. + //!Throws interprocess_exception if a severe error is found + bool try_lock(); + + //!Tries to lock the interprocess_mutex until time abs_time, + //!Returns false when timeout expires, returns true when locks. + //!Throws interprocess_exception if a severe error is found + bool timed_lock(const boost::posix_time::ptime &abs_time); + + //!Erases a named mutex from the system. + //!Returns false on error. Never throws. + static bool remove(const char *name); + + /// @cond + interprocess_mutex *mutex() const + { return static_cast(m_shmem.get_user_address()); } + + private: + friend class ipcdetail::interprocess_tester; + void dont_close_on_destruction(); + + ipcdetail::managed_open_or_create_impl m_shmem; + typedef ipcdetail::named_creation_functor construct_func_t; + /// @endcond +}; + +/// @cond + +inline void shm_named_mutex::dont_close_on_destruction() +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_shmem); } + +inline shm_named_mutex::~shm_named_mutex() +{} + +inline shm_named_mutex::shm_named_mutex(create_only_t, const char *name, const permissions &perm) + : m_shmem (create_only + ,name + ,sizeof(interprocess_mutex) + + ipcdetail::managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoCreate) + ,perm) +{} + +inline shm_named_mutex::shm_named_mutex(open_or_create_t, const char *name, const permissions &perm) + : m_shmem (open_or_create + ,name + ,sizeof(interprocess_mutex) + + ipcdetail::managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoOpenOrCreate) + ,perm) +{} + +inline shm_named_mutex::shm_named_mutex(open_only_t, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoOpen)) +{} + +inline void shm_named_mutex::lock() +{ this->mutex()->lock(); } + +inline void shm_named_mutex::unlock() +{ this->mutex()->unlock(); } + +inline bool shm_named_mutex::try_lock() +{ return this->mutex()->try_lock(); } + +inline bool shm_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + return this->mutex()->timed_lock(abs_time); +} + +inline bool shm_named_mutex::remove(const char *name) +{ return shared_memory_object::remove(name); } + +/// @endcond + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_SHM_NAMED_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp new file mode 100644 index 0000000000..7235571254 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp @@ -0,0 +1,175 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SHM_NAMED_RECURSIVE_MUTEX_HPP +#define BOOST_INTERPROCESS_SHM_NAMED_RECURSIVE_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//!\file +//!Describes a named shm_named_recursive_mutex class for inter-process synchronization + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +/// @cond +class interprocess_tester; +/// @endcond + +class shm_named_recursive_mutex +{ + /// @cond + //Non-copyable + shm_named_recursive_mutex(); + shm_named_recursive_mutex(const shm_named_recursive_mutex &); + shm_named_recursive_mutex &operator=(const shm_named_recursive_mutex &); + /// @endcond + public: + + //!Creates a global recursive_mutex with a name. + //!If the recursive_mutex can't be created throws interprocess_exception + shm_named_recursive_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); + + //!Opens or creates a global recursive_mutex with a name. + //!If the recursive_mutex is created, this call is equivalent to + //!shm_named_recursive_mutex(create_only_t, ... ) + //!If the recursive_mutex is already created, this call is equivalent + //!shm_named_recursive_mutex(open_only_t, ... ) + //!Does not throw + shm_named_recursive_mutex(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()); + + //!Opens a global recursive_mutex with a name if that recursive_mutex is previously + //!created. If it is not previously created this function throws + //!interprocess_exception. + shm_named_recursive_mutex(open_only_t open_only, const char *name); + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~shm_named_recursive_mutex(); + + //!Unlocks a previously locked + //!shm_named_recursive_mutex. + void unlock(); + + //!Locks shm_named_recursive_mutex, sleeps when shm_named_recursive_mutex is already locked. + //!Throws interprocess_exception if a severe error is found. + void lock(); + + //!Tries to lock the shm_named_recursive_mutex, returns false when shm_named_recursive_mutex + //!is already locked, returns true when success. + //!Throws interprocess_exception if a severe error is found. + bool try_lock(); + + //!Tries to lock the shm_named_recursive_mutex until time abs_time, + //!Returns false when timeout expires, returns true when locks. + //!Throws interprocess_exception if a severe error is found + bool timed_lock(const boost::posix_time::ptime &abs_time); + + //!Erases a named recursive mutex + //!from the system + static bool remove(const char *name); + + /// @cond + private: + friend class interprocess_tester; + void dont_close_on_destruction(); + + interprocess_recursive_mutex *mutex() const + { return static_cast(m_shmem.get_user_address()); } + + managed_open_or_create_impl m_shmem; + typedef named_creation_functor construct_func_t; + /// @endcond +}; + +inline shm_named_recursive_mutex::~shm_named_recursive_mutex() +{} + +inline void shm_named_recursive_mutex::dont_close_on_destruction() +{ interprocess_tester::dont_close_on_destruction(m_shmem); } + +inline shm_named_recursive_mutex::shm_named_recursive_mutex(create_only_t, const char *name, const permissions &perm) + : m_shmem (create_only + ,name + ,sizeof(interprocess_recursive_mutex) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoCreate) + ,perm) +{} + +inline shm_named_recursive_mutex::shm_named_recursive_mutex(open_or_create_t, const char *name, const permissions &perm) + : m_shmem (open_or_create + ,name + ,sizeof(interprocess_recursive_mutex) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoOpenOrCreate) + ,perm) +{} + +inline shm_named_recursive_mutex::shm_named_recursive_mutex(open_only_t, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(DoOpen)) +{} + +inline void shm_named_recursive_mutex::lock() +{ this->mutex()->lock(); } + +inline void shm_named_recursive_mutex::unlock() +{ this->mutex()->unlock(); } + +inline bool shm_named_recursive_mutex::try_lock() +{ return this->mutex()->try_lock(); } + +inline bool shm_named_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + return this->mutex()->timed_lock(abs_time); +} + +inline bool shm_named_recursive_mutex::remove(const char *name) +{ return shared_memory_object::remove(name); } + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_SHM_NAMED_RECURSIVE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp new file mode 100644 index 0000000000..c6d3830db5 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp @@ -0,0 +1,141 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SHM_NAMED_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_SHM_NAMED_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class shm_named_semaphore +{ + /// @cond + + //Non-copyable + shm_named_semaphore(); + shm_named_semaphore(const shm_named_semaphore &); + shm_named_semaphore &operator=(const shm_named_semaphore &); + /// @endcond + + public: + shm_named_semaphore(create_only_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()); + + shm_named_semaphore(open_or_create_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()); + + shm_named_semaphore(open_only_t, const char *name); + + ~shm_named_semaphore(); + + void post(); + void wait(); + bool try_wait(); + bool timed_wait(const boost::posix_time::ptime &abs_time); + + static bool remove(const char *name); + + /// @cond + private: + friend class interprocess_tester; + void dont_close_on_destruction(); + + interprocess_semaphore *semaphore() const + { return static_cast(m_shmem.get_user_address()); } + + managed_open_or_create_impl m_shmem; + typedef named_creation_functor construct_func_t; + /// @endcond +}; + +inline shm_named_semaphore::~shm_named_semaphore() +{} + +inline void shm_named_semaphore::dont_close_on_destruction() +{ interprocess_tester::dont_close_on_destruction(m_shmem); } + +inline shm_named_semaphore::shm_named_semaphore + (create_only_t, const char *name, unsigned int initialCount, const permissions &perm) + : m_shmem (create_only + ,name + ,sizeof(interprocess_semaphore) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoCreate, initialCount) + ,perm) +{} + +inline shm_named_semaphore::shm_named_semaphore + (open_or_create_t, const char *name, unsigned int initialCount, const permissions &perm) + : m_shmem (open_or_create + ,name + ,sizeof(interprocess_semaphore) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoOpenOrCreate, initialCount) + ,perm) +{} + +inline shm_named_semaphore::shm_named_semaphore + (open_only_t, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(DoOpen, 0)) +{} + +inline void shm_named_semaphore::post() +{ semaphore()->post(); } + +inline void shm_named_semaphore::wait() +{ semaphore()->wait(); } + +inline bool shm_named_semaphore::try_wait() +{ return semaphore()->try_wait(); } + +inline bool shm_named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(); + return true; + } + return semaphore()->timed_wait(abs_time); +} + +inline bool shm_named_semaphore::remove(const char *name) +{ return shared_memory_object::remove(name); } + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_SHM_NAMED_SEMAPHORE_HPP diff --git a/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp new file mode 100644 index 0000000000..0975a6ed2b --- /dev/null +++ b/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp @@ -0,0 +1,372 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_NAMED_UPGRADABLE_MUTEX_HPP +#define BOOST_INTERPROCESS_NAMED_UPGRADABLE_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//!\file +//!Describes a named upgradable mutex class for inter-process synchronization + +namespace boost { +namespace interprocess { + +/// @cond +namespace ipcdetail{ class interprocess_tester; } +/// @endcond + +class named_condition; + +//!A upgradable mutex with a global name, so it can be found from different +//!processes. This mutex can't be placed in shared memory, and +//!each process should have it's own named upgradable mutex. +class named_upgradable_mutex +{ + /// @cond + //Non-copyable + named_upgradable_mutex(); + named_upgradable_mutex(const named_upgradable_mutex &); + named_upgradable_mutex &operator=(const named_upgradable_mutex &); + friend class named_condition; + /// @endcond + public: + + //!Creates a global upgradable mutex with a name. + //!If the upgradable mutex can't be created throws interprocess_exception + named_upgradable_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); + + //!Opens or creates a global upgradable mutex with a name, and an initial count. + //!If the upgradable mutex is created, this call is equivalent to + //!named_upgradable_mutex(create_only_t, ...) + //!If the upgradable mutex is already created, this call is equivalent to + //!named_upgradable_mutex(open_only_t, ... ). + named_upgradable_mutex(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()); + + //!Opens a global upgradable mutex with a name if that upgradable mutex + //!is previously. + //!created. If it is not previously created this function throws + //!interprocess_exception. + named_upgradable_mutex(open_only_t open_only, const char *name); + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~named_upgradable_mutex(); + + //Exclusive locking + + //!Effects: The calling thread tries to obtain exclusive ownership of the mutex, + //! and if another thread has exclusive, sharable or upgradable ownership of + //! the mutex, it waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock(); + + //!Effects: The calling thread tries to acquire exclusive ownership of the mutex + //! without waiting. If no other thread has exclusive, sharable or upgradable + //! ownership of the mutex this succeeds. + //!Returns: If it can acquire exclusive ownership immediately returns true. + //! If it has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock(); + + //!Effects: The calling thread tries to acquire exclusive ownership of the mutex + //! waiting if necessary until no other thread has exclusive, sharable or + //! upgradable ownership of the mutex or abs_time is reached. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The calling thread releases the exclusive ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock(); + + //Sharable locking + + //!Effects: The calling thread tries to obtain sharable ownership of the mutex, + //! and if another thread has exclusive ownership of the mutex, + //! waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock_sharable(); + + //!Effects: The calling thread tries to acquire sharable ownership of the mutex + //! without waiting. If no other thread has exclusive ownership + //! of the mutex this succeeds. + //!Returns: If it can acquire sharable ownership immediately returns true. If it + //! has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock_sharable(); + + //!Effects: The calling thread tries to acquire sharable ownership of the mutex + //! waiting if necessary until no other thread has exclusive + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock_sharable(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The calling thread releases the sharable ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_sharable(); + + //Upgradable locking + + //!Effects: The calling thread tries to obtain upgradable ownership of the mutex, + //! and if another thread has exclusive or upgradable ownership of the mutex, + //! waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock_upgradable(); + + //!Effects: The calling thread tries to acquire upgradable ownership of the mutex + //! without waiting. If no other thread has exclusive or upgradable ownership + //! of the mutex this succeeds. + //!Returns: If it can acquire upgradable ownership immediately returns true. + //! If it has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock_upgradable(); + + //!Effects: The calling thread tries to acquire upgradable ownership of the mutex + //! waiting if necessary until no other thread has exclusive or upgradable + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock_upgradable(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The calling thread releases the upgradable ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_upgradable(); + + //Demotions + + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The thread atomically releases exclusive ownership and acquires + //! upgradable ownership. This operation is non-blocking. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_and_lock_upgradable(); + + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The thread atomically releases exclusive ownership and acquires + //! sharable ownership. This operation is non-blocking. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_and_lock_sharable(); + + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The thread atomically releases upgradable ownership and acquires + //! sharable ownership. This operation is non-blocking. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_upgradable_and_lock_sharable(); + + //Promotions + + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The thread atomically releases upgradable ownership and acquires + //! exclusive ownership. This operation will block until all threads with + //! sharable ownership release it. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_upgradable_and_lock(); + + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The thread atomically releases upgradable ownership and tries to + //! acquire exclusive ownership. This operation will fail if there are threads + //! with sharable ownership, but it will maintain upgradable ownership. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Throws: An exception derived from interprocess_exception on error. + bool try_unlock_upgradable_and_lock(); + + //!Precondition: The thread must have upgradable ownership of the mutex. + //!Effects: The thread atomically releases upgradable ownership and tries to acquire + //! exclusive ownership, waiting if necessary until abs_time. This operation will + //! fail if there are threads with sharable ownership or timeout reaches, but it + //! will maintain upgradable ownership. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Throws: An exception derived from interprocess_exception on error. + bool timed_unlock_upgradable_and_lock(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The thread atomically releases sharable ownership and tries to acquire + //! exclusive ownership. This operation will fail if there are threads with sharable + //! or upgradable ownership, but it will maintain sharable ownership. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Throws: An exception derived from interprocess_exception on error. + bool try_unlock_sharable_and_lock(); + + bool try_unlock_sharable_and_lock_upgradable(); + + //!Erases a named upgradable mutex from the system. + //!Returns false on error. Never throws. + static bool remove(const char *name); + + /// @cond + private: + friend class ipcdetail::interprocess_tester; + void dont_close_on_destruction(); + + interprocess_upgradable_mutex *mutex() const + { return static_cast(m_shmem.get_user_address()); } + + ipcdetail::managed_open_or_create_impl m_shmem; + typedef ipcdetail::named_creation_functor construct_func_t; + /// @endcond +}; + +/// @cond + +inline named_upgradable_mutex::~named_upgradable_mutex() +{} + +inline named_upgradable_mutex::named_upgradable_mutex + (create_only_t, const char *name, const permissions &perm) + : m_shmem (create_only + ,name + ,sizeof(interprocess_upgradable_mutex) + + ipcdetail::managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoCreate) + ,perm) +{} + +inline named_upgradable_mutex::named_upgradable_mutex + (open_or_create_t, const char *name, const permissions &perm) + : m_shmem (open_or_create + ,name + ,sizeof(interprocess_upgradable_mutex) + + ipcdetail::managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoOpenOrCreate) + ,perm) +{} + +inline named_upgradable_mutex::named_upgradable_mutex + (open_only_t, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoOpen)) +{} + +inline void named_upgradable_mutex::dont_close_on_destruction() +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_shmem); } + +inline void named_upgradable_mutex::lock() +{ this->mutex()->lock(); } + +inline void named_upgradable_mutex::unlock() +{ this->mutex()->unlock(); } + +inline bool named_upgradable_mutex::try_lock() +{ return this->mutex()->try_lock(); } + +inline bool named_upgradable_mutex::timed_lock + (const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + return this->mutex()->timed_lock(abs_time); +} + +inline void named_upgradable_mutex::lock_upgradable() +{ this->mutex()->lock_upgradable(); } + +inline void named_upgradable_mutex::unlock_upgradable() +{ this->mutex()->unlock_upgradable(); } + +inline bool named_upgradable_mutex::try_lock_upgradable() +{ return this->mutex()->try_lock_upgradable(); } + +inline bool named_upgradable_mutex::timed_lock_upgradable + (const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock_upgradable(); + return true; + } + return this->mutex()->timed_lock_upgradable(abs_time); +} + +inline void named_upgradable_mutex::lock_sharable() +{ this->mutex()->lock_sharable(); } + +inline void named_upgradable_mutex::unlock_sharable() +{ this->mutex()->unlock_sharable(); } + +inline bool named_upgradable_mutex::try_lock_sharable() +{ return this->mutex()->try_lock_sharable(); } + +inline bool named_upgradable_mutex::timed_lock_sharable + (const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock_sharable(); + return true; + } + return this->mutex()->timed_lock_sharable(abs_time); +} + +inline void named_upgradable_mutex::unlock_and_lock_upgradable() +{ this->mutex()->unlock_and_lock_upgradable(); } + +inline void named_upgradable_mutex::unlock_and_lock_sharable() +{ this->mutex()->unlock_and_lock_sharable(); } + +inline void named_upgradable_mutex::unlock_upgradable_and_lock_sharable() +{ this->mutex()->unlock_upgradable_and_lock_sharable(); } + +inline void named_upgradable_mutex::unlock_upgradable_and_lock() +{ this->mutex()->unlock_upgradable_and_lock(); } + +inline bool named_upgradable_mutex::try_unlock_upgradable_and_lock() +{ return this->mutex()->try_unlock_upgradable_and_lock(); } + +inline bool named_upgradable_mutex::timed_unlock_upgradable_and_lock + (const boost::posix_time::ptime &abs_time) +{ return this->mutex()->timed_unlock_upgradable_and_lock(abs_time); } + +inline bool named_upgradable_mutex::try_unlock_sharable_and_lock() +{ return this->mutex()->try_unlock_sharable_and_lock(); } + +inline bool named_upgradable_mutex::try_unlock_sharable_and_lock_upgradable() +{ return this->mutex()->try_unlock_sharable_and_lock_upgradable(); } + +inline bool named_upgradable_mutex::remove(const char *name) +{ return shared_memory_object::remove(name); } + +/// @endcond + +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_NAMED_UPGRADABLE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/spin/condition.hpp b/3party/boost/boost/interprocess/sync/spin/condition.hpp new file mode 100644 index 0000000000..55dd79b406 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/spin/condition.hpp @@ -0,0 +1,295 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_CONDITION_HPP +#define BOOST_INTERPROCESS_DETAIL_SPIN_CONDITION_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class spin_condition +{ + spin_condition(const spin_condition &); + spin_condition &operator=(const spin_condition &); + public: + spin_condition(); + ~spin_condition(); + + void notify_one(); + void notify_all(); + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return this->do_timed_wait(abs_time, *lock.mutex()); + } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + while (!pred()){ + if (!this->do_timed_wait(abs_time, *lock.mutex())) + return pred(); + } + return true; + } + + template + void wait(L& lock) + { + if (!lock) + throw lock_exception(); + do_wait(*lock.mutex()); + } + + template + void wait(L& lock, Pr pred) + { + if (!lock) + throw lock_exception(); + + while (!pred()) + do_wait(*lock.mutex()); + } + + template + void do_wait(InterprocessMutex &mut); + + template + bool do_timed_wait(const boost::posix_time::ptime &abs_time, InterprocessMutex &mut); + + private: + template + bool do_timed_wait(bool tout_enabled, const boost::posix_time::ptime &abs_time, InterprocessMutex &mut); + + enum { SLEEP = 0, NOTIFY_ONE, NOTIFY_ALL }; + spin_mutex m_enter_mut; + volatile boost::uint32_t m_command; + volatile boost::uint32_t m_num_waiters; + void notify(boost::uint32_t command); +}; + +inline spin_condition::spin_condition() +{ + //Note that this class is initialized to zero. + //So zeroed memory can be interpreted as an initialized + //condition variable + m_command = SLEEP; + m_num_waiters = 0; +} + +inline spin_condition::~spin_condition() +{ + //Trivial destructor +} + +inline void spin_condition::notify_one() +{ + this->notify(NOTIFY_ONE); +} + +inline void spin_condition::notify_all() +{ + this->notify(NOTIFY_ALL); +} + +inline void spin_condition::notify(boost::uint32_t command) +{ + //This mutex guarantees that no other thread can enter to the + //do_timed_wait method logic, so that thread count will be + //constant until the function writes a NOTIFY_ALL command. + //It also guarantees that no other notification can be signaled + //on this spin_condition before this one ends + m_enter_mut.lock(); + + //Return if there are no waiters + if(!atomic_read32(&m_num_waiters)) { + m_enter_mut.unlock(); + return; + } + + //Notify that all threads should execute wait logic + while(SLEEP != atomic_cas32(const_cast(&m_command), command, SLEEP)){ + thread_yield(); + } +/* + //Wait until the threads are woken + while(SLEEP != atomic_cas32(const_cast(&m_command), 0)){ + thread_yield(); + } +*/ + //The enter mutex will rest locked until the last waiting thread unlocks it +} + +template +inline void spin_condition::do_wait(InterprocessMutex &mut) +{ + this->do_timed_wait(false, boost::posix_time::ptime(), mut); +} + +template +inline bool spin_condition::do_timed_wait + (const boost::posix_time::ptime &abs_time, InterprocessMutex &mut) +{ + return this->do_timed_wait(true, abs_time, mut); +} + +template +inline bool spin_condition::do_timed_wait(bool tout_enabled, + const boost::posix_time::ptime &abs_time, + InterprocessMutex &mut) +{ + boost::posix_time::ptime now = microsec_clock::universal_time(); + + if(tout_enabled){ + if(now >= abs_time) return false; + } + + typedef boost::interprocess::scoped_lock InternalLock; + //The enter mutex guarantees that while executing a notification, + //no other thread can execute the do_timed_wait method. + { + //--------------------------------------------------------------- + InternalLock lock; + if(tout_enabled){ + InternalLock dummy(m_enter_mut, abs_time); + lock = boost::move(dummy); + } + else{ + InternalLock dummy(m_enter_mut); + lock = boost::move(dummy); + } + + if(!lock) + return false; + //--------------------------------------------------------------- + //We increment the waiting thread count protected so that it will be + //always constant when another thread enters the notification logic. + //The increment marks this thread as "waiting on spin_condition" + atomic_inc32(const_cast(&m_num_waiters)); + + //We unlock the external mutex atomically with the increment + mut.unlock(); + } + + //By default, we suppose that no timeout has happened + bool timed_out = false, unlock_enter_mut= false; + + //Loop until a notification indicates that the thread should + //exit or timeout occurs + while(1){ + //The thread sleeps/spins until a spin_condition commands a notification + //Notification occurred, we will lock the checking mutex so that + while(atomic_read32(&m_command) == SLEEP){ + thread_yield(); + + //Check for timeout + if(tout_enabled){ + now = microsec_clock::universal_time(); + + if(now >= abs_time){ + //If we can lock the mutex it means that no notification + //is being executed in this spin_condition variable + timed_out = m_enter_mut.try_lock(); + + //If locking fails, indicates that another thread is executing + //notification, so we play the notification game + if(!timed_out){ + //There is an ongoing notification, we will try again later + continue; + } + //No notification in execution, since enter mutex is locked. + //We will execute time-out logic, so we will decrement count, + //release the enter mutex and return false. + break; + } + } + } + + //If a timeout occurred, the mutex will not execute checking logic + if(tout_enabled && timed_out){ + //Decrement wait count + atomic_dec32(const_cast(&m_num_waiters)); + unlock_enter_mut = true; + break; + } + else{ + boost::uint32_t result = atomic_cas32 + (const_cast(&m_command), SLEEP, NOTIFY_ONE); + if(result == SLEEP){ + //Other thread has been notified and since it was a NOTIFY one + //command, this thread must sleep again + continue; + } + else if(result == NOTIFY_ONE){ + //If it was a NOTIFY_ONE command, only this thread should + //exit. This thread has atomically marked command as sleep before + //so no other thread will exit. + //Decrement wait count. + unlock_enter_mut = true; + atomic_dec32(const_cast(&m_num_waiters)); + break; + } + else{ + //If it is a NOTIFY_ALL command, all threads should return + //from do_timed_wait function. Decrement wait count. + unlock_enter_mut = 1 == atomic_dec32(const_cast(&m_num_waiters)); + //Check if this is the last thread of notify_all waiters + //Only the last thread will release the mutex + if(unlock_enter_mut){ + atomic_cas32(const_cast(&m_command), SLEEP, NOTIFY_ALL); + } + break; + } + } + } + + //Unlock the enter mutex if it is a single notification, if this is + //the last notified thread in a notify_all or a timeout has occurred + if(unlock_enter_mut){ + m_enter_mut.unlock(); + } + + //Lock external again before returning from the method + mut.lock(); + return !timed_out; +} + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_SPIN_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/emulation/interprocess_barrier.hpp b/3party/boost/boost/interprocess/sync/spin/interprocess_barrier.hpp similarity index 100% rename from 3party/boost/boost/interprocess/sync/emulation/interprocess_barrier.hpp rename to 3party/boost/boost/interprocess/sync/spin/interprocess_barrier.hpp diff --git a/3party/boost/boost/interprocess/sync/emulation/mutex.hpp b/3party/boost/boost/interprocess/sync/spin/mutex.hpp similarity index 62% rename from 3party/boost/boost/interprocess/sync/emulation/mutex.hpp rename to 3party/boost/boost/interprocess/sync/spin/mutex.hpp index 029b31e3f5..926f7237c0 100644 --- a/3party/boost/boost/interprocess/sync/emulation/mutex.hpp +++ b/3party/boost/boost/interprocess/sync/spin/mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -8,8 +8,8 @@ // ////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_INTERPROCESS_DETAIL_EMULATION_MUTEX_HPP -#define BOOST_INTERPROCESS_DETAIL_EMULATION_MUTEX_HPP +#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_MUTEX_HPP +#define BOOST_INTERPROCESS_DETAIL_SPIN_MUTEX_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -25,16 +25,16 @@ namespace boost { namespace interprocess { -namespace detail { +namespace ipcdetail { -class emulation_mutex +class spin_mutex { - emulation_mutex(const emulation_mutex &); - emulation_mutex &operator=(const emulation_mutex &); + spin_mutex(const spin_mutex &); + spin_mutex &operator=(const spin_mutex &); public: - emulation_mutex(); - ~emulation_mutex(); + spin_mutex(); + ~spin_mutex(); void lock(); bool try_lock(); @@ -45,39 +45,39 @@ class emulation_mutex volatile boost::uint32_t m_s; }; -inline emulation_mutex::emulation_mutex() - : m_s(0) +inline spin_mutex::spin_mutex() + : m_s(0) { //Note that this class is initialized to zero. //So zeroed memory can be interpreted as an //initialized mutex } -inline emulation_mutex::~emulation_mutex() +inline spin_mutex::~spin_mutex() { //Trivial destructor } -inline void emulation_mutex::lock(void) +inline void spin_mutex::lock(void) { do{ - boost::uint32_t prev_s = detail::atomic_cas32(const_cast(&m_s), 1, 0); + boost::uint32_t prev_s = ipcdetail::atomic_cas32(const_cast(&m_s), 1, 0); if (m_s == 1 && prev_s == 0){ break; } // relinquish current timeslice - detail::thread_yield(); + ipcdetail::thread_yield(); }while (true); } -inline bool emulation_mutex::try_lock(void) +inline bool spin_mutex::try_lock(void) { - boost::uint32_t prev_s = detail::atomic_cas32(const_cast(&m_s), 1, 0); + boost::uint32_t prev_s = ipcdetail::atomic_cas32(const_cast(&m_s), 1, 0); return m_s == 1 && prev_s == 0; } -inline bool emulation_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +inline bool spin_mutex::timed_lock(const boost::posix_time::ptime &abs_time) { if(abs_time == boost::posix_time::pos_infin){ this->lock(); @@ -86,8 +86,6 @@ inline bool emulation_mutex::timed_lock(const boost::posix_time::ptime &abs_time //Obtain current count and target time boost::posix_time::ptime now = microsec_clock::universal_time(); - if(now >= abs_time) return false; - do{ if(this->try_lock()){ break; @@ -98,17 +96,19 @@ inline bool emulation_mutex::timed_lock(const boost::posix_time::ptime &abs_time return false; } // relinquish current time slice - detail::thread_yield(); + ipcdetail::thread_yield(); }while (true); return true; } -inline void emulation_mutex::unlock(void) -{ detail::atomic_cas32(const_cast(&m_s), 0, 1); } +inline void spin_mutex::unlock(void) +{ ipcdetail::atomic_cas32(const_cast(&m_s), 0, 1); } -} //namespace detail { +} //namespace ipcdetail { } //namespace interprocess { } //namespace boost { -#endif //BOOST_INTERPROCESS_DETAIL_EMULATION_MUTEX_HPP +#include + +#endif //BOOST_INTERPROCESS_DETAIL_SPIN_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp new file mode 100644 index 0000000000..a763f9c72d --- /dev/null +++ b/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp @@ -0,0 +1,175 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// +// +// Parts of the pthread code come from Boost Threads code: +// +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001-2003 +// William E. Kempf +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. William E. Kempf makes no representations +// about the suitability of this software for any purpose. +// It is provided "as is" without express or implied warranty. +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_RECURSIVE_MUTEX_HPP +#define BOOST_INTERPROCESS_DETAIL_SPIN_RECURSIVE_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class spin_recursive_mutex +{ + spin_recursive_mutex(const spin_recursive_mutex &); + spin_recursive_mutex &operator=(const spin_recursive_mutex &); + public: + + spin_recursive_mutex(); + ~spin_recursive_mutex(); + + void lock(); + bool try_lock(); + bool timed_lock(const boost::posix_time::ptime &abs_time); + void unlock(); + void take_ownership(); + private: + spin_mutex m_mutex; + unsigned int m_nLockCount; + volatile ipcdetail::OS_systemwide_thread_id_t m_nOwner; + volatile boost::uint32_t m_s; +}; + +inline spin_recursive_mutex::spin_recursive_mutex() + : m_nLockCount(0), m_nOwner(ipcdetail::get_invalid_systemwide_thread_id()){} + +inline spin_recursive_mutex::~spin_recursive_mutex(){} + +inline void spin_recursive_mutex::lock() +{ + typedef ipcdetail::OS_systemwide_thread_id_t handle_t; + const handle_t thr_id(ipcdetail::get_current_systemwide_thread_id()); + handle_t old_id; + ipcdetail::systemwide_thread_id_copy(m_nOwner, old_id); + if(ipcdetail::equal_systemwide_thread_id(thr_id , old_id)){ + if((unsigned int)(m_nLockCount+1) == 0){ + //Overflow, throw an exception + throw interprocess_exception("boost::interprocess::spin_recursive_mutex recursive lock overflow"); + } + ++m_nLockCount; + } + else{ + m_mutex.lock(); + ipcdetail::systemwide_thread_id_copy(thr_id, m_nOwner); + m_nLockCount = 1; + } +} + +inline bool spin_recursive_mutex::try_lock() +{ + typedef ipcdetail::OS_systemwide_thread_id_t handle_t; + handle_t thr_id(ipcdetail::get_current_systemwide_thread_id()); + handle_t old_id; + ipcdetail::systemwide_thread_id_copy(m_nOwner, old_id); + if(ipcdetail::equal_systemwide_thread_id(thr_id , old_id)) { // we own it + if((unsigned int)(m_nLockCount+1) == 0){ + //Overflow, throw an exception + throw interprocess_exception("boost::interprocess::spin_recursive_mutex recursive lock overflow"); + } + ++m_nLockCount; + return true; + } + if(m_mutex.try_lock()){ + ipcdetail::systemwide_thread_id_copy(thr_id, m_nOwner); + m_nLockCount = 1; + return true; + } + return false; +} + +inline bool spin_recursive_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ + typedef ipcdetail::OS_systemwide_thread_id_t handle_t; + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + const handle_t thr_id(ipcdetail::get_current_systemwide_thread_id()); + handle_t old_id; + ipcdetail::systemwide_thread_id_copy(m_nOwner, old_id); + if(ipcdetail::equal_systemwide_thread_id(thr_id , old_id)) { // we own it + if((unsigned int)(m_nLockCount+1) == 0){ + //Overflow, throw an exception + throw interprocess_exception("boost::interprocess::spin_recursive_mutex recursive lock overflow"); + } + ++m_nLockCount; + return true; + } + if(m_mutex.timed_lock(abs_time)){ + ipcdetail::systemwide_thread_id_copy(thr_id, m_nOwner); + m_nLockCount = 1; + return true; + } + return false; +} + +inline void spin_recursive_mutex::unlock() +{ + typedef ipcdetail::OS_systemwide_thread_id_t handle_t; + handle_t old_id; + ipcdetail::systemwide_thread_id_copy(m_nOwner, old_id); + const handle_t thr_id(ipcdetail::get_current_systemwide_thread_id()); + (void)old_id; + (void)thr_id; + BOOST_ASSERT(ipcdetail::equal_systemwide_thread_id(thr_id, old_id)); + --m_nLockCount; + if(!m_nLockCount){ + const handle_t new_id(ipcdetail::get_invalid_systemwide_thread_id()); + ipcdetail::systemwide_thread_id_copy(new_id, m_nOwner); + m_mutex.unlock(); + } +} + +inline void spin_recursive_mutex::take_ownership() +{ + typedef ipcdetail::OS_systemwide_thread_id_t handle_t; + this->m_nLockCount = 1; + const handle_t thr_id(ipcdetail::get_current_systemwide_thread_id()); + ipcdetail::systemwide_thread_id_copy(thr_id, m_nOwner); +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_SPIN_RECURSIVE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/spin/semaphore.hpp b/3party/boost/boost/interprocess/sync/spin/semaphore.hpp new file mode 100644 index 0000000000..1b8cac35aa --- /dev/null +++ b/3party/boost/boost/interprocess/sync/spin/semaphore.hpp @@ -0,0 +1,110 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class spin_semaphore +{ + spin_semaphore(const spin_semaphore &); + spin_semaphore &operator=(const spin_semaphore &); + + public: + spin_semaphore(unsigned int initialCount); + ~spin_semaphore(); + + void post(); + void wait(); + bool try_wait(); + bool timed_wait(const boost::posix_time::ptime &abs_time); + +// int get_count() const; + private: + volatile boost::uint32_t m_count; +}; + + +inline spin_semaphore::~spin_semaphore() +{} + +inline spin_semaphore::spin_semaphore(unsigned int initialCount) +{ ipcdetail::atomic_write32(&this->m_count, boost::uint32_t(initialCount)); } + +inline void spin_semaphore::post() +{ + ipcdetail::atomic_inc32(&m_count); +} + +inline void spin_semaphore::wait() +{ + while(!ipcdetail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0))){ + while(ipcdetail::atomic_read32(&m_count) == 0){ + ipcdetail::thread_yield(); + } + } +} + +inline bool spin_semaphore::try_wait() +{ + return ipcdetail::atomic_add_unless32(&m_count, boost::uint32_t(-1), boost::uint32_t(0)); +} + +inline bool spin_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(); + return true; + } + //Obtain current count and target time + boost::posix_time::ptime now(microsec_clock::universal_time()); + + do{ + if(this->try_wait()){ + break; + } + now = microsec_clock::universal_time(); + + if(now >= abs_time){ + return this->try_wait(); + } + // relinquish current time slice + ipcdetail::thread_yield(); + }while (true); + return true; +} + + +//inline int spin_semaphore::get_count() const +//{ + //return (int)ipcdetail::atomic_read32(&m_count); +//} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_SPIN_SEMAPHORE_HPP diff --git a/3party/boost/boost/interprocess/sync/upgradable_lock.hpp b/3party/boost/boost/interprocess/sync/upgradable_lock.hpp index 3d0355c874..fb86374ca1 100644 --- a/3party/boost/boost/interprocess/sync/upgradable_lock.hpp +++ b/3party/boost/boost/interprocess/sync/upgradable_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -28,7 +28,7 @@ #include #include -#include +#include #include //!\file @@ -57,7 +57,7 @@ class upgradable_lock typedef upgradable_lock this_type; explicit upgradable_lock(scoped_lock&); typedef bool this_type::*unspecified_bool_type; - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(upgradable_lock) + BOOST_MOVABLE_BUT_NOT_COPYABLE(upgradable_lock) /// @endcond public: @@ -85,7 +85,7 @@ class upgradable_lock : mp_mutex(&m), m_locked(true) {} - //!Effects: m.try_lock_upgradable(). + //!Effects: m.try_lock_upgradable(). //!Postconditions: mutex() == &m. owns() == the return value of the //! m.try_lock_upgradable() executed within the constructor. //!Notes: The constructor will take upgradable-ownership of the mutex @@ -97,7 +97,7 @@ class upgradable_lock : mp_mutex(&m), m_locked(false) { m_locked = mp_mutex->try_lock_upgradable(); } - //!Effects: m.timed_lock_upgradable(abs_time) + //!Effects: m.timed_lock_upgradable(abs_time) //!Postconditions: mutex() == &m. owns() == the return value of the //! m.timed_lock_upgradable() executed within the constructor. //!Notes: The constructor will take upgradable-ownership of the mutex if it @@ -117,13 +117,13 @@ class upgradable_lock //! while unlocking upgr. If upgr is unlocked, then this upgradable_lock will //! be unlocked as well. Only a moved upgradable_lock's will match this //! signature. An non-moved upgradable_lock can be moved with the - //! expression: "boost::interprocess::move(lock);". This constructor does not alter the + //! expression: "boost::move(lock);". This constructor does not alter the //! state of the mutex, only potentially who owns it. - upgradable_lock(BOOST_INTERPROCESS_RV_REF(upgradable_lock) upgr) + upgradable_lock(BOOST_RV_REF(upgradable_lock) upgr) : mp_mutex(0), m_locked(upgr.owns()) { mp_mutex = upgr.release(); } - //!Effects: If scop.owns(), m_.unlock_and_lock_upgradable(). + //!Effects: If scop.owns(), m_.unlock_and_lock_upgradable(). //!Postconditions: mutex() == the value scop.mutex() had before the construction. //! scop.mutex() == 0. owns() == scop.owns() before the constructor. After the //! construction, scop.owns() == false. @@ -131,10 +131,10 @@ class upgradable_lock //! to an upgradable-ownership of this upgradable_lock. //! Only a moved sharable_lock's will match this //! signature. An non-moved sharable_lock can be moved with the - //! expression: "boost::interprocess::move(lock);". + //! expression: "boost::move(lock);". template - upgradable_lock(BOOST_INTERPROCESS_RV_REF(scoped_lock) scop - , typename detail::enable_if< detail::is_same >::type * = 0) + upgradable_lock(BOOST_RV_REF(scoped_lock) scop + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { scoped_lock &u_lock = scop; @@ -146,12 +146,12 @@ class upgradable_lock } //!Effects: If shar.owns() then calls try_unlock_sharable_and_lock_upgradable() - //! on the referenced mutex. + //! on the referenced mutex. //! a)if try_unlock_sharable_and_lock_upgradable() returns true then mutex() - //! obtains the value from shar.release() and owns() is set to true. + //! obtains the value from shar.release() and owns() is set to true. //! b)if try_unlock_sharable_and_lock_upgradable() returns false then shar is //! unaffected and this upgradable_lock construction has the same - //! effects as a default construction. + //! effects as a default construction. //! c)Else shar.owns() is false. mutex() obtains the value from shar.release() //! and owns() is set to false. //!Notes: This construction will not block. It will try to obtain mutex @@ -161,8 +161,8 @@ class upgradable_lock //! "upgradable lock". If the "read lock" is held, then mutex transfer //! occurs only if it can do so in a non-blocking manner. template - upgradable_lock( BOOST_INTERPROCESS_RV_REF(sharable_lock) shar, try_to_lock_type - , typename detail::enable_if< detail::is_same >::type * = 0) + upgradable_lock( BOOST_RV_REF(sharable_lock) shar, try_to_lock_type + , typename ipcdetail::enable_if< ipcdetail::is_same >::type * = 0) : mp_mutex(0), m_locked(false) { sharable_lock &s_lock = shar; @@ -192,7 +192,7 @@ class upgradable_lock //! mutex before the assignment. In this case, this will own the mutex //! after the assignment (and upgr will not), but the mutex's upgradable lock //! count will be decremented by one. - upgradable_lock &operator=(BOOST_INTERPROCESS_RV_REF(upgradable_lock) upgr) + upgradable_lock &operator=(BOOST_RV_REF(upgradable_lock) upgr) { if(this->owns()) this->unlock(); @@ -207,7 +207,7 @@ class upgradable_lock //!Notes: The sharable_lock changes from a state of not owning the mutex, //! to owning the mutex, blocking if necessary. void lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); mp_mutex->lock_upgradable(); @@ -223,7 +223,7 @@ class upgradable_lock //! mutex_type does not support try_lock_upgradable(), this function will //! fail at compile time if instantiated, but otherwise have no effect. bool try_lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->try_lock_upgradable(); @@ -240,7 +240,7 @@ class upgradable_lock //! timed_lock_upgradable(abs_time), this function will fail at compile //! time if instantiated, but otherwise have no effect. bool timed_lock(const boost::posix_time::ptime& abs_time) - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->timed_lock_upgradable(abs_time); @@ -286,7 +286,7 @@ class upgradable_lock return mut; } - //!Effects: Swaps state with moved lock. + //!Effects: Swaps state with moved lock. //!Throws: Nothing. void swap(upgradable_lock &other) { diff --git a/3party/boost/boost/interprocess/sync/windows/condition.hpp b/3party/boost/boost/interprocess/sync/windows/condition.hpp new file mode 100644 index 0000000000..9695c21044 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/condition.hpp @@ -0,0 +1,168 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP +#define BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class windows_condition +{ + windows_condition(const windows_condition &); + windows_condition &operator=(const windows_condition &); + + public: + windows_condition(); + ~windows_condition(); + + void notify_one(); + void notify_all(); + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return this->do_timed_wait(abs_time, *lock.mutex()); + } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + while (!pred()){ + if (!this->do_timed_wait(abs_time, *lock.mutex())) + return pred(); + } + return true; + } + + template + void wait(L& lock) + { + if (!lock) + throw lock_exception(); + do_wait(*lock.mutex()); + } + + template + void wait(L& lock, Pr pred) + { + if (!lock) + throw lock_exception(); + + while (!pred()) + do_wait(*lock.mutex()); + } + + template + void do_wait(InterprocessMutex &mut); + + template + bool do_timed_wait(const boost::posix_time::ptime &abs_time, InterprocessMutex &mut); + + private: + + struct condition_data + { + typedef boost::int32_t integer_type; + typedef windows_semaphore semaphore_type; + typedef windows_mutex mutex_type; + + condition_data() + : m_nwaiters_blocked(0) + , m_nwaiters_gone(0) + , m_nwaiters_to_unblock(0) + , m_sem_block_queue(0) + , m_sem_block_lock(1) + , m_mtx_unblock_lock() + {} + + integer_type &get_nwaiters_blocked() + { return m_nwaiters_blocked; } + + integer_type &get_nwaiters_gone() + { return m_nwaiters_gone; } + + integer_type &get_nwaiters_to_unblock() + { return m_nwaiters_to_unblock; } + + semaphore_type &get_sem_block_queue() + { return m_sem_block_queue; } + + semaphore_type &get_sem_block_lock() + { return m_sem_block_lock; } + + mutex_type &get_mtx_unblock_lock() + { return m_mtx_unblock_lock; } + + boost::int32_t m_nwaiters_blocked; + boost::int32_t m_nwaiters_gone; + boost::int32_t m_nwaiters_to_unblock; + windows_semaphore m_sem_block_queue; + windows_semaphore m_sem_block_lock; + windows_mutex m_mtx_unblock_lock; + } m_condition_data; + + typedef condition_algorithm_8a algorithm_type; +}; + +inline windows_condition::windows_condition() + : m_condition_data() +{} + +inline windows_condition::~windows_condition() +{} + +inline void windows_condition::notify_one() +{ algorithm_type::signal(m_condition_data, false); } + +inline void windows_condition::notify_all() +{ algorithm_type::signal(m_condition_data, true); } + +template +inline void windows_condition::do_wait(InterprocessMutex &mut) +{ algorithm_type::wait(m_condition_data, false, boost::posix_time::ptime(), mut); } + +template +inline bool windows_condition::do_timed_wait + (const boost::posix_time::ptime &abs_time, InterprocessMutex &mut) +{ return algorithm_type::wait(m_condition_data, true, abs_time, mut); } + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_WINDOWS_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/mutex.hpp b/3party/boost/boost/interprocess/sync/windows/mutex.hpp new file mode 100644 index 0000000000..477acd396a --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/mutex.hpp @@ -0,0 +1,114 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_MUTEX_HPP +#define BOOST_INTERPROCESS_DETAIL_WINDOWS_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class windows_mutex +{ + windows_mutex(const windows_mutex &); + windows_mutex &operator=(const windows_mutex &); + public: + + windows_mutex(); + ~windows_mutex(); + + void lock(); + bool try_lock(); + bool timed_lock(const boost::posix_time::ptime &abs_time); + void unlock(); + void take_ownership(){}; + + private: + const sync_id id_; +}; + +inline windows_mutex::windows_mutex() + : id_(this) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //Create mutex with the initial count + bool open_or_created; + (void)handles.obtain_mutex(this->id_, &open_or_created); + //The mutex must be created, never opened + assert(open_or_created); + assert(open_or_created && winapi::get_last_error() != winapi::error_already_exists); + (void)open_or_created; +} + +inline windows_mutex::~windows_mutex() +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + handles.destroy_handle(this->id_); +} + +inline void windows_mutex::lock(void) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_mutex_functions mut(handles.obtain_mutex(this->id_)); + mut.lock(); +} + +inline bool windows_mutex::try_lock(void) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_mutex_functions mut(handles.obtain_mutex(this->id_)); + return mut.try_lock(); +} + +inline bool windows_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_mutex_functions mut(handles.obtain_mutex(this->id_)); + return mut.timed_lock(abs_time); +} + +inline void windows_mutex::unlock(void) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_mutex_functions mut(handles.obtain_mutex(this->id_)); + return mut.unlock(); +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_WINDOWS_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/named_condition.hpp b/3party/boost/boost/interprocess/sync/windows/named_condition.hpp new file mode 100644 index 0000000000..403e826178 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/named_condition.hpp @@ -0,0 +1,334 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_HPP +#define BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class windows_named_condition +{ + /// @cond + + //Non-copyable + windows_named_condition(); + windows_named_condition(const windows_named_condition &); + windows_named_condition &operator=(const windows_named_condition &); + /// @endcond + + public: + windows_named_condition(create_only_t, const char *name, const permissions &perm = permissions()); + + windows_named_condition(open_or_create_t, const char *name, const permissions &perm = permissions()); + + windows_named_condition(open_only_t, const char *name); + + ~windows_named_condition(); + + //!If there is a thread waiting on *this, change that + //!thread's state to ready. Otherwise there is no effect.*/ + void notify_one(); + + //!Change the state of all threads waiting on *this to ready. + //!If there are no waiting threads, notify_all() has no effect. + void notify_all(); + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), and then reacquires the lock. + template + void wait(L& lock); + + //!The same as: + //!while (!pred()) wait(lock) + template + void wait(L& lock, Pr pred); + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!and then reacquires the lock. + //!Returns: false if time abs_time is reached, otherwise true. + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time); + + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); + //! } return true; + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred); + + static bool remove(const char *name); + + /// @cond + private: + friend class interprocess_tester; + void dont_close_on_destruction(); + + template + void do_wait(InterprocessMutex& lock); + + template + bool do_timed_wait(const boost::posix_time::ptime &abs_time, InterprocessMutex& lock); + + struct condition_data + { + typedef boost::int32_t integer_type; + typedef winapi_semaphore_wrapper semaphore_type; + typedef winapi_mutex_wrapper mutex_type; + + integer_type &get_nwaiters_blocked() + { return m_nwaiters_blocked; } + + integer_type &get_nwaiters_gone() + { return m_nwaiters_gone; } + + integer_type &get_nwaiters_to_unblock() + { return m_nwaiters_to_unblock; } + + semaphore_type &get_sem_block_queue() + { return m_sem_block_queue; } + + semaphore_type &get_sem_block_lock() + { return m_sem_block_lock; } + + mutex_type &get_mtx_unblock_lock() + { return m_mtx_unblock_lock; } + + integer_type m_nwaiters_blocked; + integer_type m_nwaiters_gone; + integer_type m_nwaiters_to_unblock; + winapi_semaphore_wrapper m_sem_block_queue; + winapi_semaphore_wrapper m_sem_block_lock; + winapi_mutex_wrapper m_mtx_unblock_lock; + } m_condition_data; + + typedef condition_algorithm_8a algorithm_type; + + class named_cond_callbacks : public windows_named_sync_interface + { + typedef __int64 sem_count_t; + mutable sem_count_t sem_counts [2]; + + public: + named_cond_callbacks(condition_data &cond_data) + : m_condition_data(cond_data) + {} + + virtual std::size_t get_data_size() const + { return sizeof(sem_counts); } + + virtual const void *buffer_with_final_data_to_file() + { + sem_counts[0] = m_condition_data.m_sem_block_queue.value(); + sem_counts[1] = m_condition_data.m_sem_block_lock.value(); + return &sem_counts; + } + + virtual const void *buffer_with_init_data_to_file() + { + sem_counts[0] = 0; + sem_counts[1] = 1; + return &sem_counts; + } + + virtual void *buffer_to_store_init_data_from_file() + { return &sem_counts; } + + virtual bool open(create_enum_t, const char *id_name) + { + m_condition_data.m_nwaiters_blocked = 0; + m_condition_data.m_nwaiters_gone = 0; + m_condition_data.m_nwaiters_to_unblock = 0; + + //Now open semaphores and mutex. + //Use local variables + swap to guarantee consistent + //initialization and cleanup in case any opening fails + permissions perm; + perm.set_unrestricted(); + std::string aux_str = "Global\\bipc.cond."; + aux_str += id_name; + std::size_t pos = aux_str.size(); + + //sem_block_queue + aux_str += "_bq"; + winapi_semaphore_wrapper sem_block_queue; + bool created; + if(!sem_block_queue.open_or_create + (aux_str.c_str(), sem_counts[0], winapi_semaphore_wrapper::MaxCount, perm, created)) + return false; + aux_str.erase(pos); + + //sem_block_lock + aux_str += "_bl"; + winapi_semaphore_wrapper sem_block_lock; + if(!sem_block_lock.open_or_create + (aux_str.c_str(), sem_counts[1], winapi_semaphore_wrapper::MaxCount, perm, created)) + return false; + aux_str.erase(pos); + + //mtx_unblock_lock + aux_str += "_ul"; + winapi_mutex_wrapper mtx_unblock_lock; + if(!mtx_unblock_lock.open_or_create(aux_str.c_str(), perm)) + return false; + + //All ok, commit data + m_condition_data.m_sem_block_queue.swap(sem_block_queue); + m_condition_data.m_sem_block_lock.swap(sem_block_lock); + m_condition_data.m_mtx_unblock_lock.swap(mtx_unblock_lock); + return true; + } + + virtual void close() + { + m_condition_data.m_sem_block_queue.close(); + m_condition_data.m_sem_block_lock.close(); + m_condition_data.m_mtx_unblock_lock.close(); + m_condition_data.m_nwaiters_blocked = 0; + m_condition_data.m_nwaiters_gone = 0; + m_condition_data.m_nwaiters_to_unblock = 0; + } + + virtual ~named_cond_callbacks() + {} + + private: + condition_data &m_condition_data; + }; + + windows_named_sync m_named_sync; + /// @endcond +}; + +inline windows_named_condition::~windows_named_condition() +{ + named_cond_callbacks callbacks(m_condition_data); + m_named_sync.close(callbacks); +} + +inline void windows_named_condition::dont_close_on_destruction() +{} + +inline windows_named_condition::windows_named_condition + (create_only_t, const char *name, const permissions &perm) + : m_condition_data() +{ + named_cond_callbacks callbacks(m_condition_data); + m_named_sync.open_or_create(DoCreate, name, perm, callbacks); +} + +inline windows_named_condition::windows_named_condition + (open_or_create_t, const char *name, const permissions &perm) + : m_condition_data() +{ + named_cond_callbacks callbacks(m_condition_data); + m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); +} + +inline windows_named_condition::windows_named_condition(open_only_t, const char *name) + : m_condition_data() +{ + named_cond_callbacks callbacks(m_condition_data); + m_named_sync.open_or_create(DoOpen, name, permissions(), callbacks); +} + +inline void windows_named_condition::notify_one() +{ algorithm_type::signal(m_condition_data, false); } + +inline void windows_named_condition::notify_all() +{ algorithm_type::signal(m_condition_data, true); } + +template +inline void windows_named_condition::do_wait(InterprocessMutex &mut) +{ algorithm_type::wait(m_condition_data, false, boost::posix_time::ptime(), mut); } + +template +inline bool windows_named_condition::do_timed_wait + (const boost::posix_time::ptime &abs_time, InterprocessMutex &mut) +{ return algorithm_type::wait(m_condition_data, true, abs_time, mut); } + +template +inline void windows_named_condition::wait(L& lock) +{ + if (!lock) + throw lock_exception(); + this->do_wait(*lock.mutex()); +} + +template +inline void windows_named_condition::wait(L& lock, Pr pred) +{ + if (!lock) + throw lock_exception(); + while (!pred()) + this->do_wait(*lock.mutex()); +} + +template +inline bool windows_named_condition::timed_wait + (L& lock, const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return this->do_timed_wait(abs_time, *lock.mutex()); +} + +template +inline bool windows_named_condition::timed_wait + (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + + while (!pred()){ + if(!this->do_timed_wait(abs_time, *lock.mutex())){ + return pred(); + } + } + return true; +} + +inline bool windows_named_condition::remove(const char *name) +{ + return windows_named_sync::remove(name); +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp new file mode 100644 index 0000000000..8ea6b3e1e4 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/named_mutex.hpp @@ -0,0 +1,175 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP +#define BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + + + +class windows_named_mutex +{ + /// @cond + + //Non-copyable + windows_named_mutex(); + windows_named_mutex(const windows_named_mutex &); + windows_named_mutex &operator=(const windows_named_mutex &); + /// @endcond + + public: + windows_named_mutex(create_only_t, const char *name, const permissions &perm = permissions()); + + windows_named_mutex(open_or_create_t, const char *name, const permissions &perm = permissions()); + + windows_named_mutex(open_only_t, const char *name); + + ~windows_named_mutex(); + + void unlock(); + void lock(); + bool try_lock(); + bool timed_lock(const boost::posix_time::ptime &abs_time); + + static bool remove(const char *name); + + /// @cond + private: + friend class interprocess_tester; + void dont_close_on_destruction(); + winapi_mutex_wrapper m_mtx_wrapper; + windows_named_sync m_named_sync; + + class named_mut_callbacks : public windows_named_sync_interface + { + public: + named_mut_callbacks(winapi_mutex_wrapper &mtx_wrapper) + : m_mtx_wrapper(mtx_wrapper) + {} + + virtual std::size_t get_data_size() const + { return 0u; } + + virtual const void *buffer_with_init_data_to_file() + { return 0; } + + virtual const void *buffer_with_final_data_to_file() + { return 0; } + + virtual void *buffer_to_store_init_data_from_file() + { return 0; } + + virtual bool open(create_enum_t, const char *id_name) + { + std::string aux_str = "Global\\bipc.mut."; + aux_str += id_name; + // + permissions mut_perm; + mut_perm.set_unrestricted(); + return m_mtx_wrapper.open_or_create(aux_str.c_str(), mut_perm); + } + + virtual void close() + { + m_mtx_wrapper.close(); + } + + virtual ~named_mut_callbacks() + {} + + private: + winapi_mutex_wrapper& m_mtx_wrapper; + }; + /// @endcond +}; + +inline windows_named_mutex::~windows_named_mutex() +{ + named_mut_callbacks callbacks(m_mtx_wrapper); + m_named_sync.close(callbacks); +} + +inline void windows_named_mutex::dont_close_on_destruction() +{} + +inline windows_named_mutex::windows_named_mutex + (create_only_t, const char *name, const permissions &perm) + : m_mtx_wrapper() +{ + named_mut_callbacks callbacks(m_mtx_wrapper); + m_named_sync.open_or_create(DoCreate, name, perm, callbacks); +} + +inline windows_named_mutex::windows_named_mutex + (open_or_create_t, const char *name, const permissions &perm) + : m_mtx_wrapper() +{ + named_mut_callbacks callbacks(m_mtx_wrapper); + m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); +} + +inline windows_named_mutex::windows_named_mutex(open_only_t, const char *name) + : m_mtx_wrapper() +{ + named_mut_callbacks callbacks(m_mtx_wrapper); + m_named_sync.open_or_create(DoOpen, name, permissions(), callbacks); +} + +inline void windows_named_mutex::unlock() +{ + m_mtx_wrapper.unlock(); +} + +inline void windows_named_mutex::lock() +{ + m_mtx_wrapper.lock(); +} + +inline bool windows_named_mutex::try_lock() +{ + return m_mtx_wrapper.try_lock(); +} + +inline bool windows_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) +{ + return m_mtx_wrapper.timed_lock(abs_time); +} + +inline bool windows_named_mutex::remove(const char *name) +{ + return windows_named_sync::remove(name); +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_WINDOWS_NAMED_MUTEX_HPP \ No newline at end of file diff --git a/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp new file mode 100644 index 0000000000..cb2ef79ac1 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/named_recursive_mutex.hpp @@ -0,0 +1,58 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_INTERPROCESS_WINDOWS_RECURSIVE_NAMED_MUTEX_HPP +#define BOOST_INTERPROCESS_WINDOWS_RECURSIVE_NAMED_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + + +class windows_named_recursive_mutex + //Windows mutexes based on CreateMutex are already recursive... + : public windows_named_mutex +{ + /// @cond + + //Non-copyable + windows_named_recursive_mutex(); + windows_named_recursive_mutex(const windows_named_mutex &); + windows_named_recursive_mutex &operator=(const windows_named_mutex &); + /// @endcond + + public: + windows_named_recursive_mutex(create_only_t, const char *name, const permissions &perm = permissions()) + : windows_named_mutex(create_only_t(), name, perm) + {} + + windows_named_recursive_mutex(open_or_create_t, const char *name, const permissions &perm = permissions()) + : windows_named_mutex(open_or_create_t(), name, perm) + {} + + windows_named_recursive_mutex(open_only_t, const char *name) + : windows_named_mutex(open_only_t(), name) + {} +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_WINDOWS_RECURSIVE_NAMED_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp new file mode 100644 index 0000000000..8f48d4df96 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/named_semaphore.hpp @@ -0,0 +1,178 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_WINDOWS_NAMED_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + + + +class windows_named_semaphore +{ + /// @cond + + //Non-copyable + windows_named_semaphore(); + windows_named_semaphore(const windows_named_semaphore &); + windows_named_semaphore &operator=(const windows_named_semaphore &); + /// @endcond + + public: + windows_named_semaphore(create_only_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()); + + windows_named_semaphore(open_or_create_t, const char *name, unsigned int initialCount, const permissions &perm = permissions()); + + windows_named_semaphore(open_only_t, const char *name); + + ~windows_named_semaphore(); + + void post(); + void wait(); + bool try_wait(); + bool timed_wait(const boost::posix_time::ptime &abs_time); + + static bool remove(const char *name); + + /// @cond + private: + friend class interprocess_tester; + void dont_close_on_destruction(); + winapi_semaphore_wrapper m_sem_wrapper; + windows_named_sync m_named_sync; + + class named_sem_callbacks : public windows_named_sync_interface + { + public: + typedef __int64 sem_count_t; + named_sem_callbacks(winapi_semaphore_wrapper &sem_wrapper, sem_count_t sem_cnt) + : m_sem_wrapper(sem_wrapper), m_sem_count(sem_cnt) + {} + + virtual std::size_t get_data_size() const + { return sizeof(sem_count_t); } + + virtual const void *buffer_with_final_data_to_file() + { return &m_sem_count; } + + virtual const void *buffer_with_init_data_to_file() + { return &m_sem_count; } + + virtual void *buffer_to_store_init_data_from_file() + { return &m_sem_count; } + + virtual bool open(create_enum_t, const char *id_name) + { + std::string aux_str = "Global\\bipc.sem."; + aux_str += id_name; + // + permissions sem_perm; + sem_perm.set_unrestricted(); + bool created; + return m_sem_wrapper.open_or_create + ( aux_str.c_str(), static_cast(m_sem_count) + , winapi_semaphore_wrapper::MaxCount, sem_perm, created); + } + + virtual void close() + { + m_sem_wrapper.close(); + } + + virtual ~named_sem_callbacks() + {} + + private: + sem_count_t m_sem_count; + winapi_semaphore_wrapper& m_sem_wrapper; + }; + + /// @endcond +}; + +inline windows_named_semaphore::~windows_named_semaphore() +{ + named_sem_callbacks callbacks(m_sem_wrapper, m_sem_wrapper.value()); + m_named_sync.close(callbacks); +} + +inline void windows_named_semaphore::dont_close_on_destruction() +{} + +inline windows_named_semaphore::windows_named_semaphore + (create_only_t, const char *name, unsigned int initial_count, const permissions &perm) + : m_sem_wrapper() +{ + named_sem_callbacks callbacks(m_sem_wrapper, initial_count); + m_named_sync.open_or_create(DoCreate, name, perm, callbacks); +} + +inline windows_named_semaphore::windows_named_semaphore + (open_or_create_t, const char *name, unsigned int initial_count, const permissions &perm) + : m_sem_wrapper() +{ + named_sem_callbacks callbacks(m_sem_wrapper, initial_count); + m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); +} + +inline windows_named_semaphore::windows_named_semaphore(open_only_t, const char *name) + : m_sem_wrapper() +{ + named_sem_callbacks callbacks(m_sem_wrapper, 0); + m_named_sync.open_or_create(DoOpen, name, permissions(), callbacks); +} + +inline void windows_named_semaphore::post() +{ + m_sem_wrapper.post(); +} + +inline void windows_named_semaphore::wait() +{ + m_sem_wrapper.wait(); +} + +inline bool windows_named_semaphore::try_wait() +{ + return m_sem_wrapper.try_wait(); +} + +inline bool windows_named_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ + return m_sem_wrapper.timed_wait(abs_time); +} + +inline bool windows_named_semaphore::remove(const char *name) +{ + return windows_named_sync::remove(name); +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_WINDOWS_NAMED_SEMAPHORE_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/named_sync.hpp b/3party/boost/boost/interprocess/sync/windows/named_sync.hpp new file mode 100644 index 0000000000..41f299f8eb --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/named_sync.hpp @@ -0,0 +1,215 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_SYNC_HPP +#define BOOST_INTERPROCESS_WINDOWS_NAMED_SYNC_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class windows_named_sync_interface +{ + public: + virtual std::size_t get_data_size() const = 0; + virtual const void *buffer_with_final_data_to_file() = 0; + virtual const void *buffer_with_init_data_to_file() = 0; + virtual void *buffer_to_store_init_data_from_file() = 0; + virtual bool open(create_enum_t creation_type, const char *id_name) = 0; + virtual void close() = 0; + virtual ~windows_named_sync_interface() = 0; +}; + +inline windows_named_sync_interface::~windows_named_sync_interface() +{} + +class windows_named_sync +{ + /// @cond + + //Non-copyable + windows_named_sync(const windows_named_sync &); + windows_named_sync &operator=(const windows_named_sync &); + /// @endcond + + public: + windows_named_sync(); + void open_or_create(create_enum_t creation_type, const char *name, const permissions &perm, windows_named_sync_interface &sync_interface); + void close(windows_named_sync_interface &sync_interface); + + static bool remove(const char *name); + + /// @cond + private: + void *m_file_hnd; + + /// @endcond +}; + +inline windows_named_sync::windows_named_sync() + : m_file_hnd(winapi::invalid_handle_value) +{} + +inline void windows_named_sync::close(windows_named_sync_interface &sync_interface) +{ + const std::size_t buflen = sync_interface.get_data_size(); + const std::size_t sizeof_file_info = sizeof(sync_id::internal_type) + buflen; + winapi::interprocess_overlapped overlapped; + if(winapi::lock_file_ex + (m_file_hnd, winapi::lockfile_exclusive_lock, 0, sizeof_file_info, 0, &overlapped)){ + if(winapi::set_file_pointer_ex(m_file_hnd, sizeof(sync_id::internal_type), 0, winapi::file_begin)){ + const void *buf = sync_interface.buffer_with_final_data_to_file(); + + unsigned long written_or_read = 0; + if(winapi::write_file(m_file_hnd, buf, buflen, &written_or_read, 0)){ + //... + } + } + } + sync_interface.close(); + if(m_file_hnd != winapi::invalid_handle_value){ + winapi::close_handle(m_file_hnd); + m_file_hnd = winapi::invalid_handle_value; + } +} + +inline void windows_named_sync::open_or_create + ( create_enum_t creation_type + , const char *name + , const permissions &perm + , windows_named_sync_interface &sync_interface) +{ + std::string aux_str(name); + m_file_hnd = winapi::invalid_handle_value; + //Use a file to emulate POSIX lifetime semantics. After this logic + //we'll obtain the ID of the native handle to open in aux_str + { + create_tmp_and_clean_old_and_get_filename(name, aux_str); + //Create a file with required permissions. + m_file_hnd = winapi::create_file + ( aux_str.c_str() + , winapi::generic_read | winapi::generic_write + , creation_type == DoOpen ? winapi::open_existing : + (creation_type == DoCreate ? winapi::create_new : winapi::open_always) + , 0 + , (winapi::interprocess_security_attributes*)perm.get_permissions()); + + //Obtain OS error in case something has failed + error_info err; + bool success = false; + if(m_file_hnd != winapi::invalid_handle_value){ + //Now lock the file + const std::size_t buflen = sync_interface.get_data_size(); + typedef __int64 unique_id_type; + const std::size_t sizeof_file_info = sizeof(unique_id_type) + buflen; + winapi::interprocess_overlapped overlapped; + if(winapi::lock_file_ex + (m_file_hnd, winapi::lockfile_exclusive_lock, 0, sizeof_file_info, 0, &overlapped)){ + __int64 filesize = 0; + //Obtain the unique id to open the native semaphore. + //If file size was created + if(winapi::get_file_size(m_file_hnd, filesize)){ + unsigned long written_or_read = 0; + unique_id_type unique_id_val; + if(static_cast(filesize) != sizeof_file_info){ + winapi::set_end_of_file(m_file_hnd); + winapi::query_performance_counter(&unique_id_val); + const void *buf = sync_interface.buffer_with_init_data_to_file(); + //Write unique ID in file. This ID will be used to calculate the semaphore name + if(winapi::write_file(m_file_hnd, &unique_id_val, sizeof(unique_id_val), &written_or_read, 0) && + written_or_read == sizeof(unique_id_val) && + winapi::write_file(m_file_hnd, buf, buflen, &written_or_read, 0) && + written_or_read == buflen ){ + success = true; + } + winapi::get_file_size(m_file_hnd, filesize); + assert(std::size_t(filesize) == sizeof_file_info); + } + else{ + void *buf = sync_interface.buffer_to_store_init_data_from_file(); + if(winapi::read_file(m_file_hnd, &unique_id_val, sizeof(unique_id_val), &written_or_read, 0) && + written_or_read == sizeof(unique_id_val) && + winapi::read_file(m_file_hnd, buf, buflen, &written_or_read, 0) && + written_or_read == buflen ){ + success = true; + } + } + if(success){ + //Now create a global semaphore name based on the unique id + char unique_id_name[sizeof(unique_id_val)*2+1]; + std::size_t name_suffix_length = sizeof(unique_id_name); + bytes_to_str(&unique_id_val, sizeof(unique_id_val), &unique_id_name[0], name_suffix_length); + success = sync_interface.open(creation_type, unique_id_name); + } + } + + //Obtain OS error in case something has failed + err = system_error_code(); + + //If this fails we have no possible rollback so don't check the return + if(!winapi::unlock_file_ex(m_file_hnd, 0, sizeof_file_info, 0, &overlapped)){ + err = system_error_code(); + } + } + else{ + //Obtain OS error in case something has failed + err = system_error_code(); + } + } + else{ + err = system_error_code(); + } + + if(!success){ + if(m_file_hnd != winapi::invalid_handle_value){ + winapi::close_handle(m_file_hnd); + m_file_hnd = winapi::invalid_handle_value; + } + //Throw as something went wrong + throw interprocess_exception(err); + } + } +} + +inline bool windows_named_sync::remove(const char *name) +{ + try{ + //Make sure a temporary path is created for shared memory + std::string semfile; + ipcdetail::tmp_filename(name, semfile); + return winapi::unlink_file(semfile.c_str()); + } + catch(...){ + return false; + } +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_WINDOWS_NAMED_SYNC_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp new file mode 100644 index 0000000000..9565cb6fb4 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp @@ -0,0 +1,43 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_RECURSIVE_MUTEX_HPP +#define BOOST_INTERPROCESS_DETAIL_WINDOWS_RECURSIVE_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +//Windows mutex is already recursive +class windows_recursive_mutex + : public windows_mutex +{ + windows_recursive_mutex(const windows_recursive_mutex &); + windows_recursive_mutex &operator=(const windows_recursive_mutex &); + public: + windows_recursive_mutex() : windows_mutex() {} +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_WINDOWS_RECURSIVE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/semaphore.hpp b/3party/boost/boost/interprocess/sync/windows/semaphore.hpp new file mode 100644 index 0000000000..af336df48a --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/semaphore.hpp @@ -0,0 +1,112 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WINDOWS_SEMAPHORE_HPP +#define BOOST_INTERPROCESS_DETAIL_WINDOWS_SEMAPHORE_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class windows_semaphore +{ + windows_semaphore(const windows_semaphore &); + windows_semaphore &operator=(const windows_semaphore &); + public: + + windows_semaphore(unsigned int initialCount); + ~windows_semaphore(); + + void post(long release_count = 1); + void wait(); + bool try_wait(); + bool timed_wait(const boost::posix_time::ptime &abs_time); + + private: + const sync_id id_; +}; + +inline windows_semaphore::windows_semaphore(unsigned int initialCount) + : id_(this) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //Force smeaphore creation with the initial count + bool open_or_created; + handles.obtain_semaphore(this->id_, initialCount, &open_or_created); + //The semaphore must be created, never opened + assert(open_or_created); + assert(open_or_created && winapi::get_last_error() != winapi::error_already_exists); + (void)open_or_created; +} + +inline windows_semaphore::~windows_semaphore() +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + handles.destroy_handle(this->id_); +} + +inline void windows_semaphore::wait(void) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_semaphore_functions sem(handles.obtain_semaphore(this->id_, 0)); + sem.wait(); +} + +inline bool windows_semaphore::try_wait(void) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_semaphore_functions sem(handles.obtain_semaphore(this->id_, 0)); + return sem.try_wait(); +} + +inline bool windows_semaphore::timed_wait(const boost::posix_time::ptime &abs_time) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + //This can throw + winapi_semaphore_functions sem(handles.obtain_semaphore(this->id_, 0)); + return sem.timed_wait(abs_time); +} + +inline void windows_semaphore::post(long release_count) +{ + sync_handles &handles = + windows_intermodule_singleton::get(); + winapi_semaphore_functions sem(handles.obtain_semaphore(this->id_, 0)); + sem.post(release_count); +} + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_WINDOWS_SEMAPHORE_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp b/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp new file mode 100644 index 0000000000..0281da1266 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp @@ -0,0 +1,224 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_SYNC_UTILS_HPP +#define BOOST_INTERPROCESS_DETAIL_SYNC_UTILS_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +inline bool bytes_to_str(const void *mem, const std::size_t mem_length, char *out_str, std::size_t &out_length) +{ + const std::size_t need_mem = mem_length*2+1; + if(out_length < need_mem){ + out_length = need_mem; + return false; + } + + const char Characters [] = + { '0', '1', '2', '3', '4', '5', '6', '7' + , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + std::size_t char_counter = 0; + const char *buf = (const char *)mem; + for(std::size_t i = 0; i != mem_length; ++i){ + out_str[char_counter++] = Characters[(buf[i]&0xF0)>>4]; + out_str[char_counter++] = Characters[(buf[i]&0x0F)]; + } + out_str[char_counter] = 0; + return true; +} + +class sync_id +{ + public: + typedef __int64 internal_type; + sync_id(const void *map_addr) + : map_addr_(map_addr) + { winapi::query_performance_counter(&rand_); } + + explicit sync_id(internal_type val, const void *map_addr) + : map_addr_(map_addr) + { rand_ = val; } + + const internal_type &internal_pod() const + { return rand_; } + + internal_type &internal_pod() + { return rand_; } + + const void *map_addr() const + { return map_addr_; } + + friend std::size_t hash_value(const sync_id &m) + { return boost::hash_value(m.rand_); } + + friend bool operator==(const sync_id &l, const sync_id &r) + { return l.rand_ == r.rand_ && l.map_addr_ == r.map_addr_; } + + private: + internal_type rand_; + const void * const map_addr_; +}; + +class sync_handles +{ + public: + enum type { MUTEX, SEMAPHORE }; + + private: + struct address_less + { + bool operator()(sync_id const * const l, sync_id const * const r) const + { return l->map_addr() < r->map_addr(); } + }; + + typedef boost::unordered_map umap_type; + typedef boost::container::map map_type; + static const std::size_t LengthOfGlobal = sizeof("Global\\boost.ipc")-1; + static const std::size_t StrSize = LengthOfGlobal + (sizeof(sync_id)*2+1); + typedef char NameBuf[StrSize]; + + + void fill_name(NameBuf &name, const sync_id &id) + { + const char *n = "Global\\boost.ipc"; + std::size_t i = 0; + do{ + name[i] = n[i]; + ++i; + } while(n[i]); + std::size_t len = sizeof(NameBuf) - LengthOfGlobal; + bytes_to_str(&id.internal_pod(), sizeof(id.internal_pod()), &name[LengthOfGlobal], len); + } + + void throw_if_error(void *hnd_val) + { + if(!hnd_val){ + error_info err(winapi::get_last_error()); + throw interprocess_exception(err); + } + } + + void* open_or_create_semaphore(const sync_id &id, unsigned int initial_count) + { + NameBuf name; + fill_name(name, id); + permissions unrestricted_security; + unrestricted_security.set_unrestricted(); + winapi_semaphore_wrapper sem_wrapper; + bool created; + sem_wrapper.open_or_create + (name, (long)initial_count, winapi_semaphore_wrapper::MaxCount, unrestricted_security, created); + throw_if_error(sem_wrapper.handle()); + return sem_wrapper.release(); + } + + void* open_or_create_mutex(const sync_id &id) + { + NameBuf name; + fill_name(name, id); + permissions unrestricted_security; + unrestricted_security.set_unrestricted(); + winapi_mutex_wrapper mtx_wrapper; + mtx_wrapper.open_or_create(name, unrestricted_security); + throw_if_error(mtx_wrapper.handle()); + return mtx_wrapper.release(); + } + + public: + void *obtain_mutex(const sync_id &id, bool *popen_created = 0) + { + umap_type::value_type v(id, (void*)0); + scoped_lock lock(mtx_); + umap_type::iterator it = umap_.insert(v).first; + map_[&it->first] = it; + void *&hnd_val = it->second; + if(!hnd_val){ + hnd_val = open_or_create_mutex(id); + if(popen_created) *popen_created = true; + } + return hnd_val; + } + + void *obtain_semaphore(const sync_id &id, unsigned int initial_count, bool *popen_created = 0) + { + umap_type::value_type v(id, (void*)0); + scoped_lock lock(mtx_); + umap_type::iterator it = umap_.insert(v).first; + map_[&it->first] = it; + void *&hnd_val = it->second; + if(!hnd_val){ + hnd_val = open_or_create_semaphore(id, initial_count); + if(popen_created) *popen_created = true; + } + return hnd_val; + } + + void destroy_handle(const sync_id &id) + { + scoped_lock lock(mtx_); + umap_type::iterator it = umap_.find(id); + umap_type::iterator itend = umap_.end(); + + if(it != itend){ + winapi::close_handle(it->second); + const map_type::key_type &k = &it->first; + map_.erase(k); + umap_.erase(it); + } + } + + void destroy_syncs_in_range(const void *addr, std::size_t size) + { + sync_id low_id(addr); + sync_id hig_id(static_cast(addr)+size); + scoped_lock lock(mtx_); + map_type::iterator itlow(map_.lower_bound(&low_id)), + ithig(map_.lower_bound(&hig_id)); + while(itlow != ithig){ + void *hnd = umap_[*itlow->first]; + winapi::close_handle(hnd); + umap_.erase(*itlow->first); + itlow = map_.erase(itlow); + } + } + + private: + spin_mutex mtx_; + umap_type umap_; + map_type map_; +}; + + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_SYNC_UTILS_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp b/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp new file mode 100644 index 0000000000..0be96011cf --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp @@ -0,0 +1,163 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP +#define BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class winapi_mutex_functions +{ + /// @cond + + //Non-copyable + winapi_mutex_functions(const winapi_mutex_functions &); + winapi_mutex_functions &operator=(const winapi_mutex_functions &); + /// @endcond + + public: + winapi_mutex_functions(void *mtx_hnd) + : m_mtx_hnd(mtx_hnd) + {} + + void unlock() + { + winapi::release_mutex(m_mtx_hnd); + } + + void lock() + { + if(winapi::wait_for_single_object(m_mtx_hnd, winapi::infinite_time) != winapi::wait_object_0){ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + } + + bool try_lock() + { + unsigned long ret = winapi::wait_for_single_object(m_mtx_hnd, 0); + if(ret == winapi::wait_object_0){ + return true; + } + else if(ret == winapi::wait_timeout){ + return false; + } + else{ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + } + + bool timed_lock(const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + + unsigned long ret = winapi::wait_for_single_object + (m_mtx_hnd, (abs_time - microsec_clock::universal_time()).total_milliseconds()); + if(ret == winapi::wait_object_0){ + return true; + } + else if(ret == winapi::wait_timeout){ + return false; + } + else{ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + } + + /// @cond + protected: + void *m_mtx_hnd; + /// @endcond +}; + +//Swappable mutex wrapper +class winapi_mutex_wrapper + : public winapi_mutex_functions +{ + /// @cond + + //Non-copyable + winapi_mutex_wrapper(const winapi_mutex_wrapper &); + winapi_mutex_wrapper &operator=(const winapi_mutex_wrapper &); + /// @endcond + + public: + winapi_mutex_wrapper(void *mtx_hnd = winapi::invalid_handle_value) + : winapi_mutex_functions(mtx_hnd) + {} + + ~winapi_mutex_wrapper() + { this->close(); } + + void *release() + { + void *hnd = m_mtx_hnd; + m_mtx_hnd = winapi::invalid_handle_value; + return hnd; + } + + void *handle() const + { return m_mtx_hnd; } + + bool open_or_create(const char *name, const permissions &perm) + { + if(m_mtx_hnd == winapi::invalid_handle_value){ + m_mtx_hnd = winapi::open_or_create_mutex + ( name + , false + , (winapi::interprocess_security_attributes*)perm.get_permissions() + ); + return m_mtx_hnd != winapi::invalid_handle_value; + } + else{ + return false; + } + } + + void close() + { + if(m_mtx_hnd != winapi::invalid_handle_value){ + winapi::close_handle(m_mtx_hnd); + m_mtx_hnd = winapi::invalid_handle_value; + } + } + + void swap(winapi_mutex_wrapper &other) + { void *tmp = m_mtx_hnd; m_mtx_hnd = other.m_mtx_hnd; other.m_mtx_hnd = tmp; } +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp b/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp new file mode 100644 index 0000000000..2dd7845627 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp @@ -0,0 +1,198 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_WINAPI_SEMAPHORE_WRAPPER_HPP +#define BOOST_INTERPROCESS_DETAIL_WINAPI_SEMAPHORE_WRAPPER_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class winapi_semaphore_functions +{ + /// @cond + + //Non-copyable + winapi_semaphore_functions(const winapi_semaphore_functions &); + winapi_semaphore_functions &operator=(const winapi_semaphore_functions &); + /// @endcond + + public: + winapi_semaphore_functions(void *hnd) + : m_sem_hnd(hnd) + {} + + void post(long count = 1) + { + long prev_count; + winapi::release_semaphore(m_sem_hnd, count, &prev_count); + } + + void wait() + { + if(winapi::wait_for_single_object(m_sem_hnd, winapi::infinite_time) != winapi::wait_object_0){ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + } + + bool try_wait() + { + unsigned long ret = winapi::wait_for_single_object(m_sem_hnd, 0); + if(ret == winapi::wait_object_0){ + return true; + } + else if(ret == winapi::wait_timeout){ + return false; + } + else{ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + } + + bool timed_wait(const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(); + return true; + } + + unsigned long ret = winapi::wait_for_single_object + (m_sem_hnd, (abs_time - microsec_clock::universal_time()).total_milliseconds()); + if(ret == winapi::wait_object_0){ + return true; + } + else if(ret == winapi::wait_timeout){ + return false; + } + else{ + error_info err = system_error_code(); + throw interprocess_exception(err); + } + } + + long value() const + { + long count, limit; + if(!winapi::get_semaphore_info(m_sem_hnd, count, limit)) + return 0; + return count; + } + + long limit() const + { + long count, limit; + if(!winapi::get_semaphore_info(m_sem_hnd, count, limit)) + return 0; + return limit; + } + + /// @cond + protected: + void *m_sem_hnd; + /// @endcond +}; + + +//Swappable semaphore wrapper +class winapi_semaphore_wrapper + : public winapi_semaphore_functions +{ + winapi_semaphore_wrapper(const winapi_semaphore_wrapper &); + winapi_semaphore_wrapper &operator=(const winapi_semaphore_wrapper &); + + public: + + //Long is 32 bits in windows + static const long MaxCount = long(0x7FFFFFFF); + + winapi_semaphore_wrapper(void *hnd = winapi::invalid_handle_value) + : winapi_semaphore_functions(hnd) + {} + + ~winapi_semaphore_wrapper() + { this->close(); } + + void *release() + { + void *hnd = m_sem_hnd; + m_sem_hnd = winapi::invalid_handle_value; + return hnd; + } + + void *handle() const + { return m_sem_hnd; } + + bool open_or_create( const char *name + , long sem_count + , long max_count + , const permissions &perm + , bool &created) + { + if(m_sem_hnd == winapi::invalid_handle_value){ + m_sem_hnd = winapi::open_or_create_semaphore + ( name + , sem_count + , max_count + , (winapi::interprocess_security_attributes*)perm.get_permissions() + ); + created = winapi::get_last_error() != winapi::error_already_exists; + return m_sem_hnd != winapi::invalid_handle_value; + } + else{ + return false; + } + } + + bool open_semaphore(const char *name) + { + if(m_sem_hnd == winapi::invalid_handle_value){ + m_sem_hnd = winapi::open_semaphore(name); + return m_sem_hnd != winapi::invalid_handle_value; + } + else{ + return false; + } + } + + void close() + { + if(m_sem_hnd != winapi::invalid_handle_value){ + winapi::close_handle(m_sem_hnd); + m_sem_hnd = winapi::invalid_handle_value; + } + } + + void swap(winapi_semaphore_wrapper &other) + { void *tmp = m_sem_hnd; m_sem_hnd = other.m_sem_hnd; other.m_sem_hnd = tmp; } +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_WINAPI_SEMAPHORE_WRAPPER_HPP diff --git a/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp b/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp index 4573ba67fb..266e7c5dac 100644 --- a/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp @@ -1,3 +1,12 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2011. 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTERPROCESS_SYNC_XSI_SIMPLE_XSI_SEMAPHORE_HPP #define BOOST_INTERPROCESS_SYNC_XSI_SIMPLE_XSI_SEMAPHORE_HPP @@ -103,3 +112,5 @@ inline bool simple_sem_op(int id, int value, bool undo = true) } //namespace xsi { } //namespace interprocess { } //namespace boost { + +#endif //BOOST_INTERPROCESS_SYNC_XSI_SIMPLE_XSI_SEMAPHORE_HPP diff --git a/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp b/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp index 99161f23b0..485b1ac101 100644 --- a/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-2011. 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) // @@ -18,7 +18,7 @@ #error "This header can't be used in Windows operating systems" #endif -#include +#include #include #include #include @@ -49,7 +49,7 @@ class xsi_named_mutex /// @endcond public: - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(xsi_named_mutex) + BOOST_MOVABLE_BUT_NOT_COPYABLE(xsi_named_mutex) //!Default constructor. //!Represents an empty xsi_named_mutex. @@ -60,22 +60,22 @@ class xsi_named_mutex //!If the named mutex previously exists, it tries to open it. //!Otherwise throws an error. xsi_named_mutex(open_or_create_t, const char *path, boost::uint8_t id, int perm = 0666) - { this->priv_open_or_create(detail::DoOpenOrCreate, path, id, perm); } + { this->priv_open_or_create(ipcdetail::DoOpenOrCreate, path, id, perm); } - //!Moves the ownership of "moved"'s named mutex to *this. - //!After the call, "moved" does not represent any named mutex + //!Moves the ownership of "moved"'s named mutex to *this. + //!After the call, "moved" does not represent any named mutex //!Does not throw - xsi_named_mutex(BOOST_INTERPROCESS_RV_REF(xsi_named_mutex) moved) + xsi_named_mutex(BOOST_RV_REF(xsi_named_mutex) moved) { this->swap(moved); } //!Moves the ownership of "moved"'s named mutex to *this. - //!After the call, "moved" does not represent any named mutex. + //!After the call, "moved" does not represent any named mutex. //!Does not throw - xsi_named_mutex &operator=(BOOST_INTERPROCESS_RV_REF(xsi_named_mutex) moved) - { - xsi_named_mutex tmp(boost::interprocess::move(moved)); + xsi_named_mutex &operator=(BOOST_RV_REF(xsi_named_mutex) moved) + { + xsi_named_mutex tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_named_mutex. Does not throw @@ -112,7 +112,7 @@ class xsi_named_mutex void priv_close(); //!Closes a previously opened file mapping. Never throws. - bool priv_open_or_create( detail::create_enum_t type + bool priv_open_or_create( ipcdetail::create_enum_t type , const char *path , boost::uint8_t id , int perm); @@ -126,11 +126,11 @@ class xsi_named_mutex /// @cond -inline xsi_named_mutex::xsi_named_mutex() +inline xsi_named_mutex::xsi_named_mutex() : m_semid(-1), m_key(-1), m_id(0), m_perm(0), m_path() {} -inline xsi_named_mutex::~xsi_named_mutex() +inline xsi_named_mutex::~xsi_named_mutex() { this->priv_close(); } inline const char *xsi_named_mutex::get_path() const @@ -142,7 +142,7 @@ inline void xsi_named_mutex::swap(xsi_named_mutex &other) std::swap(m_id, other.m_id); std::swap(m_semid, other.m_semid); std::swap(m_perm, other.m_perm); - m_path.swap(other.m_path); + m_path.swap(other.m_path); } inline mapping_handle_t xsi_named_mutex::get_mapping_handle() const @@ -152,7 +152,7 @@ inline int xsi_named_mutex::get_permissions() const { return m_perm; } inline bool xsi_named_mutex::priv_open_or_create - (detail::create_enum_t type, const char *path, boost::uint8_t id, int perm) + (ipcdetail::create_enum_t type, const char *path, boost::uint8_t id, int perm) { key_t key; if(path){ diff --git a/3party/boost/boost/interprocess/windows_shared_memory.hpp b/3party/boost/boost/interprocess/windows_shared_memory.hpp index f1ccc41c25..76601bb363 100644 --- a/3party/boost/boost/interprocess/windows_shared_memory.hpp +++ b/3party/boost/boost/interprocess/windows_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-2011. 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) // @@ -52,7 +52,7 @@ class windows_shared_memory { /// @cond //Non-copyable and non-assignable - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(windows_shared_memory) + BOOST_MOVABLE_BUT_NOT_COPYABLE(windows_shared_memory) /// @endcond public: @@ -64,34 +64,34 @@ class windows_shared_memory //!with the access mode "mode". //!If the file previously exists, throws an error. windows_shared_memory(create_only_t, const char *name, mode_t mode, std::size_t size, const permissions& perm = permissions()) - { this->priv_open_or_create(detail::DoCreate, name, mode, size, perm); } + { this->priv_open_or_create(ipcdetail::DoCreate, name, mode, size, perm); } //!Tries to create a shared memory object with name "name" and mode "mode", with the //!access mode "mode". If the file previously exists, it tries to open it with mode "mode". //!Otherwise throws an error. windows_shared_memory(open_or_create_t, const char *name, mode_t mode, std::size_t size, const permissions& perm = permissions()) - { this->priv_open_or_create(detail::DoOpenOrCreate, name, mode, size, perm); } + { this->priv_open_or_create(ipcdetail::DoOpenOrCreate, name, mode, size, perm); } - //!Tries to open a shared memory object with name "name", with the access mode "mode". + //!Tries to open a shared memory object with name "name", with the access mode "mode". //!If the file does not previously exist, it throws an error. windows_shared_memory(open_only_t, const char *name, mode_t mode) - { this->priv_open_or_create(detail::DoOpen, name, mode, 0, permissions()); } + { this->priv_open_or_create(ipcdetail::DoOpen, name, mode, 0, permissions()); } - //!Moves the ownership of "moved"'s shared memory object to *this. - //!After the call, "moved" does not represent any shared memory object. + //!Moves the ownership of "moved"'s shared memory object to *this. + //!After the call, "moved" does not represent any shared memory object. //!Does not throw - windows_shared_memory(BOOST_INTERPROCESS_RV_REF(windows_shared_memory) moved) + windows_shared_memory(BOOST_RV_REF(windows_shared_memory) moved) : m_handle(0) { this->swap(moved); } //!Moves the ownership of "moved"'s shared memory to *this. - //!After the call, "moved" does not represent any shared memory. + //!After the call, "moved" does not represent any shared memory. //!Does not throw - windows_shared_memory &operator=(BOOST_INTERPROCESS_RV_REF(windows_shared_memory) moved) - { - windows_shared_memory tmp(boost::interprocess::move(moved)); + windows_shared_memory &operator=(BOOST_RV_REF(windows_shared_memory) moved) + { + windows_shared_memory tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps to shared_memory_objects. Does not throw @@ -119,7 +119,7 @@ class windows_shared_memory void priv_close(); //!Closes a previously opened file mapping. Never throws. - bool priv_open_or_create(detail::create_enum_t type, const char *filename, mode_t mode, std::size_t size, const permissions& perm = permissions()); + bool priv_open_or_create(ipcdetail::create_enum_t type, const char *filename, mode_t mode, std::size_t size, const permissions& perm = permissions()); void * m_handle; mode_t m_mode; @@ -129,21 +129,21 @@ class windows_shared_memory /// @cond -inline windows_shared_memory::windows_shared_memory() +inline windows_shared_memory::windows_shared_memory() : m_handle(0) {} -inline windows_shared_memory::~windows_shared_memory() +inline windows_shared_memory::~windows_shared_memory() { this->priv_close(); } inline const char *windows_shared_memory::get_name() const { return m_name.c_str(); } inline void windows_shared_memory::swap(windows_shared_memory &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_name.swap(other.m_name); + m_name.swap(other.m_name); } inline mapping_handle_t windows_shared_memory::get_mapping_handle() const @@ -153,26 +153,30 @@ inline mode_t windows_shared_memory::get_mode() const { return m_mode; } inline bool windows_shared_memory::priv_open_or_create - (detail::create_enum_t type, const char *filename, mode_t mode, std::size_t size, const permissions& perm) + (ipcdetail::create_enum_t type, const char *filename, mode_t mode, std::size_t size, const permissions& perm) { m_name = filename ? filename : ""; - unsigned long file_map_access = 0; + unsigned long protection = 0; unsigned long map_access = 0; switch(mode) { + //"protection" is for "create_file_mapping" + //"map_access" is for "open_file_mapping" + //Add section query (strange that read or access does not grant it...) + //to obtain the size of the mapping. copy_on_write is equal to section_query. case read_only: - file_map_access |= winapi::page_readonly; - map_access |= winapi::file_map_read; + protection |= winapi::page_readonly; + map_access |= winapi::file_map_read | winapi::section_query; break; case read_write: - file_map_access |= winapi::page_readwrite; - map_access |= winapi::file_map_write; + protection |= winapi::page_readwrite; + map_access |= winapi::file_map_write | winapi::section_query; break; case copy_on_write: - file_map_access |= winapi::page_writecopy; - map_access |= winapi::file_map_copy; + protection |= winapi::page_writecopy; + map_access |= winapi::file_map_copy; break; default: { @@ -183,17 +187,14 @@ inline bool windows_shared_memory::priv_open_or_create } switch(type){ - case detail::DoOpen: - m_handle = winapi::open_file_mapping - (map_access, filename); + case ipcdetail::DoOpen: + m_handle = winapi::open_file_mapping(map_access, filename); break; - case detail::DoCreate: - case detail::DoOpenOrCreate: + case ipcdetail::DoCreate: + case ipcdetail::DoOpenOrCreate: { - __int64 s = size; - unsigned long high_size(s >> 32), low_size((boost::uint32_t)s); m_handle = winapi::create_file_mapping - ( winapi::invalid_handle_value, file_map_access, high_size, low_size, filename + ( winapi::invalid_handle_value, protection, size, filename , (winapi::interprocess_security_attributes*)perm.get_permissions()); } break; @@ -204,7 +205,7 @@ inline bool windows_shared_memory::priv_open_or_create } } - if(!m_handle || (type == detail::DoCreate && winapi::get_last_error() == winapi::error_already_exists)){ + if(!m_handle || (type == ipcdetail::DoCreate && winapi::get_last_error() == winapi::error_already_exists)){ error_info err = system_error_code(); this->priv_close(); throw interprocess_exception(err); diff --git a/3party/boost/boost/interprocess/xsi_key.hpp b/3party/boost/boost/interprocess/xsi_key.hpp index addeff9210..ffd4c498df 100644 --- a/3party/boost/boost/interprocess/xsi_key.hpp +++ b/3party/boost/boost/interprocess/xsi_key.hpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/3party/boost/boost/interprocess/xsi_shared_memory.hpp b/3party/boost/boost/interprocess/xsi_shared_memory.hpp index 1d248d6dc9..e84d9b1c54 100644 --- a/3party/boost/boost/interprocess/xsi_shared_memory.hpp +++ b/3party/boost/boost/interprocess/xsi_shared_memory.hpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include @@ -49,7 +49,7 @@ class xsi_shared_memory { /// @cond //Non-copyable and non-assignable - BOOST_INTERPROCESS_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory) + BOOST_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory) /// @endcond public: @@ -66,33 +66,33 @@ class xsi_shared_memory //!Creates a new XSI shared memory from 'key', with size "size" and permissions "perm". //!If the shared memory previously exists, throws an error. xsi_shared_memory(create_only_t, const xsi_key &key, std::size_t size, const permissions& perm = permissions()) - { this->priv_open_or_create(detail::DoCreate, key, perm, size); } + { this->priv_open_or_create(ipcdetail::DoCreate, key, perm, size); } //!Opens an existing shared memory with identifier 'key' or creates a new XSI shared memory from //!identifier 'key', with size "size" and permissions "perm". xsi_shared_memory(open_or_create_t, const xsi_key &key, std::size_t size, const permissions& perm = permissions()) - { this->priv_open_or_create(detail::DoOpenOrCreate, key, perm, size); } + { this->priv_open_or_create(ipcdetail::DoOpenOrCreate, key, perm, size); } //!Tries to open a XSI shared memory with identifier 'key' //!If the shared memory does not previously exist, it throws an error. xsi_shared_memory(open_only_t, const xsi_key &key) - { this->priv_open_or_create(detail::DoOpen, key, permissions(), 0); } + { this->priv_open_or_create(ipcdetail::DoOpen, key, permissions(), 0); } - //!Moves the ownership of "moved"'s shared memory object to *this. - //!After the call, "moved" does not represent any shared memory object. + //!Moves the ownership of "moved"'s shared memory object to *this. + //!After the call, "moved" does not represent any shared memory object. //!Does not throw - xsi_shared_memory(BOOST_INTERPROCESS_RV_REF(xsi_shared_memory) moved) + xsi_shared_memory(BOOST_RV_REF(xsi_shared_memory) moved) : m_shmid(-1) { this->swap(moved); } //!Moves the ownership of "moved"'s shared memory to *this. - //!After the call, "moved" does not represent any shared memory. + //!After the call, "moved" does not represent any shared memory. //!Does not throw - xsi_shared_memory &operator=(BOOST_INTERPROCESS_RV_REF(xsi_shared_memory) moved) - { - xsi_shared_memory tmp(boost::interprocess::move(moved)); + xsi_shared_memory &operator=(BOOST_RV_REF(xsi_shared_memory) moved) + { + xsi_shared_memory tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_shared_memorys. Does not throw @@ -119,7 +119,7 @@ class xsi_shared_memory private: //!Closes a previously opened file mapping. Never throws. - bool priv_open_or_create( detail::create_enum_t type + bool priv_open_or_create( ipcdetail::create_enum_t type , const xsi_key &key , const permissions& perm , std::size_t size); @@ -129,11 +129,11 @@ class xsi_shared_memory /// @cond -inline xsi_shared_memory::xsi_shared_memory() +inline xsi_shared_memory::xsi_shared_memory() : m_shmid(-1) {} -inline xsi_shared_memory::~xsi_shared_memory() +inline xsi_shared_memory::~xsi_shared_memory() {} inline int xsi_shared_memory::get_shmid() const @@ -148,20 +148,20 @@ inline mapping_handle_t xsi_shared_memory::get_mapping_handle() const { mapping_handle_t mhnd = { m_shmid, true}; return mhnd; } inline bool xsi_shared_memory::priv_open_or_create - (detail::create_enum_t type, const xsi_key &key, const permissions& permissions, std::size_t size) + (ipcdetail::create_enum_t type, const xsi_key &key, const permissions& permissions, std::size_t size) { int perm = permissions.get_permissions(); perm &= 0x01FF; int shmflg = perm; switch(type){ - case detail::DoOpen: + case ipcdetail::DoOpen: shmflg |= 0; break; - case detail::DoCreate: + case ipcdetail::DoCreate: shmflg |= IPC_CREAT | IPC_EXCL; break; - case detail::DoOpenOrCreate: + case ipcdetail::DoOpenOrCreate: shmflg |= IPC_CREAT; break; default: @@ -173,7 +173,7 @@ inline bool xsi_shared_memory::priv_open_or_create int ret = ::shmget(key.get_key(), size, shmflg); int shmid = ret; - if((type == detail::DoOpen) && (-1 != ret)){ + if((type == ipcdetail::DoOpen) && (-1 != ret)){ //Now get the size ::shmid_ds xsi_ds; ret = ::shmctl(ret, IPC_STAT, &xsi_ds); diff --git a/3party/boost/boost/intrusive/any_hook.hpp b/3party/boost/boost/intrusive/any_hook.hpp index b1b0194757..7d60de001a 100644 --- a/3party/boost/boost/intrusive/any_hook.hpp +++ b/3party/boost/boost/intrusive/any_hook.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -19,7 +19,7 @@ #include #include #include -#include +#include namespace boost { namespace intrusive { @@ -50,7 +50,7 @@ struct make_any_base_hook Options... #endif >::type packed_options; - + typedef detail::generic_hook < get_any_node_algo , typename packed_options::tag @@ -63,13 +63,13 @@ struct make_any_base_hook //! Derive a class from this hook in order to store objects of that class //! in an intrusive container. -//! +//! //! The hook admits the following options: \c tag<>, \c void_pointer<> and //! \c link_mode<>. //! -//! \c tag<> defines a tag to identify the node. -//! The same tag value can be used in different classes, but if a class is -//! derived from more than one \c any_base_hook, then each \c any_base_hook needs its +//! \c tag<> defines a tag to identify the node. +//! The same tag value can be used in different classes, but if a class is +//! derived from more than one \c any_base_hook, then each \c any_base_hook needs its //! unique tag. //! //! \c link_mode<> will specify the linking mode of the hook (\c normal_link, \c safe_link). @@ -94,27 +94,27 @@ class any_base_hook public: //! Effects: If link_mode is or \c safe_link //! initializes the node to an unlinked state. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. any_base_hook(); //! Effects: If link_mode is or \c safe_link //! initializes the node to an unlinked state. The argument is ignored. - //! - //! Throws: Nothing. - //! + //! + //! Throws: Nothing. + //! //! Rationale: Providing a copy-constructor - //! makes classes using the hook STL-compliant without forcing the + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. any_base_hook(const any_base_hook& ); //! Effects: Empty function. The argument is ignored. - //! - //! Throws: Nothing. - //! - //! Rationale: Providing an assignment operator - //! makes classes using the hook STL-compliant without forcing the + //! + //! Throws: Nothing. + //! + //! Rationale: Providing an assignment operator + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. any_base_hook& operator=(const any_base_hook& ); @@ -122,17 +122,17 @@ class any_base_hook //! Effects: If link_mode is \c normal_link, the destructor does //! nothing (ie. no code is generated). If link_mode is \c safe_link and the //! object is stored in a container an assertion is raised. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. ~any_base_hook(); //! Precondition: link_mode must be \c safe_link. //! //! Returns: true, if the node belongs to a container, false - //! otherwise. This function can be used to test whether \c container::iterator_to - //! will return a valid iterator. + //! otherwise. This function can be used to test whether \c container::iterator_to + //! will return a valid iterator. //! - //! Complexity: Constant + //! Complexity: Constant bool is_linked() const; #endif }; @@ -148,7 +148,7 @@ struct make_any_member_hook { /// @cond typedef typename pack_options - < hook_defaults, + < hook_defaults, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) O1, O2, O3 #else @@ -168,10 +168,10 @@ struct make_any_member_hook //! Store this hook in a class to be inserted //! in an intrusive container. -//! +//! //! The hook admits the following options: \c void_pointer<> and //! \c link_mode<>. -//! +//! //! \c link_mode<> will specify the linking mode of the hook (\c normal_link or \c safe_link). //! //! \c void_pointer<> is the pointer type that will be used internally in the hook @@ -194,27 +194,27 @@ class any_member_hook public: //! Effects: If link_mode is or \c safe_link //! initializes the node to an unlinked state. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. any_member_hook(); //! Effects: If link_mode is or \c safe_link //! initializes the node to an unlinked state. The argument is ignored. - //! - //! Throws: Nothing. - //! + //! + //! Throws: Nothing. + //! //! Rationale: Providing a copy-constructor - //! makes classes using the hook STL-compliant without forcing the + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. any_member_hook(const any_member_hook& ); //! Effects: Empty function. The argument is ignored. - //! - //! Throws: Nothing. - //! - //! Rationale: Providing an assignment operator - //! makes classes using the hook STL-compliant without forcing the + //! + //! Throws: Nothing. + //! + //! Rationale: Providing an assignment operator + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. any_member_hook& operator=(const any_member_hook& ); @@ -222,17 +222,17 @@ class any_member_hook //! Effects: If link_mode is \c normal_link, the destructor does //! nothing (ie. no code is generated). If link_mode is \c safe_link and the //! object is stored in a container an assertion is raised. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. ~any_member_hook(); //! Precondition: link_mode must be \c safe_link. //! //! Returns: true, if the node belongs to a container, false - //! otherwise. This function can be used to test whether \c container::iterator_to - //! will return a valid iterator. + //! otherwise. This function can be used to test whether \c container::iterator_to + //! will return a valid iterator. //! - //! Complexity: Constant + //! Complexity: Constant bool is_linked() const; #endif }; @@ -244,15 +244,15 @@ namespace detail{ template struct any_to_get_base_pointer_type { - typedef typename pointer_to_other - ::type type; + typedef typename pointer_traits::template + rebind_pointer::type type; }; template struct any_to_get_member_pointer_type { - typedef typename pointer_to_other - ::type type; + typedef typename pointer_traits + ::template rebind_pointer::type type; }; //!This option setter specifies that the container @@ -336,8 +336,8 @@ struct any_to_unordered_set_hook {}; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/avl_set.hpp b/3party/boost/boost/intrusive/avl_set.hpp index 1c13c624c3..91e2dbbdf0 100644 --- a/3party/boost/boost/intrusive/avl_set.hpp +++ b/3party/boost/boost/intrusive/avl_set.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -16,14 +16,15 @@ #include #include #include +#include #include namespace boost { namespace intrusive { -//! The class template avl_set is an intrusive container, that mimics most of +//! The class template avl_set is an intrusive container, that mimics most of //! the interface of std::set as described in the C++ standard. -//! +//! //! The template parameter \c T is the type to be managed by the container. //! The user can specify additional options and if no options are provided //! default options are used. @@ -42,12 +43,8 @@ class avl_set_impl /// @cond typedef avltree_impl tree_type; //! This class is - //! non-copyable - avl_set_impl (const avl_set_impl&); - - //! This class is - //! non-assignable - avl_set_impl &operator =(const avl_set_impl&); + //! movable + BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set_impl) typedef tree_type implementation_defined; /// @endcond @@ -82,30 +79,30 @@ class avl_set_impl /// @endcond public: - //! Effects: Constructs an empty avl_set. - //! - //! Complexity: Constant. - //! + //! Effects: Constructs an empty avl_set. + //! + //! Complexity: Constant. + //! //! Throws: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor of the value_compare object throws. + //! or the copy constructor of the value_compare object throws. avl_set_impl( const value_compare &cmp = value_compare() - , const value_traits &v_traits = value_traits()) + , const value_traits &v_traits = value_traits()) : tree_(cmp, v_traits) {} - //! Requires: Dereferencing iterator must yield an lvalue of type value_type. + //! Requires: Dereferencing iterator must yield an lvalue of type value_type. //! cmp must be a comparison function that induces a strict weak ordering. - //! - //! Effects: Constructs an empty avl_set and inserts elements from + //! + //! Effects: Constructs an empty avl_set and inserts elements from //! [b, e). - //! - //! Complexity: Linear in N if [b, e) is already sorted using + //! + //! Complexity: Linear in N if [b, e) is already sorted using //! comp and otherwise N * log N, where N is std::distance(last, first). - //! + //! //! Throws: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor/operator() of the value_compare object throws. + //! or the copy constructor/operator() of the value_compare object throws. template avl_set_impl( Iterator b, Iterator e , const value_compare &cmp = value_compare() @@ -113,125 +110,136 @@ class avl_set_impl : tree_(true, b, e, cmp, v_traits) {} - //! Effects: Detaches all elements from this. The objects in the avl_set + //! Effects: to-do + //! + avl_set_impl(BOOST_RV_REF(avl_set_impl) x) + : tree_(::boost::move(x.tree_)) + {} + + //! Effects: to-do + //! + avl_set_impl& operator=(BOOST_RV_REF(avl_set_impl) x) + { tree_ = ::boost::move(x.tree_); return *this; } + + //! Effects: Detaches all elements from this. The objects in the avl_set //! are not deleted (i.e. no destructors are called). - //! + //! //! Complexity: Linear to the number of elements on the container. //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise. - //! + //! //! Throws: Nothing. - ~avl_set_impl() + ~avl_set_impl() {} //! Effects: Returns an iterator pointing to the beginning of the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator begin() { return tree_.begin(); } //! Effects: Returns a const_iterator pointing to the beginning of the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator begin() const { return tree_.begin(); } //! Effects: Returns a const_iterator pointing to the beginning of the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator cbegin() const { return tree_.cbegin(); } //! Effects: Returns an iterator pointing to the end of the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator end() { return tree_.end(); } //! Effects: Returns a const_iterator pointing to the end of the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator end() const { return tree_.end(); } //! Effects: Returns a const_iterator pointing to the end of the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator cend() const { return tree_.cend(); } //! Effects: Returns a reverse_iterator pointing to the beginning of the //! reversed avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. reverse_iterator rbegin() { return tree_.rbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator rbegin() const { return tree_.rbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator crbegin() const { return tree_.crbegin(); } //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. reverse_iterator rend() { return tree_.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator rend() const { return tree_.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator crend() const { return tree_.crend(); } //! Precondition: end_iterator must be a valid end iterator //! of avl_set. - //! + //! //! Effects: Returns a const reference to the avl_set associated to the end iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. static avl_set_impl &container_from_end_iterator(iterator end_iterator) { @@ -242,11 +250,11 @@ class avl_set_impl //! Precondition: end_iterator must be a valid end const_iterator //! of avl_set. - //! + //! //! Effects: Returns a const reference to the set associated to the end iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. static const avl_set_impl &container_from_end_iterator(const_iterator end_iterator) { @@ -256,11 +264,11 @@ class avl_set_impl } //! Precondition: it must be a valid iterator of set. - //! + //! //! Effects: Returns a reference to the set associated to the iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Logarithmic. static avl_set_impl &container_from_iterator(iterator it) { @@ -270,11 +278,11 @@ class avl_set_impl } //! Precondition: it must be a valid const_iterator of set. - //! + //! //! Effects: Returns a const reference to the set associated to the iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Logarithmic. static const avl_set_impl &container_from_iterator(const_iterator it) { @@ -284,42 +292,42 @@ class avl_set_impl } //! Effects: Returns the key_compare object used by the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If key_compare copy-constructor throws. key_compare key_comp() const { return tree_.value_comp(); } //! Effects: Returns the value_compare object used by the avl_set. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If value_compare copy-constructor throws. value_compare value_comp() const { return tree_.value_comp(); } //! Effects: Returns true is the container is empty. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. bool empty() const { return tree_.empty(); } //! Effects: Returns the number of elements stored in the avl_set. - //! + //! //! Complexity: Linear to elements contained in *this if, //! constant-time size option is enabled. Constant-time otherwise. - //! + //! //! Throws: Nothing. size_type size() const { return tree_.size(); } //! Effects: Swaps the contents of two sets. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If the swap() call for the comparison functor //! found using ADL throws. Strong guarantee. void swap(avl_set_impl& other) @@ -329,22 +337,22 @@ class avl_set_impl //! Cloner should yield to nodes equivalent to the original nodes. //! //! Effects: Erases all the elements from *this - //! calling Disposer::operator()(pointer), clones all the + //! calling Disposer::operator()(pointer), clones all the //! elements from src calling Cloner::operator()(const_reference ) //! and inserts them on *this. Copies the predicate from the source container. //! //! If cloner throws, all cloned elements are unlinked and disposed //! calling Disposer::operator()(pointer). - //! + //! //! Complexity: Linear to erased plus inserted elements. - //! + //! //! Throws: If cloner throws or predicate copy assignment throws. Basic guarantee. template void clone_from(const avl_set_impl &src, Cloner cloner, Disposer disposer) { tree_.clone_from(src.tree_, cloner, disposer); } //! Requires: value must be an lvalue - //! + //! //! Effects: Treaps to inserts value into the avl_set. //! //! Returns: If the value @@ -352,39 +360,39 @@ class avl_set_impl //! iterator to the new value and true. If there is an equivalent value //! returns a pair containing an iterator to the already present value //! and false. - //! + //! //! Complexity: Average complexity for insert element is at //! most logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. Strong guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. std::pair insert(reference value) { return tree_.insert_unique(value); } //! Requires: value must be an lvalue - //! - //! Effects: Treaps to to insert x into the avl_set, using "hint" + //! + //! Effects: Treaps to to insert x into the avl_set, using "hint" //! as a hint to where it will be inserted. //! - //! Returns: An iterator that points to the position where the + //! Returns: An iterator that points to the position where the //! new element was inserted into the avl_set. - //! + //! //! Complexity: Logarithmic in general, but it's amortized //! constant time if t is inserted immediately before hint. - //! + //! //! Throws: If the internal value_compare ordering function throws. Strong guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. iterator insert(const_iterator hint, reference value) { return tree_.insert_unique(hint, value); } - //! Requires: key_value_comp must be a comparison function that induces + //! Requires: key_value_comp must be a comparison function that induces //! the same strict weak ordering as value_compare. The difference is that //! key_value_comp compares an arbitrary key with the contained values. - //! + //! //! Effects: Checks if a value can be inserted in the avl_set, using //! a user provided key instead of the value itself. //! @@ -393,16 +401,16 @@ class avl_set_impl //! and false. If the value can be inserted returns true in the returned //! pair boolean and fills "commit_data" that is meant to be used with //! the "insert_commit" function. - //! + //! //! Complexity: Average complexity is at most logarithmic. //! //! Throws: If the key_value_comp ordering function throws. Strong guarantee. - //! + //! //! Notes: This function is used to improve performance when constructing //! a value_type is expensive: if there is an equivalent value //! the constructed object must be discarded. Many times, the part of the //! node that is used to impose the order is much cheaper to construct - //! than the value_type and this function offers the possibility to use that + //! than the value_type and this function offers the possibility to use that //! part to check if the insertion will be successful. //! //! If the check is successful, the user can construct the value_type and use @@ -416,12 +424,12 @@ class avl_set_impl (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data) { return tree_.insert_unique_check(key, key_value_comp, commit_data); } - //! Requires: key_value_comp must be a comparison function that induces + //! Requires: key_value_comp must be a comparison function that induces //! the same strict weak ordering as value_compare. The difference is that //! key_value_comp compares an arbitrary key with the contained values. - //! + //! //! Effects: Checks if a value can be inserted in the avl_set, using - //! a user provided key instead of the value itself, using "hint" + //! a user provided key instead of the value itself, using "hint" //! as a hint to where it will be inserted. //! //! Returns: If there is an equivalent value @@ -429,23 +437,23 @@ class avl_set_impl //! and false. If the value can be inserted returns true in the returned //! pair boolean and fills "commit_data" that is meant to be used with //! the "insert_commit" function. - //! + //! //! Complexity: Logarithmic in general, but it's amortized //! constant time if t is inserted immediately before hint. //! //! Throws: If the key_value_comp ordering function throws. Strong guarantee. - //! + //! //! Notes: This function is used to improve performance when constructing //! a value_type is expensive: if there is an equivalent value //! the constructed object must be discarded. Many times, the part of the //! constructing that is used to impose the order is much cheaper to construct - //! than the value_type and this function offers the possibility to use that key + //! than the value_type and this function offers the possibility to use that key //! to check if the insertion will be successful. //! //! If the check is successful, the user can construct the value_type and use //! "insert_commit" to insert the object in constant-time. This can give a total //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)). - //! + //! //! "commit_data" remains valid for a subsequent "insert_commit" only if no more //! objects are inserted or erased from the avl_set. template @@ -458,33 +466,33 @@ class avl_set_impl //! must have been obtained from a previous call to "insert_check". //! No objects should have been inserted or erased from the avl_set between //! the "insert_check" that filled "commit_data" and the call to "insert_commit". - //! + //! //! Effects: Inserts the value in the avl_set using the information obtained //! from the "commit_data" that a previous "insert_check" filled. //! //! Returns: An iterator to the newly inserted object. - //! + //! //! Complexity: Constant time. //! //! Throws: Nothing. - //! + //! //! Notes: This function has only sense if a "insert_check" has been //! previously executed to fill "commit_data". No value should be inserted or //! erased between the "insert_check" and "insert_commit" calls. iterator insert_commit(reference value, const insert_commit_data &commit_data) { return tree_.insert_unique_commit(value, commit_data); } - //! Requires: Dereferencing iterator must yield an lvalue + //! Requires: Dereferencing iterator must yield an lvalue //! of type value_type. - //! + //! //! Effects: Inserts a range into the avl_set. - //! + //! //! Complexity: Insert range is in general O(N * log(N)), where N is the //! size of the range. However, it is linear in N if the range is already sorted //! by value_comp(). - //! + //! //! Throws: If the internal value_compare ordering function throws. Basic guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. template @@ -497,11 +505,11 @@ class avl_set_impl //! inserted key according to the predicate. //! //! Effects: Inserts x into the tree before "pos". - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if "pos" is not //! the successor of "value" or "value" is not unique tree ordering and uniqueness //! invariants will be broken respectively. @@ -514,11 +522,11 @@ class avl_set_impl //! any inserted key according to the predicate. //! //! Effects: Inserts x into the tree in the last position. - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if value is //! less than or equal to the greatest inserted key tree ordering invariant will be broken. //! This function is slightly more efficient than using "insert_before". @@ -531,11 +539,11 @@ class avl_set_impl //! than any inserted key according to the predicate. //! //! Effects: Inserts x into the tree in the first position. - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if value is //! greater than or equal to the the mimum inserted key tree ordering or uniqueness //! invariants will be broken. @@ -545,41 +553,41 @@ class avl_set_impl void push_front(reference value) { tree_.push_front(value); } - //! Effects: Erases the element pointed to by pos. - //! + //! Effects: Erases the element pointed to by pos. + //! //! Complexity: Average complexity is constant time. - //! + //! //! Returns: An iterator to the element after the erased element. //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. iterator erase(const_iterator i) { return tree_.erase(i); } - //! Effects: Erases the range pointed to by b end e. - //! - //! Complexity: Average complexity for erase range is at most + //! Effects: Erases the range pointed to by b end e. + //! + //! Complexity: Average complexity for erase range is at most //! O(log(size() + N)), where N is the number of elements in the range. - //! + //! //! Returns: An iterator to the element after the erased elements. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. iterator erase(const_iterator b, const_iterator e) { return tree_.erase(b, e); } //! Effects: Erases all the elements with the given value. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size()) + this->count(value)). - //! + //! //! Throws: If the internal value_compare ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. size_type erase(const_reference value) @@ -587,13 +595,13 @@ class avl_set_impl //! Effects: Erases all the elements that compare equal with //! the given key and the given comparison functor. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + this->count(key, comp)). - //! + //! //! Throws: If the comp ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -606,16 +614,16 @@ class avl_set_impl //! Requires: Disposer::operator()(pointer) shouldn't throw. //! - //! Effects: Erases the element pointed to by pos. + //! Effects: Erases the element pointed to by pos. //! Disposer::operator()(pointer) is called for the removed element. - //! - //! Complexity: Average complexity for erase element is constant time. - //! + //! + //! Complexity: Average complexity for erase element is constant time. + //! //! Returns: An iterator to the element after the erased element. - //! + //! //! Throws: Nothing. - //! - //! Note: Invalidates the iterators + //! + //! Note: Invalidates the iterators //! to the erased elements. template iterator erase_and_dispose(const_iterator i, Disposer disposer) @@ -631,14 +639,14 @@ class avl_set_impl //! //! Effects: Erases the range pointed to by b end e. //! Disposer::operator()(pointer) is called for the removed elements. - //! - //! Complexity: Average complexity for erase range is at most + //! + //! Complexity: Average complexity for erase range is at most //! O(log(size() + N)), where N is the number of elements in the range. - //! + //! //! Returns: An iterator to the element after the erased elements. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators //! to the erased elements. template @@ -649,13 +657,13 @@ class avl_set_impl //! //! Effects: Erases all the elements with the given value. //! Disposer::operator()(pointer) is called for the removed elements. - //! + //! //! Throws: If the internal value_compare ordering function throws. - //! + //! //! Complexity: O(log(size() + this->count(value)). Basic guarantee. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -669,11 +677,11 @@ class avl_set_impl //! Disposer::operator()(pointer) is called for the removed elements. //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + this->count(key, comp)). - //! + //! //! Throws: If comp ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators //! to the erased elements. template @@ -685,26 +693,26 @@ class avl_set_impl { return tree_.erase_and_dispose(key, comp, disposer); } //! Effects: Erases all the elements of the container. - //! + //! //! Complexity: Linear to the number of elements on the container. //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. void clear() { return tree_.clear(); } //! Requires: Disposer::operator()(pointer) shouldn't throw. - //! + //! //! Effects: Erases all the elements of the container. - //! + //! //! Complexity: Linear to the number of elements on the container. //! Disposer::operator()(pointer) is called for the removed elements. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -712,20 +720,20 @@ class avl_set_impl { return tree_.clear_and_dispose(disposer); } //! Effects: Returns the number of contained elements with the given key - //! + //! //! Complexity: Logarithmic to the number of elements contained plus lineal //! to number of objects with the given key. - //! + //! //! Throws: If the internal value_compare ordering function throws. size_type count(const_reference value) const { return tree_.find(value) != end(); } //! Effects: Returns the number of contained elements with the same key //! compared with the given comparison functor. - //! + //! //! Complexity: Logarithmic to the number of elements contained plus lineal //! to number of objects with the given key. - //! + //! //! Throws: If comp ordering function throws. template size_type count(const KeyType& key, KeyValueCompare comp) const @@ -733,9 +741,9 @@ class avl_set_impl //! Effects: Returns an iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. iterator lower_bound(const_reference value) { return tree_.lower_bound(value); } @@ -745,13 +753,13 @@ class avl_set_impl //! that is used in the ordering functor. //! //! Effects: Returns an iterator to the first element whose - //! key according to the comparison functor is not less than k or + //! key according to the comparison functor is not less than k or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. - //! + //! //! Note: This function is used when constructing a value_type //! is expensive and the value_type can be compared with a cheaper //! key type. Usually this key is part of the value_type. @@ -761,9 +769,9 @@ class avl_set_impl //! Effects: Returns a const iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. const_iterator lower_bound(const_reference value) const { return tree_.lower_bound(value); } @@ -773,13 +781,13 @@ class avl_set_impl //! that is used in the ordering functor. //! //! Effects: Returns a const_iterator to the first element whose - //! key according to the comparison functor is not less than k or + //! key according to the comparison functor is not less than k or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. - //! + //! //! Note: This function is used when constructing a value_type //! is expensive and the value_type can be compared with a cheaper //! key type. Usually this key is part of the value_type. @@ -789,9 +797,9 @@ class avl_set_impl //! Effects: Returns an iterator to the first element whose //! key is greater than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. iterator upper_bound(const_reference value) { return tree_.upper_bound(value); } @@ -801,11 +809,11 @@ class avl_set_impl //! that is used in the ordering functor. //! //! Effects: Returns an iterator to the first element whose - //! key according to the comparison functor is greater than key or + //! key according to the comparison functor is greater than key or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -817,9 +825,9 @@ class avl_set_impl //! Effects: Returns an iterator to the first element whose //! key is greater than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. const_iterator upper_bound(const_reference value) const { return tree_.upper_bound(value); } @@ -829,11 +837,11 @@ class avl_set_impl //! that is used in the ordering functor. //! //! Effects: Returns a const_iterator to the first element whose - //! key according to the comparison functor is greater than key or + //! key according to the comparison functor is greater than key or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -843,11 +851,11 @@ class avl_set_impl const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const { return tree_.upper_bound(key, comp); } - //! Effects: Finds an iterator to the first element whose value is + //! Effects: Finds an iterator to the first element whose value is //! "value" or end() if that element does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. iterator find(const_reference value) { return tree_.find(value); } @@ -856,12 +864,12 @@ class avl_set_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds an iterator to the first element whose key is - //! "key" according to the comparison functor or end() if that element + //! Effects: Finds an iterator to the first element whose key is + //! "key" according to the comparison functor or end() if that element //! does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -871,11 +879,11 @@ class avl_set_impl iterator find(const KeyType& key, KeyValueCompare comp) { return tree_.find(key, comp); } - //! Effects: Finds a const_iterator to the first element whose value is + //! Effects: Finds a const_iterator to the first element whose value is //! "value" or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. const_iterator find(const_reference value) const { return tree_.find(value); } @@ -884,12 +892,12 @@ class avl_set_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds a const_iterator to the first element whose key is - //! "key" according to the comparison functor or end() if that element + //! Effects: Finds a const_iterator to the first element whose key is + //! "key" according to the comparison functor or end() if that element //! does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -902,9 +910,9 @@ class avl_set_impl //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. std::pair equal_range(const_reference value) { return tree_.equal_range(value); } @@ -913,13 +921,13 @@ class avl_set_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds a range containing all elements whose key is k - //! according to the comparison functor or an empty range + //! Effects: Finds a range containing all elements whose key is k + //! according to the comparison functor or an empty range //! that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -932,9 +940,9 @@ class avl_set_impl //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. std::pair equal_range(const_reference value) const @@ -944,13 +952,13 @@ class avl_set_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds a range containing all elements whose key is k - //! according to the comparison functor or an empty range + //! Effects: Finds a range containing all elements whose key is k + //! according to the comparison functor or an empty range //! that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -961,16 +969,101 @@ class avl_set_impl equal_range(const KeyType& key, KeyValueCompare comp) const { return tree_.equal_range(key, comp); } + //! Requires: 'lower_value' must not be greater than 'upper_value'. If + //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If the predicate throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_value and upper_value. + std::pair bounded_range + (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) + { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); } + + //! Requires: KeyValueCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise + //! + //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + std::pair bounded_range + (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) + { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); } + + //! Requires: 'lower_value' must not be greater than 'upper_value'. If + //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If the predicate throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_value and upper_value. + std::pair + bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const + { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); } + + //! Requires: KeyValueCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise + //! + //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + std::pair + bounded_range + (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const + { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); } + //! Requires: value must be an lvalue and shall be in a avl_set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid iterator i belonging to the avl_set //! that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This static function is available only if the value traits //! is stateless. static iterator s_iterator_to(reference value) @@ -978,14 +1071,14 @@ class avl_set_impl //! Requires: value must be an lvalue and shall be in a avl_set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid const_iterator i belonging to the //! avl_set that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This static function is available only if the value traits //! is stateless. static const_iterator s_iterator_to(const_reference value) @@ -993,48 +1086,48 @@ class avl_set_impl //! Requires: value must be an lvalue and shall be in a avl_set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid iterator i belonging to the avl_set //! that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator iterator_to(reference value) { return tree_.iterator_to(value); } //! Requires: value must be an lvalue and shall be in a avl_set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid const_iterator i belonging to the //! avl_set that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator iterator_to(const_reference value) const { return tree_.iterator_to(value); } //! Requires: value shall not be in a avl_set/avl_multiset. - //! + //! //! Effects: init_node puts the hook of a value in a well-known default //! state. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant time. - //! + //! //! Note: This function puts the hook in the well-known default state //! used by auto_unlink and safe hooks. static void init_node(reference value) { tree_type::init_node(value); } //! Effects: Unlinks the leftmost node from the tree. - //! + //! //! Complexity: Average complexity is constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Notes: This function breaks the tree and the tree can //! only be used for more unlink_leftmost_without_rebalance calls. //! This function is normally used to achieve a step by step @@ -1044,14 +1137,14 @@ class avl_set_impl //! Requires: replace_this must be a valid iterator of *this //! and with_this must not be inserted in any tree. - //! + //! //! Effects: Replaces replace_this in its position in the //! tree with with_this. The tree does not need to be rebalanced. - //! - //! Complexity: Constant. - //! + //! + //! Complexity: Constant. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! with_this is not equivalent to *replace_this according to the //! ordering rules. This function is faster than erasing and inserting @@ -1181,6 +1274,7 @@ class avl_set #endif ::type Base; + BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set) public: typedef typename Base::value_compare value_compare; typedef typename Base::value_traits value_traits; @@ -1202,6 +1296,13 @@ class avl_set : Base(b, e, cmp, v_traits) {} + avl_set(BOOST_RV_REF(avl_set) x) + : Base(::boost::move(static_cast(x))) + {} + + avl_set& operator=(BOOST_RV_REF(avl_set) x) + { this->Base::operator=(::boost::move(static_cast(x))); return *this; } + static avl_set &container_from_end_iterator(iterator end_iterator) { return static_cast(Base::container_from_end_iterator(end_iterator)); } @@ -1217,9 +1318,9 @@ class avl_set #endif -//! The class template avl_multiset is an intrusive container, that mimics most of +//! The class template avl_multiset is an intrusive container, that mimics most of //! the interface of std::avl_multiset as described in the C++ standard. -//! +//! //! The template parameter \c T is the type to be managed by the container. //! The user can specify additional options and if no options are provided //! default options are used. @@ -1238,9 +1339,8 @@ class avl_multiset_impl /// @cond typedef avltree_impl tree_type; - //Non-copyable and non-assignable - avl_multiset_impl (const avl_multiset_impl&); - avl_multiset_impl &operator =(const avl_multiset_impl&); + //Movable + BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset_impl) typedef tree_type implementation_defined; /// @endcond @@ -1274,30 +1374,30 @@ class avl_multiset_impl /// @endcond public: - //! Effects: Constructs an empty avl_multiset. - //! - //! Complexity: Constant. - //! + //! Effects: Constructs an empty avl_multiset. + //! + //! Complexity: Constant. + //! //! Throws: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor/operator() of the value_compare object throws. + //! or the copy constructor/operator() of the value_compare object throws. avl_multiset_impl( const value_compare &cmp = value_compare() - , const value_traits &v_traits = value_traits()) + , const value_traits &v_traits = value_traits()) : tree_(cmp, v_traits) {} - //! Requires: Dereferencing iterator must yield an lvalue of type value_type. + //! Requires: Dereferencing iterator must yield an lvalue of type value_type. //! cmp must be a comparison function that induces a strict weak ordering. - //! - //! Effects: Constructs an empty avl_multiset and inserts elements from + //! + //! Effects: Constructs an empty avl_multiset and inserts elements from //! [b, e). - //! + //! //! Complexity: Linear in N if [b, e) is already sorted using //! comp and otherwise N * log N, where N is the distance between first and last - //! + //! //! Throws: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor/operator() of the value_compare object throws. + //! or the copy constructor/operator() of the value_compare object throws. template avl_multiset_impl( Iterator b, Iterator e , const value_compare &cmp = value_compare() @@ -1305,125 +1405,136 @@ class avl_multiset_impl : tree_(false, b, e, cmp, v_traits) {} - //! Effects: Detaches all elements from this. The objects in the avl_multiset + //! Effects: to-do + //! + avl_multiset_impl(BOOST_RV_REF(avl_multiset_impl) x) + : tree_(::boost::move(x.tree_)) + {} + + //! Effects: to-do + //! + avl_multiset_impl& operator=(BOOST_RV_REF(avl_multiset_impl) x) + { tree_ = ::boost::move(x.tree_); return *this; } + + //! Effects: Detaches all elements from this. The objects in the avl_multiset //! are not deleted (i.e. no destructors are called). - //! + //! //! Complexity: Linear to the number of elements on the container. //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise. - //! + //! //! Throws: Nothing. - ~avl_multiset_impl() + ~avl_multiset_impl() {} //! Effects: Returns an iterator pointing to the beginning of the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator begin() { return tree_.begin(); } //! Effects: Returns a const_iterator pointing to the beginning of the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator begin() const { return tree_.begin(); } //! Effects: Returns a const_iterator pointing to the beginning of the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator cbegin() const { return tree_.cbegin(); } //! Effects: Returns an iterator pointing to the end of the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator end() { return tree_.end(); } //! Effects: Returns a const_iterator pointing to the end of the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator end() const { return tree_.end(); } //! Effects: Returns a const_iterator pointing to the end of the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator cend() const { return tree_.cend(); } //! Effects: Returns a reverse_iterator pointing to the beginning of the //! reversed avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. reverse_iterator rbegin() { return tree_.rbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator rbegin() const { return tree_.rbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator crbegin() const { return tree_.crbegin(); } //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. reverse_iterator rend() { return tree_.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator rend() const { return tree_.rend(); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator crend() const { return tree_.crend(); } //! Precondition: end_iterator must be a valid end iterator //! of avl_multiset. - //! + //! //! Effects: Returns a const reference to the avl_multiset associated to the end iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. static avl_multiset_impl &container_from_end_iterator(iterator end_iterator) { @@ -1434,11 +1545,11 @@ class avl_multiset_impl //! Precondition: end_iterator must be a valid end const_iterator //! of avl_multiset. - //! + //! //! Effects: Returns a const reference to the avl_multiset associated to the end iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. static const avl_multiset_impl &container_from_end_iterator(const_iterator end_iterator) { @@ -1448,11 +1559,11 @@ class avl_multiset_impl } //! Precondition: it must be a valid iterator of multiset. - //! + //! //! Effects: Returns a const reference to the multiset associated to the iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Logarithmic. static avl_multiset_impl &container_from_iterator(iterator it) { @@ -1462,11 +1573,11 @@ class avl_multiset_impl } //! Precondition: it must be a valid const_iterator of multiset. - //! + //! //! Effects: Returns a const reference to the multiset associated to the iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Logarithmic. static const avl_multiset_impl &container_from_iterator(const_iterator it) { @@ -1476,42 +1587,42 @@ class avl_multiset_impl } //! Effects: Returns the key_compare object used by the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If key_compare copy-constructor throws. key_compare key_comp() const { return tree_.value_comp(); } //! Effects: Returns the value_compare object used by the avl_multiset. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If value_compare copy-constructor throws. value_compare value_comp() const { return tree_.value_comp(); } //! Effects: Returns true is the container is empty. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. bool empty() const { return tree_.empty(); } //! Effects: Returns the number of elements stored in the avl_multiset. - //! + //! //! Complexity: Linear to elements contained in *this if, //! constant-time size option is enabled. Constant-time otherwise. - //! + //! //! Throws: Nothing. size_type size() const { return tree_.size(); } //! Effects: Swaps the contents of two avl_multisets. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If the swap() call for the comparison functor //! found using ADL throws. Strong guarantee. void swap(avl_multiset_impl& other) @@ -1521,69 +1632,69 @@ class avl_multiset_impl //! Cloner should yield to nodes equivalent to the original nodes. //! //! Effects: Erases all the elements from *this - //! calling Disposer::operator()(pointer), clones all the + //! calling Disposer::operator()(pointer), clones all the //! elements from src calling Cloner::operator()(const_reference ) //! and inserts them on *this. Copies the predicate from the source container. //! //! If cloner throws, all cloned elements are unlinked and disposed //! calling Disposer::operator()(pointer). - //! + //! //! Complexity: Linear to erased plus inserted elements. - //! + //! //! Throws: If cloner throws or predicate copy assignment throws. Basic guarantee. template void clone_from(const avl_multiset_impl &src, Cloner cloner, Disposer disposer) { tree_.clone_from(src.tree_, cloner, disposer); } //! Requires: value must be an lvalue - //! + //! //! Effects: Inserts value into the avl_multiset. - //! + //! //! Returns: An iterator that points to the position where the new //! element was inserted. - //! + //! //! Complexity: Average complexity for insert element is at //! most logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. Strong guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. iterator insert(reference value) { return tree_.insert_equal(value); } //! Requires: value must be an lvalue - //! + //! //! Effects: Inserts x into the avl_multiset, using pos as a hint to //! where it will be inserted. - //! + //! //! Returns: An iterator that points to the position where the new //! element was inserted. - //! + //! //! Complexity: Logarithmic in general, but it is amortized //! constant time if t is inserted immediately before hint. - //! + //! //! Throws: If the internal value_compare ordering function throws. Strong guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. iterator insert(const_iterator hint, reference value) { return tree_.insert_equal(hint, value); } - //! Requires: Dereferencing iterator must yield an lvalue + //! Requires: Dereferencing iterator must yield an lvalue //! of type value_type. - //! + //! //! Effects: Inserts a range into the avl_multiset. - //! + //! //! Returns: An iterator that points to the position where the new //! element was inserted. - //! + //! //! Complexity: Insert range is in general O(N * log(N)), where N is the //! size of the range. However, it is linear in N if the range is already sorted //! by value_comp(). - //! + //! //! Throws: If the internal value_compare ordering function throws. Basic guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. template @@ -1596,11 +1707,11 @@ class avl_multiset_impl //! inserted key according to the predicate. //! //! Effects: Inserts x into the tree before "pos". - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if "pos" is not //! the successor of "value" or "value" is not unique tree ordering and uniqueness //! invariants will be broken respectively. @@ -1613,11 +1724,11 @@ class avl_multiset_impl //! any inserted key according to the predicate. //! //! Effects: Inserts x into the tree in the last position. - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if value is //! less than or equal to the greatest inserted key tree ordering invariant will be broken. //! This function is slightly more efficient than using "insert_before". @@ -1630,11 +1741,11 @@ class avl_multiset_impl //! than any inserted key according to the predicate. //! //! Effects: Inserts x into the tree in the first position. - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if value is //! greater than or equal to the the mimum inserted key tree ordering or uniqueness //! invariants will be broken. @@ -1644,41 +1755,41 @@ class avl_multiset_impl void push_front(reference value) { tree_.push_front(value); } - //! Effects: Erases the element pointed to by pos. - //! + //! Effects: Erases the element pointed to by pos. + //! //! Complexity: Average complexity is constant time. - //! + //! //! Returns: An iterator to the element after the erased element. //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. iterator erase(const_iterator i) { return tree_.erase(i); } - //! Effects: Erases the range pointed to by b end e. + //! Effects: Erases the range pointed to by b end e. //! //! Returns: An iterator to the element after the erased elements. - //! - //! Complexity: Average complexity for erase range is at most + //! + //! Complexity: Average complexity for erase range is at most //! O(log(size() + N)), where N is the number of elements in the range. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. iterator erase(const_iterator b, const_iterator e) { return tree_.erase(b, e); } //! Effects: Erases all the elements with the given value. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + this->count(value)). - //! + //! //! Throws: If the internal value_compare ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. size_type erase(const_reference value) @@ -1686,13 +1797,13 @@ class avl_multiset_impl //! Effects: Erases all the elements that compare equal with //! the given key and the given comparison functor. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + this->count(key, comp)). - //! + //! //! Throws: If comp ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -1707,14 +1818,14 @@ class avl_multiset_impl //! //! Returns: An iterator to the element after the erased element. //! - //! Effects: Erases the element pointed to by pos. + //! Effects: Erases the element pointed to by pos. //! Disposer::operator()(pointer) is called for the removed element. - //! - //! Complexity: Average complexity for erase element is constant time. - //! + //! + //! Complexity: Average complexity for erase element is constant time. + //! //! Throws: Nothing. - //! - //! Note: Invalidates the iterators + //! + //! Note: Invalidates the iterators //! to the erased elements. template iterator erase_and_dispose(const_iterator i, Disposer disposer) @@ -1732,12 +1843,12 @@ class avl_multiset_impl //! //! Effects: Erases the range pointed to by b end e. //! Disposer::operator()(pointer) is called for the removed elements. - //! - //! Complexity: Average complexity for erase range is at most + //! + //! Complexity: Average complexity for erase range is at most //! O(log(size() + N)), where N is the number of elements in the range. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators //! to the erased elements. template @@ -1748,13 +1859,13 @@ class avl_multiset_impl //! //! Effects: Erases all the elements with the given value. //! Disposer::operator()(pointer) is called for the removed elements. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + this->count(value)). - //! + //! //! Throws: If the internal value_compare ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -1768,11 +1879,11 @@ class avl_multiset_impl //! Disposer::operator()(pointer) is called for the removed elements. //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + this->count(key, comp)). - //! + //! //! Throws: If comp ordering function throws. Basic guarantee. - //! + //! //! Note: Invalidates the iterators //! to the erased elements. template @@ -1784,26 +1895,26 @@ class avl_multiset_impl { return tree_.erase_and_dispose(key, comp, disposer); } //! Effects: Erases all the elements of the container. - //! + //! //! Complexity: Linear to the number of elements on the container. //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. void clear() { return tree_.clear(); } //! Requires: Disposer::operator()(pointer) shouldn't throw. - //! + //! //! Effects: Erases all the elements of the container. - //! + //! //! Complexity: Linear to the number of elements on the container. //! Disposer::operator()(pointer) is called for the removed elements. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -1811,20 +1922,20 @@ class avl_multiset_impl { return tree_.clear_and_dispose(disposer); } //! Effects: Returns the number of contained elements with the given key - //! + //! //! Complexity: Logarithmic to the number of elements contained plus lineal //! to number of objects with the given key. - //! + //! //! Throws: If the internal value_compare ordering function throws. size_type count(const_reference value) const { return tree_.count(value); } //! Effects: Returns the number of contained elements with the same key //! compared with the given comparison functor. - //! + //! //! Complexity: Logarithmic to the number of elements contained plus lineal //! to number of objects with the given key. - //! + //! //! Throws: If comp ordering function throws. template size_type count(const KeyType& key, KeyValueCompare comp) const @@ -1832,9 +1943,9 @@ class avl_multiset_impl //! Effects: Returns an iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. iterator lower_bound(const_reference value) { return tree_.lower_bound(value); } @@ -1844,13 +1955,13 @@ class avl_multiset_impl //! that is used in the ordering functor. //! //! Effects: Returns an iterator to the first element whose - //! key according to the comparison functor is not less than k or + //! key according to the comparison functor is not less than k or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. - //! + //! //! Note: This function is used when constructing a value_type //! is expensive and the value_type can be compared with a cheaper //! key type. Usually this key is part of the value_type. @@ -1860,9 +1971,9 @@ class avl_multiset_impl //! Effects: Returns a const iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. const_iterator lower_bound(const_reference value) const { return tree_.lower_bound(value); } @@ -1872,13 +1983,13 @@ class avl_multiset_impl //! that is used in the ordering functor. //! //! Effects: Returns a const_iterator to the first element whose - //! key according to the comparison functor is not less than k or + //! key according to the comparison functor is not less than k or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. - //! + //! //! Note: This function is used when constructing a value_type //! is expensive and the value_type can be compared with a cheaper //! key type. Usually this key is part of the value_type. @@ -1888,9 +1999,9 @@ class avl_multiset_impl //! Effects: Returns an iterator to the first element whose //! key is greater than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. iterator upper_bound(const_reference value) { return tree_.upper_bound(value); } @@ -1900,11 +2011,11 @@ class avl_multiset_impl //! that is used in the ordering functor. //! //! Effects: Returns an iterator to the first element whose - //! key according to the comparison functor is greater than key or + //! key according to the comparison functor is greater than key or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -1916,9 +2027,9 @@ class avl_multiset_impl //! Effects: Returns an iterator to the first element whose //! key is greater than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. const_iterator upper_bound(const_reference value) const { return tree_.upper_bound(value); } @@ -1928,11 +2039,11 @@ class avl_multiset_impl //! that is used in the ordering functor. //! //! Effects: Returns a const_iterator to the first element whose - //! key according to the comparison functor is greater than key or + //! key according to the comparison functor is greater than key or //! end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -1942,11 +2053,11 @@ class avl_multiset_impl const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const { return tree_.upper_bound(key, comp); } - //! Effects: Finds an iterator to the first element whose value is + //! Effects: Finds an iterator to the first element whose value is //! "value" or end() if that element does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. iterator find(const_reference value) { return tree_.find(value); } @@ -1955,12 +2066,12 @@ class avl_multiset_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds an iterator to the first element whose key is - //! "key" according to the comparison functor or end() if that element + //! Effects: Finds an iterator to the first element whose key is + //! "key" according to the comparison functor or end() if that element //! does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -1970,11 +2081,11 @@ class avl_multiset_impl iterator find(const KeyType& key, KeyValueCompare comp) { return tree_.find(key, comp); } - //! Effects: Finds a const_iterator to the first element whose value is + //! Effects: Finds a const_iterator to the first element whose value is //! "value" or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. const_iterator find(const_reference value) const { return tree_.find(value); } @@ -1983,12 +2094,12 @@ class avl_multiset_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds a const_iterator to the first element whose key is - //! "key" according to the comparison functor or end() if that element + //! Effects: Finds a const_iterator to the first element whose key is + //! "key" according to the comparison functor or end() if that element //! does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -2001,9 +2112,9 @@ class avl_multiset_impl //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. std::pair equal_range(const_reference value) { return tree_.equal_range(value); } @@ -2012,13 +2123,13 @@ class avl_multiset_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds a range containing all elements whose key is k - //! according to the comparison functor or an empty range + //! Effects: Finds a range containing all elements whose key is k + //! according to the comparison functor or an empty range //! that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -2031,9 +2142,9 @@ class avl_multiset_impl //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. std::pair equal_range(const_reference value) const @@ -2043,13 +2154,13 @@ class avl_multiset_impl //! value_compare. Usually key is the part of the value_type //! that is used in the ordering functor. //! - //! Effects: Finds a range containing all elements whose key is k - //! according to the comparison functor or an empty range + //! Effects: Finds a range containing all elements whose key is k + //! according to the comparison functor or an empty range //! that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: If comp ordering function throws. //! //! Note: This function is used when constructing a value_type @@ -2060,16 +2171,101 @@ class avl_multiset_impl equal_range(const KeyType& key, KeyValueCompare comp) const { return tree_.equal_range(key, comp); } + //! Requires: 'lower_value' must not be greater than 'upper_value'. If + //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If the predicate throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_value and upper_value. + std::pair bounded_range + (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) + { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); } + + //! Requires: KeyValueCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise + //! + //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + std::pair bounded_range + (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) + { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); } + + //! Requires: 'lower_value' must not be greater than 'upper_value'. If + //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If the predicate throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_value and upper_value. + std::pair + bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const + { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); } + + //! Requires: KeyValueCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise + //! + //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + std::pair + bounded_range + (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const + { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); } + //! Requires: value must be an lvalue and shall be in a avl_multiset of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid iterator i belonging to the avl_multiset //! that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This static function is available only if the value traits //! is stateless. static iterator s_iterator_to(reference value) @@ -2077,14 +2273,14 @@ class avl_multiset_impl //! Requires: value must be an lvalue and shall be in a avl_multiset of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid const_iterator i belonging to the //! avl_multiset that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This static function is available only if the value traits //! is stateless. static const_iterator s_iterator_to(const_reference value) @@ -2092,48 +2288,48 @@ class avl_multiset_impl //! Requires: value must be an lvalue and shall be in a avl_multiset of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid iterator i belonging to the avl_multiset //! that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator iterator_to(reference value) { return tree_.iterator_to(value); } //! Requires: value must be an lvalue and shall be in a avl_multiset of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid const_iterator i belonging to the //! avl_multiset that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator iterator_to(const_reference value) const { return tree_.iterator_to(value); } //! Requires: value shall not be in a avl_multiset/avl_multiset. - //! + //! //! Effects: init_node puts the hook of a value in a well-known default //! state. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant time. - //! + //! //! Note: This function puts the hook in the well-known default state //! used by auto_unlink and safe hooks. static void init_node(reference value) { tree_type::init_node(value); } //! Effects: Unlinks the leftmost node from the tree. - //! + //! //! Complexity: Average complexity is constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Notes: This function breaks the tree and the tree can //! only be used for more unlink_leftmost_without_rebalance calls. //! This function is normally used to achieve a step by step @@ -2143,14 +2339,14 @@ class avl_multiset_impl //! Requires: replace_this must be a valid iterator of *this //! and with_this must not be inserted in any tree. - //! + //! //! Effects: Replaces replace_this in its position in the //! tree with with_this. The tree does not need to be rebalanced. - //! - //! Complexity: Constant. - //! + //! + //! Complexity: Constant. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! with_this is not equivalent to *replace_this according to the //! ordering rules. This function is faster than erasing and inserting @@ -2264,7 +2460,7 @@ template template #endif class avl_multiset - : public make_avl_multiset(x))) + {} + + avl_multiset& operator=(BOOST_RV_REF(avl_multiset) x) + { this->Base::operator=(::boost::move(static_cast(x))); return *this; } + static avl_multiset &container_from_end_iterator(iterator end_iterator) { return static_cast(Base::container_from_end_iterator(end_iterator)); } @@ -2316,8 +2520,8 @@ class avl_multiset #endif -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/avl_set_hook.hpp b/3party/boost/boost/intrusive/avl_set_hook.hpp index 23b1f0bd8f..825921f509 100644 --- a/3party/boost/boost/intrusive/avl_set_hook.hpp +++ b/3party/boost/boost/intrusive/avl_set_hook.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -61,16 +61,16 @@ struct make_avl_set_base_hook typedef implementation_defined type; }; -//! Derive a class from avl_set_base_hook in order to store objects in -//! in an avl_set/avl_multiset. avl_set_base_hook holds the data necessary to maintain +//! Derive a class from avl_set_base_hook in order to store objects in +//! in an avl_set/avl_multiset. avl_set_base_hook holds the data necessary to maintain //! the avl_set/avl_multiset and provides an appropriate value_traits class for avl_set/avl_multiset. -//! +//! //! The hook admits the following options: \c tag<>, \c void_pointer<>, //! \c link_mode<> and \c optimize_size<>. //! -//! \c tag<> defines a tag to identify the node. -//! The same tag value can be used in different classes, but if a class is -//! derived from more than one \c list_base_hook, then each \c list_base_hook needs its +//! \c tag<> defines a tag to identify the node. +//! The same tag value can be used in different classes, but if a class is +//! derived from more than one \c list_base_hook, then each \c list_base_hook needs its //! unique tag. //! //! \c void_pointer<> is the pointer type that will be used internally in the hook @@ -99,27 +99,27 @@ class avl_set_base_hook public: //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. avl_set_base_hook(); //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. The argument is ignored. - //! - //! Throws: Nothing. - //! + //! + //! Throws: Nothing. + //! //! Rationale: Providing a copy-constructor - //! makes classes using the hook STL-compliant without forcing the + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. avl_set_base_hook(const avl_set_base_hook& ); //! Effects: Empty function. The argument is ignored. - //! - //! Throws: Nothing. - //! - //! Rationale: Providing an assignment operator - //! makes classes using the hook STL-compliant without forcing the + //! + //! Throws: Nothing. + //! + //! Rationale: Providing an assignment operator + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. avl_set_base_hook& operator=(const avl_set_base_hook& ); @@ -128,37 +128,37 @@ class avl_set_base_hook //! nothing (ie. no code is generated). If link_mode is \c safe_link and the //! object is stored in a set an assertion is raised. If link_mode is //! \c auto_unlink and \c is_linked() is true, the node is unlinked. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. ~avl_set_base_hook(); - //! Effects: Swapping two nodes swaps the position of the elements - //! related to those nodes in one or two containers. That is, if the node - //! this is part of the element e1, the node x is part of the element e2 - //! and both elements are included in the containers s1 and s2, then after - //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 - //! at the position of e1. If one element is not in a container, then - //! after the swap-operation the other element is not in a container. - //! Iterators to e1 and e2 related to those nodes are invalidated. + //! Effects: Swapping two nodes swaps the position of the elements + //! related to those nodes in one or two containers. That is, if the node + //! this is part of the element e1, the node x is part of the element e2 + //! and both elements are included in the containers s1 and s2, then after + //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 + //! at the position of e1. If one element is not in a container, then + //! after the swap-operation the other element is not in a container. + //! Iterators to e1 and e2 related to those nodes are invalidated. //! - //! Complexity: Constant + //! Complexity: Constant //! - //! Throws: Nothing. + //! Throws: Nothing. void swap_nodes(avl_set_base_hook &other); //! Precondition: link_mode must be \c safe_link or \c auto_unlink. //! //! Returns: true, if the node belongs to a container, false - //! otherwise. This function can be used to test whether \c set::iterator_to - //! will return a valid iterator. + //! otherwise. This function can be used to test whether \c set::iterator_to + //! will return a valid iterator. //! - //! Complexity: Constant + //! Complexity: Constant bool is_linked() const; //! Effects: Removes the node if it's inserted in a container. //! This function is only allowed if link_mode is \c auto_unlink. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. void unlink(); #endif }; @@ -195,7 +195,7 @@ struct make_avl_set_member_hook //! Put a public data member avl_set_member_hook in order to store objects of this class in //! an avl_set/avl_multiset. avl_set_member_hook holds the data necessary for maintaining the //! avl_set/avl_multiset and provides an appropriate value_traits class for avl_set/avl_multiset. -//! +//! //! The hook admits the following options: \c void_pointer<>, //! \c link_mode<> and \c optimize_size<>. //! @@ -225,27 +225,27 @@ class avl_set_member_hook public: //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. avl_set_member_hook(); //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. The argument is ignored. - //! - //! Throws: Nothing. - //! + //! + //! Throws: Nothing. + //! //! Rationale: Providing a copy-constructor - //! makes classes using the hook STL-compliant without forcing the + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. avl_set_member_hook(const avl_set_member_hook& ); //! Effects: Empty function. The argument is ignored. - //! - //! Throws: Nothing. - //! - //! Rationale: Providing an assignment operator - //! makes classes using the hook STL-compliant without forcing the + //! + //! Throws: Nothing. + //! + //! Rationale: Providing an assignment operator + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. avl_set_member_hook& operator=(const avl_set_member_hook& ); @@ -254,43 +254,43 @@ class avl_set_member_hook //! nothing (ie. no code is generated). If link_mode is \c safe_link and the //! object is stored in a set an assertion is raised. If link_mode is //! \c auto_unlink and \c is_linked() is true, the node is unlinked. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. ~avl_set_member_hook(); - //! Effects: Swapping two nodes swaps the position of the elements - //! related to those nodes in one or two containers. That is, if the node - //! this is part of the element e1, the node x is part of the element e2 - //! and both elements are included in the containers s1 and s2, then after - //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 - //! at the position of e1. If one element is not in a container, then - //! after the swap-operation the other element is not in a container. - //! Iterators to e1 and e2 related to those nodes are invalidated. + //! Effects: Swapping two nodes swaps the position of the elements + //! related to those nodes in one or two containers. That is, if the node + //! this is part of the element e1, the node x is part of the element e2 + //! and both elements are included in the containers s1 and s2, then after + //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 + //! at the position of e1. If one element is not in a container, then + //! after the swap-operation the other element is not in a container. + //! Iterators to e1 and e2 related to those nodes are invalidated. //! - //! Complexity: Constant + //! Complexity: Constant //! - //! Throws: Nothing. + //! Throws: Nothing. void swap_nodes(avl_set_member_hook &other); //! Precondition: link_mode must be \c safe_link or \c auto_unlink. //! //! Returns: true, if the node belongs to a container, false - //! otherwise. This function can be used to test whether \c set::iterator_to - //! will return a valid iterator. + //! otherwise. This function can be used to test whether \c set::iterator_to + //! will return a valid iterator. //! - //! Complexity: Constant + //! Complexity: Constant bool is_linked() const; //! Effects: Removes the node if it's inserted in a container. //! This function is only allowed if link_mode is \c auto_unlink. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. void unlink(); #endif }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/avltree.hpp b/3party/boost/boost/intrusive/avltree.hpp index e294d58088..84376a87c7 100644 --- a/3party/boost/boost/intrusive/avltree.hpp +++ b/3party/boost/boost/intrusive/avltree.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -27,11 +27,14 @@ #include #include #include -#include +#include +#include #include #include +#include #include #include +#include namespace boost { namespace intrusive { @@ -62,7 +65,7 @@ struct avl_set_defaults //! The class template avltree is an intrusive AVL tree container, that //! is used to construct intrusive avl_set and avl_multiset containers. -//! The no-throw guarantee holds only, if the value_compare object +//! The no-throw guarantee holds only, if the value_compare object //! doesn't throw. //! //! The template parameter \c T is the type to be managed by the container. @@ -95,24 +98,30 @@ class avltree_impl /// @endcond typedef typename real_value_traits::pointer pointer; typedef typename real_value_traits::const_pointer const_pointer; - typedef typename std::iterator_traits::value_type value_type; + typedef typename boost::intrusive:: + pointer_traits::element_type value_type; typedef value_type key_type; - typedef typename std::iterator_traits::reference reference; - typedef typename std::iterator_traits::reference const_reference; - typedef typename std::iterator_traits::difference_type difference_type; + typedef typename boost::intrusive:: + pointer_traits::reference reference; + typedef typename boost::intrusive:: + pointer_traits::reference const_reference; + typedef typename boost::intrusive:: + pointer_traits::difference_type difference_type; typedef typename Config::size_type size_type; typedef typename Config::compare value_compare; typedef value_compare key_compare; - typedef tree_iterator iterator; - typedef tree_iterator const_iterator; - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; + typedef tree_iterator iterator; + typedef tree_iterator const_iterator; + typedef boost::intrusive::detail::reverse_iterator reverse_iterator; + typedef boost::intrusive::detail::reverse_iteratorconst_reverse_iterator; typedef typename real_value_traits::node_traits node_traits; typedef typename node_traits::node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + ::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + ::type const_node_ptr; typedef avltree_algorithms node_algorithms; static const bool constant_time_size = Config::constant_time_size; @@ -122,11 +131,10 @@ class avltree_impl private: typedef detail::size_holder size_traits; - //noncopyable - avltree_impl (const avltree_impl&); - avltree_impl operator =(const avltree_impl&); + //noncopyable, movable + BOOST_MOVABLE_BUT_NOT_COPYABLE(avltree_impl) - enum { safemode_or_autounlink = + enum { safemode_or_autounlink = (int)real_value_traits::link_mode == (int)auto_unlink || (int)real_value_traits::link_mode == (int)safe_link }; @@ -152,23 +160,27 @@ class avltree_impl {} node_plus_pred_t node_plus_pred_; } data_; - + const value_compare &priv_comp() const { return data_.node_plus_pred_.get(); } value_compare &priv_comp() { return data_.node_plus_pred_.get(); } - const node &priv_header() const - { return data_.node_plus_pred_.header_plus_size_.header_; } + const value_traits &priv_value_traits() const + { return data_; } - node &priv_header() - { return data_.node_plus_pred_.header_plus_size_.header_; } + value_traits &priv_value_traits() + { return data_; } - static node_ptr uncast(const_node_ptr ptr) - { - return node_ptr(const_cast(detail::boost_intrusive_get_pointer(ptr))); - } + node_ptr priv_header_ptr() + { return pointer_traits::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); } + + const_node_ptr priv_header_ptr() const + { return pointer_traits::pointer_to(data_.node_plus_pred_.header_plus_size_.header_); } + + static node_ptr uncast(const const_node_ptr & ptr) + { return pointer_traits::const_cast_from(ptr); } size_traits &priv_size_traits() { return data_.node_plus_pred_.header_plus_size_; } @@ -200,18 +212,18 @@ class avltree_impl typedef typename node_algorithms::insert_commit_data insert_commit_data; - //! Effects: Constructs an empty tree. - //! - //! Complexity: Constant. - //! + //! Effects: Constructs an empty tree. + //! + //! Complexity: Constant. + //! //! Throws: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) //! or the copy constructor of the value_compare object throws. Basic guarantee. avltree_impl( const value_compare &cmp = value_compare() - , const value_traits &v_traits = value_traits()) + , const value_traits &v_traits = value_traits()) : data_(cmp, v_traits) - { - node_algorithms::init_header(&priv_header()); + { + node_algorithms::init_header(this->priv_header_ptr()); this->priv_size_traits().set_size(size_type(0)); } @@ -223,7 +235,7 @@ class avltree_impl //! //! Complexity: Linear in N if [b, e) is already sorted using //! comp and otherwise N * log N, where N is the distance between first and last. - //! + //! //! Throws: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) //! or the copy constructor/operator() of the value_compare object throws. Basic guarantee. @@ -233,7 +245,7 @@ class avltree_impl , const value_traits &v_traits = value_traits()) : data_(cmp, v_traits) { - node_algorithms::init_header(&priv_header()); + node_algorithms::init_header(this->priv_header_ptr()); this->priv_size_traits().set_size(size_type(0)); if(unique) this->insert_unique(b, e); @@ -241,197 +253,212 @@ class avltree_impl this->insert_equal(b, e); } - //! Effects: Detaches all elements from this. The objects in the set - //! are not deleted (i.e. no destructors are called), but the nodes according to - //! the value_traits template parameter are reinitialized and thus can be reused. - //! + //! Effects: to-do + //! + avltree_impl(BOOST_RV_REF(avltree_impl) x) + : data_(::boost::move(x.priv_comp()), ::boost::move(x.priv_value_traits())) + { + node_algorithms::init_header(this->priv_header_ptr()); + this->priv_size_traits().set_size(size_type(0)); + this->swap(x); + } + + //! Effects: to-do + //! + avltree_impl& operator=(BOOST_RV_REF(avltree_impl) x) + { this->swap(x); return *this; } + + //! Effects: Detaches all elements from this. The objects in the set + //! are not deleted (i.e. no destructors are called), but the nodes according to + //! the value_traits template parameter are reinitialized and thus can be reused. + //! //! Complexity: Linear to elements contained in *this. - //! + //! //! Throws: Nothing. - ~avltree_impl() + ~avltree_impl() {} //! Effects: Returns an iterator pointing to the beginning of the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator begin() - { return iterator (node_traits::get_left(node_ptr(&priv_header())), this); } + { return iterator (node_traits::get_left(this->priv_header_ptr()), this); } //! Effects: Returns a const_iterator pointing to the beginning of the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator begin() const { return cbegin(); } //! Effects: Returns a const_iterator pointing to the beginning of the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator cbegin() const - { return const_iterator (node_traits::get_left(const_node_ptr(&priv_header())), this); } + { return const_iterator (node_traits::get_left(this->priv_header_ptr()), this); } //! Effects: Returns an iterator pointing to the end of the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator end() - { return iterator (node_ptr(&priv_header()), this); } + { return iterator (this->priv_header_ptr(), this); } //! Effects: Returns a const_iterator pointing to the end of the tree. //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator end() const { return cend(); } //! Effects: Returns a const_iterator pointing to the end of the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator cend() const - { return const_iterator (uncast(const_node_ptr(&priv_header())), this); } + { return const_iterator (uncast(this->priv_header_ptr()), this); } //! Effects: Returns a reverse_iterator pointing to the beginning of the //! reversed tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. reverse_iterator rbegin() { return reverse_iterator(end()); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); } //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. reverse_iterator rend() { return reverse_iterator(begin()); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_reverse_iterator crend() const { return const_reverse_iterator(begin()); } //! Precondition: end_iterator must be a valid end iterator //! of avltree. - //! + //! //! Effects: Returns a const reference to the avltree associated to the end iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. static avltree_impl &container_from_end_iterator(iterator end_iterator) { return priv_container_from_end_iterator(end_iterator); } //! Precondition: end_iterator must be a valid end const_iterator //! of avltree. - //! + //! //! Effects: Returns a const reference to the avltree associated to the end iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant. static const avltree_impl &container_from_end_iterator(const_iterator end_iterator) { return priv_container_from_end_iterator(end_iterator); } //! Precondition: it must be a valid iterator //! of rbtree. - //! + //! //! Effects: Returns a const reference to the tree associated to the iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Logarithmic. static avltree_impl &container_from_iterator(iterator it) { return priv_container_from_iterator(it); } //! Precondition: it must be a valid end const_iterator //! of rbtree. - //! + //! //! Effects: Returns a const reference to the tree associated to the iterator - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Logarithmic. static const avltree_impl &container_from_iterator(const_iterator it) { return priv_container_from_iterator(it); } //! Effects: Returns the value_compare object used by the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If value_compare copy-constructor throws. value_compare value_comp() const { return priv_comp(); } //! Effects: Returns true if the container is empty. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. bool empty() const - { return node_algorithms::unique(const_node_ptr(&priv_header())); } + { return node_algorithms::unique(this->priv_header_ptr()); } //! Effects: Returns the number of elements stored in the tree. - //! + //! //! Complexity: Linear to elements contained in *this //! if constant-time size option is disabled. Constant time otherwise. - //! + //! //! Throws: Nothing. size_type size() const { if(constant_time_size) return this->priv_size_traits().get_size(); else{ - return (size_type)node_algorithms::size(const_node_ptr(&priv_header())); + return (size_type)node_algorithms::size(this->priv_header_ptr()); } } //! Effects: Swaps the contents of two avltrees. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: If the comparison functor's swap call throws. void swap(avltree_impl& other) { @@ -439,7 +466,7 @@ class avltree_impl using std::swap; swap(priv_comp(), priv_comp()); //These can't throw - node_algorithms::swap_tree(node_ptr(&priv_header()), node_ptr(&other.priv_header())); + node_algorithms::swap_tree(this->priv_header_ptr(), other.priv_header_ptr()); if(constant_time_size){ size_type backup = this->priv_size_traits().get_size(); this->priv_size_traits().set_size(other.priv_size_traits().get_size()); @@ -448,14 +475,14 @@ class avltree_impl } //! Requires: value must be an lvalue - //! + //! //! Effects: Inserts value into the tree before the upper bound. - //! + //! //! Complexity: Average complexity for insert element is at //! most logarithmic. - //! + //! //! Throws: If the internal value_compare ordering function throws. Strong guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. iterator insert_equal(reference value) @@ -466,23 +493,23 @@ class avltree_impl if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert)); iterator ret(node_algorithms::insert_equal_upper_bound - (node_ptr(&priv_header()), to_insert, key_node_comp), this); + (this->priv_header_ptr(), to_insert, key_node_comp), this); this->priv_size_traits().increment(); return ret; } //! Requires: value must be an lvalue, and "hint" must be //! a valid iterator. - //! + //! //! Effects: Inserts x into the tree, using "hint" as a hint to //! where it will be inserted. If "hint" is the upper_bound //! the insertion takes constant time (two comparisons in the worst case) - //! + //! //! Complexity: Logarithmic in general, but it is amortized //! constant time if t is inserted immediately before hint. - //! + //! //! Throws: If the internal value_compare ordering function throws. Strong guarantee. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. iterator insert_equal(const_iterator hint, reference value) @@ -493,23 +520,23 @@ class avltree_impl if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert)); iterator ret(node_algorithms::insert_equal - (node_ptr(&priv_header()), hint.pointed_node(), to_insert, key_node_comp), this); + (this->priv_header_ptr(), hint.pointed_node(), to_insert, key_node_comp), this); this->priv_size_traits().increment(); return ret; } - //! Requires: Dereferencing iterator must yield an lvalue + //! Requires: Dereferencing iterator must yield an lvalue //! of type value_type. - //! + //! //! Effects: Inserts a each element of a range into the tree //! before the upper bound of the key of each element. - //! + //! //! Complexity: Insert range is in general O(N * log(N)), where N is the //! size of the range. However, it is linear in N if the range is already sorted //! by value_comp(). - //! + //! //! Throws: Nothing. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. template @@ -521,15 +548,15 @@ class avltree_impl } //! Requires: value must be an lvalue - //! + //! //! Effects: Inserts value into the tree if the value //! is not already present. - //! + //! //! Complexity: Average complexity for insert element is at //! most logarithmic. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. std::pair insert_unique(reference value) @@ -543,16 +570,16 @@ class avltree_impl //! Requires: value must be an lvalue, and "hint" must be //! a valid iterator - //! + //! //! Effects: Tries to insert x into the tree, using "hint" as a hint //! to where it will be inserted. - //! + //! //! Complexity: Logarithmic in general, but it is amortized //! constant time (two comparisons in the worst case) //! if t is inserted immediately before hint. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. iterator insert_unique(const_iterator hint, reference value) @@ -564,17 +591,17 @@ class avltree_impl return insert_unique_commit(value, commit_data); } - //! Requires: Dereferencing iterator must yield an lvalue + //! Requires: Dereferencing iterator must yield an lvalue //! of type value_type. - //! + //! //! Effects: Tries to insert each element of a range into the tree. - //! - //! Complexity: Insert range is in general O(N * log(N)), where N is the - //! size of the range. However, it is linear in N if the range is already sorted + //! + //! Complexity: Insert range is in general O(N * log(N)), where N is the + //! size of the range. However, it is linear in N if the range is already sorted //! by value_comp(). - //! + //! //! Throws: Nothing. - //! + //! //! Note: Does not affect the validity of iterators and references. //! No copy-constructors are called. template @@ -591,10 +618,10 @@ class avltree_impl } } - //! Requires: key_value_comp must be a comparison function that induces + //! Requires: key_value_comp must be a comparison function that induces //! the same strict weak ordering as value_compare. The difference is that //! key_value_comp compares an arbitrary key with the contained values. - //! + //! //! Effects: Checks if a value can be inserted in the container, using //! a user provided key instead of the value itself. //! @@ -603,16 +630,16 @@ class avltree_impl //! and false. If the value can be inserted returns true in the returned //! pair boolean and fills "commit_data" that is meant to be used with //! the "insert_commit" function. - //! + //! //! Complexity: Average complexity is at most logarithmic. //! //! Throws: If the key_value_comp ordering function throws. Strong guarantee. - //! + //! //! Notes: This function is used to improve performance when constructing //! a value_type is expensive: if there is an equivalent value //! the constructed object must be discarded. Many times, the part of the //! node that is used to impose the order is much cheaper to construct - //! than the value_type and this function offers the possibility to use that + //! than the value_type and this function offers the possibility to use that //! part to check if the insertion will be successful. //! //! If the check is successful, the user can construct the value_type and use @@ -627,18 +654,18 @@ class avltree_impl { detail::key_nodeptr_comp comp(key_value_comp, this); - std::pair ret = + std::pair ret = (node_algorithms::insert_unique_check - (node_ptr(&priv_header()), key, comp, commit_data)); + (this->priv_header_ptr(), key, comp, commit_data)); return std::pair(iterator(ret.first, this), ret.second); } - //! Requires: key_value_comp must be a comparison function that induces + //! Requires: key_value_comp must be a comparison function that induces //! the same strict weak ordering as value_compare. The difference is that //! key_value_comp compares an arbitrary key with the contained values. - //! + //! //! Effects: Checks if a value can be inserted in the container, using - //! a user provided key instead of the value itself, using "hint" + //! a user provided key instead of the value itself, using "hint" //! as a hint to where it will be inserted. //! //! Returns: If there is an equivalent value @@ -646,23 +673,23 @@ class avltree_impl //! and false. If the value can be inserted returns true in the returned //! pair boolean and fills "commit_data" that is meant to be used with //! the "insert_commit" function. - //! + //! //! Complexity: Logarithmic in general, but it's amortized //! constant time if t is inserted immediately before hint. //! //! Throws: If the key_value_comp ordering function throws. Strong guarantee. - //! + //! //! Notes: This function is used to improve performance when constructing //! a value_type is expensive: if there is an equivalent value //! the constructed object must be discarded. Many times, the part of the //! constructing that is used to impose the order is much cheaper to construct - //! than the value_type and this function offers the possibility to use that key + //! than the value_type and this function offers the possibility to use that key //! to check if the insertion will be successful. //! //! If the check is successful, the user can construct the value_type and use //! "insert_commit" to insert the object in constant-time. This can give a total //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)). - //! + //! //! "commit_data" remains valid for a subsequent "insert_commit" only if no more //! objects are inserted or erased from the container. template @@ -672,9 +699,9 @@ class avltree_impl { detail::key_nodeptr_comp comp(key_value_comp, this); - std::pair ret = + std::pair ret = (node_algorithms::insert_unique_check - (node_ptr(&priv_header()), hint.pointed_node(), key, comp, commit_data)); + (this->priv_header_ptr(), hint.pointed_node(), key, comp, commit_data)); return std::pair(iterator(ret.first, this), ret.second); } @@ -682,16 +709,16 @@ class avltree_impl //! must have been obtained from a previous call to "insert_check". //! No objects should have been inserted or erased from the container between //! the "insert_check" that filled "commit_data" and the call to "insert_commit". - //! + //! //! Effects: Inserts the value in the avl_set using the information obtained //! from the "commit_data" that a previous "insert_check" filled. //! //! Returns: An iterator to the newly inserted object. - //! + //! //! Complexity: Constant time. //! //! Throws: Nothing. - //! + //! //! Notes: This function has only sense if a "insert_check" has been //! previously executed to fill "commit_data". No value should be inserted or //! erased between the "insert_check" and "insert_commit" calls. @@ -701,7 +728,7 @@ class avltree_impl if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert)); node_algorithms::insert_unique_commit - (node_ptr(&priv_header()), to_insert, commit_data); + (this->priv_header_ptr(), to_insert, commit_data); this->priv_size_traits().increment(); return iterator(to_insert, this); } @@ -711,11 +738,11 @@ class avltree_impl //! once inserted according to the predicate //! //! Effects: Inserts x into the tree before "pos". - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if "pos" is not //! the successor of "value" tree ordering invariant will be broken. //! This is a low-level function to be used only for performance reasons @@ -726,7 +753,7 @@ class avltree_impl if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert)); iterator ret(node_algorithms::insert_before - (node_ptr(&priv_header()), pos.pointed_node(), to_insert), this); + (this->priv_header_ptr(), pos.pointed_node(), to_insert), this); this->priv_size_traits().increment(); return ret; } @@ -735,11 +762,11 @@ class avltree_impl //! than the greatest inserted key //! //! Effects: Inserts x into the tree in the last position. - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if value is //! less than the greatest inserted key tree ordering invariant will be broken. //! This function is slightly more efficient than using "insert_before". @@ -750,7 +777,7 @@ class avltree_impl node_ptr to_insert(get_real_value_traits().to_node_ptr(value)); if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert)); - node_algorithms::push_back(node_ptr(&priv_header()), to_insert); + node_algorithms::push_back(this->priv_header_ptr(), to_insert); this->priv_size_traits().increment(); } @@ -758,11 +785,11 @@ class avltree_impl //! than the minimum inserted key //! //! Effects: Inserts x into the tree in the first position. - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This function does not check preconditions so if value is //! greater than the minimum inserted key tree ordering invariant will be broken. //! This function is slightly more efficient than using "insert_before". @@ -773,16 +800,16 @@ class avltree_impl node_ptr to_insert(get_real_value_traits().to_node_ptr(value)); if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert)); - node_algorithms::push_front(node_ptr(&priv_header()), to_insert); + node_algorithms::push_front(this->priv_header_ptr(), to_insert); this->priv_size_traits().increment(); } - //! Effects: Erases the element pointed to by pos. - //! - //! Complexity: Average complexity for erase element is constant time. - //! + //! Effects: Erases the element pointed to by pos. + //! + //! Complexity: Average complexity for erase element is constant time. + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. iterator erase(const_iterator i) @@ -792,33 +819,33 @@ class avltree_impl node_ptr to_erase(i.pointed_node()); if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!node_algorithms::unique(to_erase)); - node_algorithms::erase(&priv_header(), to_erase); + node_algorithms::erase(this->priv_header_ptr(), to_erase); this->priv_size_traits().decrement(); if(safemode_or_autounlink) node_algorithms::init(to_erase); return ret.unconst(); } - //! Effects: Erases the range pointed to by b end e. - //! - //! Complexity: Average complexity for erase range is at most + //! Effects: Erases the range pointed to by b end e. + //! + //! Complexity: Average complexity for erase range is at most //! O(log(size() + N)), where N is the number of elements in the range. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. iterator erase(const_iterator b, const_iterator e) { size_type n; return private_erase(b, e, n); } //! Effects: Erases all the elements with the given value. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + N). - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. size_type erase(const_reference value) @@ -828,11 +855,11 @@ class avltree_impl //! according to the comparison functor "comp". //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + N). - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -850,14 +877,14 @@ class avltree_impl //! Requires: Disposer::operator()(pointer) shouldn't throw. //! - //! Effects: Erases the element pointed to by pos. + //! Effects: Erases the element pointed to by pos. //! Disposer::operator()(pointer) is called for the removed element. - //! - //! Complexity: Average complexity for erase element is constant time. - //! + //! + //! Complexity: Average complexity for erase element is constant time. + //! //! Throws: Nothing. - //! - //! Note: Invalidates the iterators + //! + //! Note: Invalidates the iterators //! to the erased elements. template iterator erase_and_dispose(const_iterator i, Disposer disposer) @@ -878,12 +905,12 @@ class avltree_impl //! //! Effects: Erases the range pointed to by b end e. //! Disposer::operator()(pointer) is called for the removed elements. - //! - //! Complexity: Average complexity for erase range is at most + //! + //! Complexity: Average complexity for erase range is at most //! O(log(size() + N)), where N is the number of elements in the range. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators //! to the erased elements. template @@ -894,13 +921,13 @@ class avltree_impl //! //! Effects: Erases all the elements with the given value. //! Disposer::operator()(pointer) is called for the removed elements. - //! + //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + N). - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. template @@ -919,11 +946,11 @@ class avltree_impl //! Disposer::operator()(pointer) is called for the removed elements. //! //! Returns: The number of erased elements. - //! + //! //! Complexity: O(log(size() + N). - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators //! to the erased elements. template @@ -939,13 +966,13 @@ class avltree_impl return n; } - //! Effects: Erases all of the elements. - //! + //! Effects: Erases all of the elements. + //! //! Complexity: Linear to the number of elements on the container. //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. No destructors are called. void clear() @@ -954,7 +981,7 @@ class avltree_impl this->clear_and_dispose(detail::null_disposer()); } else{ - node_algorithms::init_header(&priv_header()); + node_algorithms::init_header(this->priv_header_ptr()); this->priv_size_traits().set_size(0); } } @@ -963,34 +990,34 @@ class avltree_impl //! each node to be erased. //! Complexity: Average complexity for is at most O(log(size() + N)), //! where N is the number of elements in the container. - //! + //! //! Throws: Nothing. - //! + //! //! Note: Invalidates the iterators (but not the references) //! to the erased elements. Calls N times to disposer functor. template void clear_and_dispose(Disposer disposer) { - node_algorithms::clear_and_dispose(node_ptr(&priv_header()) + node_algorithms::clear_and_dispose(this->priv_header_ptr() , detail::node_disposer(disposer, this)); - node_algorithms::init_header(&priv_header()); + node_algorithms::init_header(this->priv_header_ptr()); this->priv_size_traits().set_size(0); } //! Effects: Returns the number of contained elements with the given value - //! + //! //! Complexity: Logarithmic to the number of elements contained plus lineal //! to number of objects with the given value. - //! + //! //! Throws: Nothing. size_type count(const_reference value) const { return this->count(value, priv_comp()); } //! Effects: Returns the number of contained elements with the given key - //! + //! //! Complexity: Logarithmic to the number of elements contained plus lineal //! to number of objects with the given key. - //! + //! //! Throws: Nothing. template size_type count(const KeyType &key, KeyValueCompare comp) const @@ -1001,27 +1028,27 @@ class avltree_impl //! Effects: Returns an iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. iterator lower_bound(const_reference value) { return this->lower_bound(value, priv_comp()); } //! Effects: Returns an iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. const_iterator lower_bound(const_reference value) const { return this->lower_bound(value, priv_comp()); } //! Effects: Returns an iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template iterator lower_bound(const KeyType &key, KeyValueCompare comp) @@ -1029,14 +1056,14 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); return iterator(node_algorithms::lower_bound - (const_node_ptr(&priv_header()), key, key_node_comp), this); + (this->priv_header_ptr(), key, key_node_comp), this); } //! Effects: Returns a const iterator to the first element whose //! key is not less than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template const_iterator lower_bound(const KeyType &key, KeyValueCompare comp) const @@ -1044,14 +1071,14 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); return const_iterator(node_algorithms::lower_bound - (const_node_ptr(&priv_header()), key, key_node_comp), this); + (this->priv_header_ptr(), key, key_node_comp), this); } //! Effects: Returns an iterator to the first element whose //! key is greater than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. iterator upper_bound(const_reference value) { return this->upper_bound(value, priv_comp()); } @@ -1061,7 +1088,7 @@ class avltree_impl //! does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template iterator upper_bound(const KeyType &key, KeyValueCompare comp) @@ -1069,14 +1096,14 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); return iterator(node_algorithms::upper_bound - (const_node_ptr(&priv_header()), key, key_node_comp), this); + (this->priv_header_ptr(), key, key_node_comp), this); } //! Effects: Returns an iterator to the first element whose //! key is greater than k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. const_iterator upper_bound(const_reference value) const { return this->upper_bound(value, priv_comp()); } @@ -1086,7 +1113,7 @@ class avltree_impl //! does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template const_iterator upper_bound(const KeyType &key, KeyValueCompare comp) const @@ -1094,23 +1121,23 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); return const_iterator(node_algorithms::upper_bound - (const_node_ptr(&priv_header()), key, key_node_comp), this); + (this->priv_header_ptr(), key, key_node_comp), this); } - //! Effects: Finds an iterator to the first element whose key is + //! Effects: Finds an iterator to the first element whose key is //! k or end() if that element does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. iterator find(const_reference value) { return this->find(value, priv_comp()); } - //! Effects: Finds an iterator to the first element whose key is + //! Effects: Finds an iterator to the first element whose key is //! k or end() if that element does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template iterator find(const KeyType &key, KeyValueCompare comp) @@ -1118,23 +1145,23 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); return iterator - (node_algorithms::find(const_node_ptr(&priv_header()), key, key_node_comp), this); + (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this); } - //! Effects: Finds a const_iterator to the first element whose key is + //! Effects: Finds a const_iterator to the first element whose key is //! k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. const_iterator find(const_reference value) const { return this->find(value, priv_comp()); } - //! Effects: Finds a const_iterator to the first element whose key is + //! Effects: Finds a const_iterator to the first element whose key is //! k or end() if that element does not exist. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template const_iterator find(const KeyType &key, KeyValueCompare comp) const @@ -1142,15 +1169,15 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); return const_iterator - (node_algorithms::find(const_node_ptr(&priv_header()), key, key_node_comp), this); + (node_algorithms::find(this->priv_header_ptr(), key, key_node_comp), this); } //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. std::pair equal_range(const_reference value) { return this->equal_range(value, priv_comp()); } @@ -1158,9 +1185,9 @@ class avltree_impl //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template std::pair equal_range(const KeyType &key, KeyValueCompare comp) @@ -1168,16 +1195,16 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); std::pair ret - (node_algorithms::equal_range(const_node_ptr(&priv_header()), key, key_node_comp)); + (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp)); return std::pair(iterator(ret.first, this), iterator(ret.second, this)); } //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. std::pair equal_range(const_reference value) const @@ -1186,9 +1213,9 @@ class avltree_impl //! Effects: Finds a range containing all elements whose key is k or //! an empty range that indicates the position where those elements would be //! if they there is no elements with key k. - //! + //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. template std::pair @@ -1197,7 +1224,105 @@ class avltree_impl detail::key_nodeptr_comp key_node_comp(comp, this); std::pair ret - (node_algorithms::equal_range(const_node_ptr(&priv_header()), key, key_node_comp)); + (node_algorithms::equal_range(this->priv_header_ptr(), key, key_node_comp)); + return std::pair(const_iterator(ret.first, this), const_iterator(ret.second, this)); + } + + //! Requires: 'lower_value' must not be greater than 'upper_value'. If + //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If the predicate throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_value and upper_value. + std::pair bounded_range + (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) + { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); } + + //! Requires: KeyValueCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise + //! + //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + std::pair bounded_range + (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) + { + detail::key_nodeptr_comp + key_node_comp(comp, this); + std::pair ret + (node_algorithms::bounded_range + (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed)); + return std::pair(iterator(ret.first, this), iterator(ret.second, this)); + } + + //! Requires: 'lower_value' must not be greater than 'upper_value'. If + //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If the predicate throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_value and upper_value. + std::pair bounded_range + (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const + { return this->bounded_range(lower_value, upper_value, priv_comp(), left_closed, right_closed); } + + //! Requires: KeyValueCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise + //! + //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + std::pair bounded_range + (const KeyType &lower_key, const KeyType &upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const + { + detail::key_nodeptr_comp + key_node_comp(comp, this); + std::pair ret + (node_algorithms::bounded_range + (this->priv_header_ptr(), lower_key, upper_key, key_node_comp, left_closed, right_closed)); return std::pair(const_iterator(ret.first, this), const_iterator(ret.second, this)); } @@ -1205,15 +1330,15 @@ class avltree_impl //! Cloner should yield to nodes equivalent to the original nodes. //! //! Effects: Erases all the elements from *this - //! calling Disposer::operator()(pointer), clones all the + //! calling Disposer::operator()(pointer), clones all the //! elements from src calling Cloner::operator()(const_reference ) //! and inserts them on *this. Copies the predicate from the source container. //! //! If cloner throws, all cloned elements are unlinked and disposed //! calling Disposer::operator()(pointer). - //! + //! //! Complexity: Linear to erased plus inserted elements. - //! + //! //! Throws: If cloner throws or predicate copy assignment throws. Basic guarantee. template void clone_from(const avltree_impl &src, Cloner cloner, Disposer disposer) @@ -1223,8 +1348,8 @@ class avltree_impl detail::exception_disposer rollback(*this, disposer); node_algorithms::clone - (const_node_ptr(&src.priv_header()) - ,node_ptr(&this->priv_header()) + (src.priv_header_ptr() + ,this->priv_header_ptr() ,detail::node_cloner(cloner, this) ,detail::node_disposer(disposer, this)); this->priv_size_traits().set_size(src.priv_size_traits().get_size()); @@ -1234,11 +1359,11 @@ class avltree_impl } //! Effects: Unlinks the leftmost node from the tree. - //! + //! //! Complexity: Average complexity is constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Notes: This function breaks the tree and the tree can //! only be used for more unlink_leftmost_without_rebalance calls. //! This function is normally used to achieve a step by step @@ -1246,7 +1371,7 @@ class avltree_impl pointer unlink_leftmost_without_rebalance() { node_ptr to_be_disposed(node_algorithms::unlink_leftmost_without_rebalance - (node_ptr(&priv_header()))); + (this->priv_header_ptr())); if(!to_be_disposed) return 0; this->priv_size_traits().decrement(); @@ -1257,14 +1382,14 @@ class avltree_impl //! Requires: replace_this must be a valid iterator of *this //! and with_this must not be inserted in any tree. - //! + //! //! Effects: Replaces replace_this in its position in the //! tree with with_this. The tree does not need to be rebalanced. - //! - //! Complexity: Constant. - //! + //! + //! Complexity: Constant. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! with_this is not equivalent to *replace_this according to the //! ordering rules. This function is faster than erasing and inserting @@ -1272,20 +1397,22 @@ class avltree_impl void replace_node(iterator replace_this, reference with_this) { node_algorithms::replace_node( get_real_value_traits().to_node_ptr(*replace_this) - , node_ptr(&priv_header()) + , this->priv_header_ptr() , get_real_value_traits().to_node_ptr(with_this)); + if(safemode_or_autounlink) + node_algorithms::init(replace_this.pointed_node()); } //! Requires: value must be an lvalue and shall be in a set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid iterator i belonging to the set //! that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This static function is available only if the value traits //! is stateless. static iterator s_iterator_to(reference value) @@ -1296,17 +1423,17 @@ class avltree_impl //! Requires: value must be an lvalue and shall be in a set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid const_iterator i belonging to the //! set that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - //! + //! //! Note: This static function is available only if the value traits //! is stateless. - static const_iterator s_iterator_to(const_reference value) + static const_iterator s_iterator_to(const_reference value) { BOOST_STATIC_ASSERT((!stateful_value_traits)); return const_iterator (value_traits::to_node_ptr(const_cast (value)), 0); @@ -1314,37 +1441,37 @@ class avltree_impl //! Requires: value must be an lvalue and shall be in a set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid iterator i belonging to the set //! that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. iterator iterator_to(reference value) { return iterator (value_traits::to_node_ptr(value), this); } //! Requires: value must be an lvalue and shall be in a set of //! appropriate type. Otherwise the behavior is undefined. - //! + //! //! Effects: Returns: a valid const_iterator i belonging to the //! set that points to the value - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. const_iterator iterator_to(const_reference value) const { return const_iterator (value_traits::to_node_ptr(const_cast (value)), this); } //! Requires: value shall not be in a tree. - //! + //! //! Effects: init_node puts the hook of a value in a well-known default //! state. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant time. - //! + //! //! Note: This function puts the hook in the well-known default state //! used by auto_unlink and safe hooks. static void init_node(reference value) @@ -1352,12 +1479,12 @@ class avltree_impl /* //! Effects: removes x from a tree of the appropriate type. It has no effect, - //! if x is not in such a tree. - //! + //! if x is not in such a tree. + //! //! Throws: Nothing. - //! + //! //! Complexity: Constant time. - //! + //! //! Note: This static function is only usable with the "safe mode" //! hook and non-constant time size lists. Otherwise, the user must use //! the non-static "erase(reference )" member. If the user calls @@ -1367,7 +1494,7 @@ class avltree_impl static void remove_node(T& value) { //This function is only usable for safe mode hooks and non-constant - //time lists. + //time lists. //BOOST_STATIC_ASSERT((!(safemode_or_autounlink && constant_time_size))); BOOST_STATIC_ASSERT((!constant_time_size)); BOOST_STATIC_ASSERT((boost::is_convertible::value)); @@ -1401,7 +1528,7 @@ class avltree_impl static avltree_impl &priv_container_from_end_iterator(const const_iterator &end_iterator) { header_plus_size *r = detail::parent_from_member - ( detail::boost_intrusive_get_pointer(end_iterator.pointed_node()), &header_plus_size::header_); + ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &header_plus_size::header_); node_plus_pred_t *n = detail::parent_from_member (r, &node_plus_pred_t::header_plus_size_); data_t *d = detail::parent_from_member(n, &data_t::node_plus_pred_); @@ -1604,6 +1731,8 @@ class avltree #endif ::type Base; + BOOST_MOVABLE_BUT_NOT_COPYABLE(avltree) + public: typedef typename Base::value_compare value_compare; typedef typename Base::value_traits value_traits; @@ -1626,6 +1755,13 @@ class avltree : Base(unique, b, e, cmp, v_traits) {} + avltree(BOOST_RV_REF(avltree) x) + : Base(::boost::move(static_cast(x))) + {} + + avltree& operator=(BOOST_RV_REF(avltree) x) + { this->Base::operator=(::boost::move(static_cast(x))); return *this; } + static avltree &container_from_end_iterator(iterator end_iterator) { return static_cast(Base::container_from_end_iterator(end_iterator)); } @@ -1642,8 +1778,8 @@ class avltree #endif -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/avltree_algorithms.hpp b/3party/boost/boost/intrusive/avltree_algorithms.hpp index 7e0cd2e47c..11463c71fb 100644 --- a/3party/boost/boost/intrusive/avltree_algorithms.hpp +++ b/3party/boost/boost/intrusive/avltree_algorithms.hpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Daniel K. O. 2005. -// (C) Copyright Ion Gaztanaga 2007. +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -22,6 +22,7 @@ #include #include #include +#include namespace boost { @@ -44,25 +45,25 @@ namespace intrusive { //! Static functions: //! //! static node_ptr get_parent(const_node_ptr n); -//! +//! //! static void set_parent(node_ptr n, node_ptr parent); //! //! static node_ptr get_left(const_node_ptr n); -//! +//! //! static void set_left(node_ptr n, node_ptr left); //! //! static node_ptr get_right(const_node_ptr n); -//! +//! //! static void set_right(node_ptr n, node_ptr right); -//! +//! //! static balance get_balance(const_node_ptr n); -//! +//! //! static void set_balance(node_ptr n, balance b); -//! +//! //! static balance negative(); -//! +//! //! static balance zero(); -//! +//! //! static balance positive(); template class avltree_algorithms @@ -87,8 +88,8 @@ class avltree_algorithms avltree_node_cloner(F f) : base_t(f) {} - - node_ptr operator()(node_ptr p) + + node_ptr operator()(const node_ptr &p) { node_ptr n = base_t::get()(p); NodeTraits::set_balance(n, NodeTraits::get_balance(p)); @@ -98,21 +99,19 @@ class avltree_algorithms struct avltree_erase_fixup { - void operator()(node_ptr to_erase, node_ptr successor) + void operator()(const node_ptr &to_erase, const node_ptr &successor) { NodeTraits::set_balance(successor, NodeTraits::get_balance(to_erase)); } }; - static node_ptr uncast(const_node_ptr ptr) - { - return node_ptr(const_cast(::boost::intrusive::detail::boost_intrusive_get_pointer(ptr))); - } + static node_ptr uncast(const const_node_ptr & ptr) + { return pointer_traits::const_cast_from(ptr); } /// @endcond public: - static node_ptr begin_node(const_node_ptr header) + static node_ptr begin_node(const const_node_ptr & header) { return tree_algorithms::begin_node(header); } - static node_ptr end_node(const_node_ptr header) + static node_ptr end_node(const const_node_ptr & header) { return tree_algorithms::end_node(header); } //! This type is the information that will be @@ -121,83 +120,83 @@ class avltree_algorithms //! Requires: header1 and header2 must be the header nodes //! of two trees. - //! - //! Effects: Swaps two trees. After the function header1 will contain + //! + //! Effects: Swaps two trees. After the function header1 will contain //! links to the second tree and header2 will have links to the first tree. - //! - //! Complexity: Constant. - //! + //! + //! Complexity: Constant. + //! //! Throws: Nothing. - static void swap_tree(node_ptr header1, node_ptr header2) + static void swap_tree(const node_ptr & header1, const node_ptr & header2) { return tree_algorithms::swap_tree(header1, header2); } //! Requires: node1 and node2 can't be header nodes //! of two trees. - //! + //! //! Effects: Swaps two nodes. After the function node1 will be inserted //! in the position node2 before the function. node2 will be inserted in the //! position node1 had before the function. - //! - //! Complexity: Logarithmic. - //! + //! + //! Complexity: Logarithmic. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! node1 and node2 are not equivalent according to the ordering rules. //! //!Experimental function - static void swap_nodes(node_ptr node1, node_ptr node2) + static void swap_nodes(const node_ptr & node1, const node_ptr & node2) { if(node1 == node2) return; - + node_ptr header1(tree_algorithms::get_header(node1)), header2(tree_algorithms::get_header(node2)); swap_nodes(node1, header1, node2, header2); } //! Requires: node1 and node2 can't be header nodes //! of two trees with header header1 and header2. - //! + //! //! Effects: Swaps two nodes. After the function node1 will be inserted //! in the position node2 before the function. node2 will be inserted in the //! position node1 had before the function. - //! - //! Complexity: Constant. - //! + //! + //! Complexity: Constant. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! node1 and node2 are not equivalent according to the ordering rules. //! //!Experimental function - static void swap_nodes(node_ptr node1, node_ptr header1, node_ptr node2, node_ptr header2) + static void swap_nodes(const node_ptr & node1, const node_ptr & header1, const node_ptr & node2, const node_ptr & header2) { if(node1 == node2) return; tree_algorithms::swap_nodes(node1, header1, node2, header2); //Swap balance balance c = NodeTraits::get_balance(node1); - NodeTraits::set_balance(node1, NodeTraits::get_balance(node2)); - NodeTraits::set_balance(node2, c); + NodeTraits::set_balance(node1, NodeTraits::get_balance(node2)); + NodeTraits::set_balance(node2, c); } //! Requires: node_to_be_replaced must be inserted in a tree //! and new_node must not be inserted in a tree. - //! + //! //! Effects: Replaces node_to_be_replaced in its position in the //! tree with new_node. The tree does not need to be rebalanced - //! - //! Complexity: Logarithmic. - //! + //! + //! Complexity: Logarithmic. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! new_node is not equivalent to node_to_be_replaced according to the //! ordering rules. This function is faster than erasing and inserting //! the node, since no rebalancing and comparison is needed. //! //!Experimental function - static void replace_node(node_ptr node_to_be_replaced, node_ptr new_node) + static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node) { if(node_to_be_replaced == new_node) return; @@ -206,34 +205,34 @@ class avltree_algorithms //! Requires: node_to_be_replaced must be inserted in a tree //! with header "header" and new_node must not be inserted in a tree. - //! + //! //! Effects: Replaces node_to_be_replaced in its position in the //! tree with new_node. The tree does not need to be rebalanced - //! - //! Complexity: Constant. - //! + //! + //! Complexity: Constant. + //! //! Throws: Nothing. - //! + //! //! Note: This function will break container ordering invariants if //! new_node is not equivalent to node_to_be_replaced according to the //! ordering rules. This function is faster than erasing and inserting //! the node, since no rebalancing or comparison is needed. //! //!Experimental function - static void replace_node(node_ptr node_to_be_replaced, node_ptr header, node_ptr new_node) + static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node) { tree_algorithms::replace_node(node_to_be_replaced, header, new_node); - NodeTraits::set_balance(new_node, NodeTraits::get_balance(node_to_be_replaced)); + NodeTraits::set_balance(new_node, NodeTraits::get_balance(node_to_be_replaced)); } //! Requires: node is a tree node but not the header. - //! + //! //! Effects: Unlinks the node and rebalances the tree. - //! + //! //! Complexity: Average complexity is constant time. - //! + //! //! Throws: Nothing. - static void unlink(node_ptr node) + static void unlink(const node_ptr & node) { node_ptr x = NodeTraits::get_parent(node); if(x){ @@ -244,109 +243,109 @@ class avltree_algorithms } //! Requires: header is the header of a tree. - //! + //! //! Effects: Unlinks the leftmost node from the tree, and //! updates the header link to the new leftmost node. - //! + //! //! Complexity: Average complexity is constant time. - //! + //! //! Throws: Nothing. - //! + //! //! Notes: This function breaks the tree and the tree can //! only be used for more unlink_leftmost_without_rebalance calls. //! This function is normally used to achieve a step by step //! controlled destruction of the tree. - static node_ptr unlink_leftmost_without_rebalance(node_ptr header) + static node_ptr unlink_leftmost_without_rebalance(const node_ptr & header) { return tree_algorithms::unlink_leftmost_without_rebalance(header); } //! Requires: node is a node of the tree or an node initialized //! by init(...). - //! + //! //! Effects: Returns true if the node is initialized by init(). - //! + //! //! Complexity: Constant time. - //! + //! //! Throws: Nothing. - static bool unique(const_node_ptr node) + static bool unique(const const_node_ptr & node) { return tree_algorithms::unique(node); } //! Requires: node is a node of the tree but it's not the header. - //! + //! //! Effects: Returns the number of nodes of the subtree. - //! + //! //! Complexity: Linear time. - //! + //! //! Throws: Nothing. - static std::size_t count(const_node_ptr node) + static std::size_t count(const const_node_ptr & node) { return tree_algorithms::count(node); } //! Requires: header is the header node of the tree. - //! + //! //! Effects: Returns the number of nodes above the header. - //! + //! //! Complexity: Linear time. - //! + //! //! Throws: Nothing. - static std::size_t size(const_node_ptr header) + static std::size_t size(const const_node_ptr & header) { return tree_algorithms::size(header); } //! Requires: p is a node from the tree except the header. - //! + //! //! Effects: Returns the next node of the tree. - //! + //! //! Complexity: Average constant time. - //! + //! //! Throws: Nothing. - static node_ptr next_node(node_ptr p) + static node_ptr next_node(const node_ptr & p) { return tree_algorithms::next_node(p); } //! Requires: p is a node from the tree except the leftmost node. - //! + //! //! Effects: Returns the previous node of the tree. - //! + //! //! Complexity: Average constant time. - //! + //! //! Throws: Nothing. - static node_ptr prev_node(node_ptr p) + static node_ptr prev_node(const node_ptr & p) { return tree_algorithms::prev_node(p); } //! Requires: node must not be part of any tree. //! //! Effects: After the function unique(node) == true. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. //! //! Nodes: If node is inserted in a tree, this function corrupts the tree. - static void init(node_ptr node) + static void init(const node_ptr & node) { tree_algorithms::init(node); } //! Requires: node must not be part of any tree. //! //! Effects: Initializes the header to represent an empty tree. //! unique(header) == true. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. //! //! Nodes: If node is inserted in a tree, this function corrupts the tree. - static void init_header(node_ptr header) + static void init_header(const node_ptr & header) { tree_algorithms::init_header(header); - NodeTraits::set_balance(header, NodeTraits::zero()); + NodeTraits::set_balance(header, NodeTraits::zero()); } //! Requires: header must be the header of a tree, z a node //! of that tree and z != header. //! //! Effects: Erases node "z" from the tree with header "header". - //! + //! //! Complexity: Amortized constant time. - //! + //! //! Throws: Nothing. - static node_ptr erase(node_ptr header, node_ptr z) + static node_ptr erase(const node_ptr & header, const node_ptr & z) { typename tree_algorithms::data_for_rebalance info; tree_algorithms::erase(header, z, avltree_erase_fixup(), info); @@ -362,22 +361,22 @@ class avltree_algorithms //! object taking a node_ptr and returning a new cloned node of it. "disposer" must //! take a node_ptr and shouldn't throw. //! - //! Effects: First empties target tree calling - //! void disposer::operator()(node_ptr) for every node of the tree + //! Effects: First empties target tree calling + //! void disposer::operator()(const node_ptr &) for every node of the tree //! except the header. - //! + //! //! Then, duplicates the entire tree pointed by "source_header" cloning each - //! source node with node_ptr Cloner::operator()(node_ptr) to obtain + //! source node with node_ptr Cloner::operator()(const node_ptr &) to obtain //! the nodes of the target tree. If "cloner" throws, the cloned target nodes - //! are disposed using void disposer(node_ptr). - //! + //! are disposed using void disposer(const node_ptr &). + //! //! Complexity: Linear to the number of element of the source tree plus the. //! number of elements of tree target tree when calling this function. - //! + //! //! Throws: If cloner functor throws. If this happens target nodes are disposed. template static void clone - (const_node_ptr source_header, node_ptr target_header, Cloner cloner, Disposer disposer) + (const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer) { avltree_node_cloner new_cloner(cloner); tree_algorithms::clone(source_header, target_header, new_cloner, disposer); @@ -386,16 +385,16 @@ class avltree_algorithms //! Requires: "disposer" must be an object function //! taking a node_ptr parameter and shouldn't throw. //! - //! Effects: Empties the target tree calling - //! void disposer::operator()(node_ptr) for every node of the tree + //! Effects: Empties the target tree calling + //! void disposer::operator()(const node_ptr &) for every node of the tree //! except the header. - //! + //! //! Complexity: Linear to the number of element of the source tree plus the. //! number of elements of tree target tree when calling this function. - //! + //! //! Throws: If cloner functor throws. If this happens target nodes are disposed. template - static void clear_and_dispose(node_ptr header, Disposer disposer) + static void clear_and_dispose(const node_ptr & header, Disposer disposer) { tree_algorithms::clear_and_dispose(header, disposer); } //! Requires: "header" must be the header node of a tree. @@ -408,11 +407,11 @@ class avltree_algorithms //! not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If "comp" throws. template static node_ptr lower_bound - (const_node_ptr header, const KeyType &key, KeyNodePtrCompare comp) + (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp) { return tree_algorithms::lower_bound(header, key, comp); } //! Requires: "header" must be the header node of a tree. @@ -424,11 +423,11 @@ class avltree_algorithms //! than "key" according to "comp" or "header" if that element does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If "comp" throws. template static node_ptr upper_bound - (const_node_ptr header, const KeyType &key, KeyNodePtrCompare comp) + (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp) { return tree_algorithms::upper_bound(header, key, comp); } //! Requires: "header" must be the header node of a tree. @@ -440,11 +439,11 @@ class avltree_algorithms //! "key" according to "comp" or "header" if that element does not exist. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If "comp" throws. template static node_ptr find - (const_node_ptr header, const KeyType &key, KeyNodePtrCompare comp) + (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp) { return tree_algorithms::find(header, key, comp); } //! Requires: "header" must be the header node of a tree. @@ -458,13 +457,38 @@ class avltree_algorithms //! if they there are no equivalent elements. //! //! Complexity: Logarithmic. - //! + //! //! Throws: If "comp" throws. template static std::pair equal_range - (const_node_ptr header, const KeyType &key, KeyNodePtrCompare comp) + (const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp) { return tree_algorithms::equal_range(header, key, comp); } + //! Requires: "header" must be the header node of a tree. + //! KeyNodePtrCompare is a function object that induces a strict weak + //! ordering compatible with the strict weak ordering used to create the + //! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs. + //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If + //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. + //! + //! Effects: Returns an a pair with the following criteria: + //! + //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise + //! + //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise + //! + //! Complexity: Logarithmic. + //! + //! Throws: If "comp" throws. + //! + //! Note: This function can be more efficient than calling upper_bound + //! and lower_bound for lower_key and upper_key. + template + static std::pair bounded_range + (const const_node_ptr & header, const KeyType &lower_key, const KeyType &upper_key, KeyNodePtrCompare comp + , bool left_closed, bool right_closed) + { return tree_algorithms::bounded_range(header, lower_key, upper_key, comp, left_closed, right_closed); } + //! Requires: "h" must be the header node of a tree. //! NodePtrCompare is a function object that induces a strict weak //! ordering compatible with the strict weak ordering used to create the @@ -472,14 +496,14 @@ class avltree_algorithms //! //! Effects: Inserts new_node into the tree before the upper bound //! according to "comp". - //! + //! //! Complexity: Average complexity for insert element is at //! most logarithmic. - //! + //! //! Throws: If "comp" throws. template static node_ptr insert_equal_upper_bound - (node_ptr h, node_ptr new_node, NodePtrCompare comp) + (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp) { tree_algorithms::insert_equal_upper_bound(h, new_node, comp); rebalance_after_insertion(h, new_node); @@ -493,14 +517,14 @@ class avltree_algorithms //! //! Effects: Inserts new_node into the tree before the lower bound //! according to "comp". - //! + //! //! Complexity: Average complexity for insert element is at //! most logarithmic. - //! + //! //! Throws: If "comp" throws. template static node_ptr insert_equal_lower_bound - (node_ptr h, node_ptr new_node, NodePtrCompare comp) + (const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp) { tree_algorithms::insert_equal_lower_bound(h, new_node, comp); rebalance_after_insertion(h, new_node); @@ -512,18 +536,18 @@ class avltree_algorithms //! ordering compatible with the strict weak ordering used to create the //! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from //! the "header"'s tree. - //! + //! //! Effects: Inserts new_node into the tree, using "hint" as a hint to //! where it will be inserted. If "hint" is the upper_bound //! the insertion takes constant time (two comparisons in the worst case). //! //! Complexity: Logarithmic in general, but it is amortized //! constant time if new_node is inserted immediately before "hint". - //! + //! //! Throws: If "comp" throws. template static node_ptr insert_equal - (node_ptr header, node_ptr hint, node_ptr new_node, NodePtrCompare comp) + (const node_ptr & header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp) { tree_algorithms::insert_equal(header, hint, new_node, comp); rebalance_after_insertion(header, new_node); @@ -535,17 +559,17 @@ class avltree_algorithms //! "pos" must be an iterator pointing to the successor to "new_node" //! once inserted according to the order of already inserted nodes. This function does not //! check "pos" and this precondition must be guaranteed by the caller. - //! + //! //! Effects: Inserts new_node into the tree before "pos". //! //! Complexity: Constant-time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: If "pos" is not the successor of the newly inserted "new_node" //! tree invariants might be broken. static node_ptr insert_before - (node_ptr header, node_ptr pos, node_ptr new_node) + (const node_ptr & header, const node_ptr & pos, const node_ptr & new_node) { tree_algorithms::insert_before(header, pos, new_node); rebalance_after_insertion(header, new_node); @@ -555,17 +579,17 @@ class avltree_algorithms //! Requires: "header" must be the header node of a tree. //! "new_node" must be, according to the used ordering no less than the //! greatest inserted key. - //! + //! //! Effects: Inserts new_node into the tree before "pos". //! //! Complexity: Constant-time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: If "new_node" is less than the greatest inserted key //! tree invariants are broken. This function is slightly faster than //! using "insert_before". - static void push_back(node_ptr header, node_ptr new_node) + static void push_back(const node_ptr & header, const node_ptr & new_node) { tree_algorithms::push_back(header, new_node); rebalance_after_insertion(header, new_node); @@ -574,17 +598,17 @@ class avltree_algorithms //! Requires: "header" must be the header node of a tree. //! "new_node" must be, according to the used ordering, no greater than the //! lowest inserted key. - //! + //! //! Effects: Inserts new_node into the tree before "pos". //! //! Complexity: Constant-time. - //! + //! //! Throws: Nothing. - //! + //! //! Note: If "new_node" is greater than the lowest inserted key //! tree invariants are broken. This function is slightly faster than //! using "insert_before". - static void push_front(node_ptr header, node_ptr new_node) + static void push_front(const node_ptr & header, const node_ptr & new_node) { tree_algorithms::push_front(header, new_node); rebalance_after_insertion(header, new_node); @@ -594,7 +618,7 @@ class avltree_algorithms //! KeyNodePtrCompare is a function object that induces a strict weak //! ordering compatible with the strict weak ordering used to create the //! the tree. NodePtrCompare compares KeyType with a node_ptr. - //! + //! //! Effects: Checks if there is an equivalent node to "key" in the //! tree according to "comp" and obtains the needed information to realize //! a constant-time node insertion if there is no equivalent node. @@ -605,11 +629,11 @@ class avltree_algorithms //! in the returned pair's boolean and fills "commit_data" that is meant to //! be used with the "insert_commit" function to achieve a constant-time //! insertion function. - //! + //! //! Complexity: Average complexity is at most logarithmic. //! //! Throws: If "comp" throws. - //! + //! //! Notes: This function is used to improve performance when constructing //! a node is expensive and the user does not want to have two equivalent nodes //! in the tree: if there is an equivalent value @@ -626,7 +650,7 @@ class avltree_algorithms //! if no more objects are inserted or erased from the set. template static std::pair insert_unique_check - (const_node_ptr header, const KeyType &key + (const const_node_ptr & header, const KeyType &key ,KeyNodePtrCompare comp, insert_commit_data &commit_data) { return tree_algorithms::insert_unique_check(header, key, comp, commit_data); } @@ -635,12 +659,12 @@ class avltree_algorithms //! ordering compatible with the strict weak ordering used to create the //! the tree. NodePtrCompare compares KeyType with a node_ptr. //! "hint" is node from the "header"'s tree. - //! + //! //! Effects: Checks if there is an equivalent node to "key" in the //! tree according to "comp" using "hint" as a hint to where it should be //! inserted and obtains the needed information to realize - //! a constant-time node insertion if there is no equivalent node. - //! If "hint" is the upper_bound the function has constant time + //! a constant-time node insertion if there is no equivalent node. + //! If "hint" is the upper_bound the function has constant time //! complexity (two comparisons in the worst case). //! //! Returns: If there is an equivalent value @@ -649,12 +673,12 @@ class avltree_algorithms //! in the returned pair's boolean and fills "commit_data" that is meant to //! be used with the "insert_commit" function to achieve a constant-time //! insertion function. - //! + //! //! Complexity: Average complexity is at most logarithmic, but it is //! amortized constant time if new_node should be inserted immediately before "hint". //! //! Throws: If "comp" throws. - //! + //! //! Notes: This function is used to improve performance when constructing //! a node is expensive and the user does not want to have two equivalent nodes //! in the tree: if there is an equivalent value @@ -671,7 +695,7 @@ class avltree_algorithms //! if no more objects are inserted or erased from the set. template static std::pair insert_unique_check - (const_node_ptr header, node_ptr hint, const KeyType &key + (const const_node_ptr & header, const node_ptr &hint, const KeyType &key ,KeyNodePtrCompare comp, insert_commit_data &commit_data) { return tree_algorithms::insert_unique_check(header, hint, key, comp, commit_data); } @@ -679,21 +703,21 @@ class avltree_algorithms //! "commit_data" must have been obtained from a previous call to //! "insert_unique_check". No objects should have been inserted or erased //! from the set between the "insert_unique_check" that filled "commit_data" - //! and the call to "insert_commit". - //! - //! + //! and the call to "insert_commit". + //! + //! //! Effects: Inserts new_node in the set using the information obtained //! from the "commit_data" that a previous "insert_check" filled. //! //! Complexity: Constant time. //! //! Throws: Nothing. - //! + //! //! Notes: This function has only sense if a "insert_unique_check" has been //! previously executed to fill "commit_data". No value should be inserted or //! erased between the "insert_check" and "insert_commit" calls. static void insert_unique_commit - (node_ptr header, node_ptr new_value, const insert_commit_data &commit_data) + (const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data) { tree_algorithms::insert_unique_commit(header, new_value, commit_data); rebalance_after_insertion(header, new_value); @@ -704,30 +728,31 @@ class avltree_algorithms //! Effects: Returns a pointer to the header node of the tree. //! //! Complexity: Logarithmic. - //! + //! //! Throws: Nothing. - static node_ptr get_header(node_ptr n) + static node_ptr get_header(const node_ptr & n) { return tree_algorithms::get_header(n); } /// @cond private: //! Requires: p is a node of a tree. - //! + //! //! Effects: Returns true if p is the header of the tree. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - static bool is_header(const_node_ptr p) + static bool is_header(const const_node_ptr & p) { return NodeTraits::get_balance(p) == NodeTraits::zero() && tree_algorithms::is_header(p); } - static void rebalance_after_erasure(node_ptr header, node_ptr x, node_ptr x_parent) + static void rebalance_after_erasure(const node_ptr & header, const node_ptr & xnode, const node_ptr & xnode_parent) { + node_ptr x(xnode), x_parent(xnode_parent); for (node_ptr root = NodeTraits::get_parent(header); x != root; root = NodeTraits::get_parent(header)) { const balance x_parent_balance = NodeTraits::get_balance(x_parent); if(x_parent_balance == NodeTraits::zero()){ - NodeTraits::set_balance(x_parent, + NodeTraits::set_balance(x_parent, (x == NodeTraits::get_right(x_parent) ? NodeTraits::negative() : NodeTraits::positive())); break; // the height didn't change, let's stop here } @@ -797,10 +822,10 @@ class avltree_algorithms } } - static void rebalance_after_insertion(node_ptr header, node_ptr x) + static void rebalance_after_insertion(const node_ptr & header, const node_ptr & xnode) { + node_ptr x(xnode); NodeTraits::set_balance(x, NodeTraits::zero()); - // Rebalance. for(node_ptr root = NodeTraits::get_parent(header); x != root; root = NodeTraits::get_parent(header)){ const balance x_parent_balance = NodeTraits::get_balance(NodeTraits::get_parent(x)); @@ -843,7 +868,7 @@ class avltree_algorithms } } - static void left_right_balancing(node_ptr a, node_ptr b, node_ptr c) + static void left_right_balancing(const node_ptr & a, const node_ptr & b, const node_ptr & c) { // balancing... const balance c_balance = NodeTraits::get_balance(c); @@ -866,7 +891,7 @@ class avltree_algorithms } } - static void rotate_left_right(const node_ptr a, node_ptr hdr) + static void rotate_left_right(const node_ptr a, const node_ptr & hdr) { // | | // // a(-2) c // @@ -883,7 +908,7 @@ class avltree_algorithms left_right_balancing(a, b, c); } - static void rotate_right_left(const node_ptr a, node_ptr hdr) + static void rotate_right_left(const node_ptr a, const node_ptr & hdr) { // | | // // a(pos) c // @@ -900,7 +925,7 @@ class avltree_algorithms left_right_balancing(b, a, c); } - static void rotate_left(const node_ptr x, node_ptr hdr) + static void rotate_left(const node_ptr x, const node_ptr & hdr) { const node_ptr y = NodeTraits::get_right(x); tree_algorithms::rotate_left(x, hdr); @@ -916,7 +941,7 @@ class avltree_algorithms } } - static void rotate_right(const node_ptr x, node_ptr hdr) + static void rotate_right(const node_ptr x, const node_ptr & hdr) { const node_ptr y = NodeTraits::get_left(x); tree_algorithms::rotate_right(x, hdr); @@ -935,8 +960,8 @@ class avltree_algorithms /// @endcond }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/bs_set_hook.hpp b/3party/boost/boost/intrusive/bs_set_hook.hpp index bf8e2de09a..682426a960 100644 --- a/3party/boost/boost/intrusive/bs_set_hook.hpp +++ b/3party/boost/boost/intrusive/bs_set_hook.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -63,16 +63,16 @@ struct make_bs_set_base_hook typedef implementation_defined type; }; -//! Derive a class from bs_set_base_hook in order to store objects in -//! in a bs_set/bs_multiset. bs_set_base_hook holds the data necessary to maintain +//! Derive a class from bs_set_base_hook in order to store objects in +//! in a bs_set/bs_multiset. bs_set_base_hook holds the data necessary to maintain //! the bs_set/bs_multiset and provides an appropriate value_traits class for bs_set/bs_multiset. -//! +//! //! The hook admits the following options: \c tag<>, \c void_pointer<>, //! \c link_mode<>. //! -//! \c tag<> defines a tag to identify the node. -//! The same tag value can be used in different classes, but if a class is -//! derived from more than one \c list_base_hook, then each \c list_base_hook needs its +//! \c tag<> defines a tag to identify the node. +//! The same tag value can be used in different classes, but if a class is +//! derived from more than one \c list_base_hook, then each \c list_base_hook needs its //! unique tag. //! //! \c void_pointer<> is the pointer type that will be used internally in the hook @@ -99,27 +99,27 @@ class bs_set_base_hook public: //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. bs_set_base_hook(); //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. The argument is ignored. - //! - //! Throws: Nothing. - //! + //! + //! Throws: Nothing. + //! //! Rationale: Providing a copy-constructor - //! makes classes using the hook STL-compliant without forcing the + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. bs_set_base_hook(const bs_set_base_hook& ); //! Effects: Empty function. The argument is ignored. - //! - //! Throws: Nothing. - //! - //! Rationale: Providing an assignment operator - //! makes classes using the hook STL-compliant without forcing the + //! + //! Throws: Nothing. + //! + //! Rationale: Providing an assignment operator + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. bs_set_base_hook& operator=(const bs_set_base_hook& ); @@ -128,37 +128,37 @@ class bs_set_base_hook //! nothing (ie. no code is generated). If link_mode is \c safe_link and the //! object is stored in a set an assertion is raised. If link_mode is //! \c auto_unlink and \c is_linked() is true, the node is unlinked. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. ~bs_set_base_hook(); - //! Effects: Swapping two nodes swaps the position of the elements - //! related to those nodes in one or two containers. That is, if the node - //! this is part of the element e1, the node x is part of the element e2 - //! and both elements are included in the containers s1 and s2, then after - //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 - //! at the position of e1. If one element is not in a container, then - //! after the swap-operation the other element is not in a container. - //! Iterators to e1 and e2 related to those nodes are invalidated. + //! Effects: Swapping two nodes swaps the position of the elements + //! related to those nodes in one or two containers. That is, if the node + //! this is part of the element e1, the node x is part of the element e2 + //! and both elements are included in the containers s1 and s2, then after + //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 + //! at the position of e1. If one element is not in a container, then + //! after the swap-operation the other element is not in a container. + //! Iterators to e1 and e2 related to those nodes are invalidated. //! - //! Complexity: Constant + //! Complexity: Constant //! - //! Throws: Nothing. + //! Throws: Nothing. void swap_nodes(bs_set_base_hook &other); //! Precondition: link_mode must be \c safe_link or \c auto_unlink. //! //! Returns: true, if the node belongs to a container, false - //! otherwise. This function can be used to test whether \c set::iterator_to - //! will return a valid iterator. + //! otherwise. This function can be used to test whether \c set::iterator_to + //! will return a valid iterator. //! - //! Complexity: Constant + //! Complexity: Constant bool is_linked() const; //! Effects: Removes the node if it's inserted in a container. //! This function is only allowed if link_mode is \c auto_unlink. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. void unlink(); #endif }; @@ -198,7 +198,7 @@ struct make_bs_set_member_hook //! Put a public data member bs_set_member_hook in order to store objects of this class in //! a bs_set/bs_multiset. bs_set_member_hook holds the data necessary for maintaining the //! bs_set/bs_multiset and provides an appropriate value_traits class for bs_set/bs_multiset. -//! +//! //! The hook admits the following options: \c void_pointer<>, \c link_mode<>. //! //! \c void_pointer<> is the pointer type that will be used internally in the hook @@ -224,27 +224,27 @@ class bs_set_member_hook public: //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. bs_set_member_hook(); //! Effects: If link_mode is \c auto_unlink or \c safe_link //! initializes the node to an unlinked state. The argument is ignored. - //! - //! Throws: Nothing. - //! + //! + //! Throws: Nothing. + //! //! Rationale: Providing a copy-constructor - //! makes classes using the hook STL-compliant without forcing the + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. bs_set_member_hook(const bs_set_member_hook& ); //! Effects: Empty function. The argument is ignored. - //! - //! Throws: Nothing. - //! - //! Rationale: Providing an assignment operator - //! makes classes using the hook STL-compliant without forcing the + //! + //! Throws: Nothing. + //! + //! Rationale: Providing an assignment operator + //! makes classes using the hook STL-compliant without forcing the //! user to do some additional work. \c swap can be used to emulate //! move-semantics. bs_set_member_hook& operator=(const bs_set_member_hook& ); @@ -253,43 +253,43 @@ class bs_set_member_hook //! nothing (ie. no code is generated). If link_mode is \c safe_link and the //! object is stored in a set an assertion is raised. If link_mode is //! \c auto_unlink and \c is_linked() is true, the node is unlinked. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. ~bs_set_member_hook(); - //! Effects: Swapping two nodes swaps the position of the elements - //! related to those nodes in one or two containers. That is, if the node - //! this is part of the element e1, the node x is part of the element e2 - //! and both elements are included in the containers s1 and s2, then after - //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 - //! at the position of e1. If one element is not in a container, then - //! after the swap-operation the other element is not in a container. - //! Iterators to e1 and e2 related to those nodes are invalidated. + //! Effects: Swapping two nodes swaps the position of the elements + //! related to those nodes in one or two containers. That is, if the node + //! this is part of the element e1, the node x is part of the element e2 + //! and both elements are included in the containers s1 and s2, then after + //! the swap-operation e1 is in s2 at the position of e2 and e2 is in s1 + //! at the position of e1. If one element is not in a container, then + //! after the swap-operation the other element is not in a container. + //! Iterators to e1 and e2 related to those nodes are invalidated. //! - //! Complexity: Constant + //! Complexity: Constant //! - //! Throws: Nothing. + //! Throws: Nothing. void swap_nodes(bs_set_member_hook &other); //! Precondition: link_mode must be \c safe_link or \c auto_unlink. //! //! Returns: true, if the node belongs to a container, false - //! otherwise. This function can be used to test whether \c set::iterator_to - //! will return a valid iterator. + //! otherwise. This function can be used to test whether \c set::iterator_to + //! will return a valid iterator. //! - //! Complexity: Constant + //! Complexity: Constant bool is_linked() const; //! Effects: Removes the node if it's inserted in a container. //! This function is only allowed if link_mode is \c auto_unlink. - //! - //! Throws: Nothing. + //! + //! Throws: Nothing. void unlink(); #endif }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/circular_list_algorithms.hpp b/3party/boost/boost/intrusive/circular_list_algorithms.hpp index 16b1971b29..282f4741a1 100644 --- a/3party/boost/boost/intrusive/circular_list_algorithms.hpp +++ b/3party/boost/boost/intrusive/circular_list_algorithms.hpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Olaf Krzikalla 2004-2006. -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -40,11 +40,11 @@ namespace intrusive { //! Static functions: //! //! static node_ptr get_previous(const_node_ptr n); -//! +//! //! static void set_previous(node_ptr n, node_ptr prev); -//! +//! //! static node_ptr get_next(const_node_ptr n); -//! +//! //! static void set_next(node_ptr n, node_ptr next); template class circular_list_algorithms @@ -57,34 +57,34 @@ class circular_list_algorithms //! Effects: Constructs an non-used list element, so that //! inited(this_node) == true - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void init(node_ptr this_node) + static void init(const node_ptr &this_node) { - NodeTraits::set_next(this_node, node_ptr(0)); - NodeTraits::set_previous(this_node, node_ptr(0)); + NodeTraits::set_next(this_node, node_ptr()); + NodeTraits::set_previous(this_node, node_ptr()); } //! Effects: Returns true is "this_node" is in a non-used state //! as if it was initialized by the "init" function. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static bool inited(const_node_ptr this_node) + static bool inited(const const_node_ptr &this_node) { return !NodeTraits::get_next(this_node); } //! Effects: Constructs an empty list, making this_node the only //! node of the circular list: //! NodeTraits::get_next(this_node) == NodeTraits::get_previous(this_node) //! == this_node. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void init_header(node_ptr this_node) + static void init_header(const node_ptr &this_node) { NodeTraits::set_next(this_node, this_node); NodeTraits::set_previous(this_node, this_node); @@ -92,28 +92,28 @@ class circular_list_algorithms //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Returns true is "this_node" is the only node of a circular list: //! return NodeTraits::get_next(this_node) == this_node - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static bool unique(const_node_ptr this_node) + static bool unique(const const_node_ptr &this_node) { node_ptr next = NodeTraits::get_next(this_node); return !next || next == this_node; } //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Returns the number of nodes in a circular list. If the circular list //! is empty, returns 1. - //! - //! Complexity: Linear - //! + //! + //! Complexity: Linear + //! //! Throws: Nothing. - static std::size_t count(const_node_ptr this_node) + static std::size_t count(const const_node_ptr &this_node) { std::size_t result = 0; const_node_ptr p = this_node; @@ -125,16 +125,16 @@ class circular_list_algorithms } //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Unlinks the node from the circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static node_ptr unlink(node_ptr this_node) + static node_ptr unlink(const node_ptr &this_node) { - if(NodeTraits::get_next(this_node)){ - node_ptr next(NodeTraits::get_next(this_node)); + node_ptr next(NodeTraits::get_next(this_node)); + if(next){ node_ptr prev(NodeTraits::get_previous(this_node)); NodeTraits::set_next(prev, next); NodeTraits::set_previous(next, prev); @@ -146,13 +146,13 @@ class circular_list_algorithms } //! Requires: b and e must be nodes of the same circular list or an empty range. - //! + //! //! Effects: Unlinks the node [b, e) from the circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void unlink(node_ptr b, node_ptr e) + static void unlink(const node_ptr &b, const node_ptr &e) { if (b != e) { node_ptr prevb(NodeTraits::get_previous(b)); @@ -162,49 +162,55 @@ class circular_list_algorithms } //! Requires: nxt_node must be a node of a circular list. - //! + //! //! Effects: Links this_node before nxt_node in the circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void link_before(node_ptr nxt_node, node_ptr this_node) + static void link_before(const node_ptr &nxt_node, const node_ptr &this_node) { node_ptr prev(NodeTraits::get_previous(nxt_node)); NodeTraits::set_previous(this_node, prev); - NodeTraits::set_next(prev, this_node); - NodeTraits::set_previous(nxt_node, this_node); NodeTraits::set_next(this_node, nxt_node); + //nxt_node might be an alias for prev->next_ + //so use it before update it before NodeTraits::set_next(prev, ...) + //is called and the reference changes it's value + NodeTraits::set_previous(nxt_node, this_node); + NodeTraits::set_next(prev, this_node); } //! Requires: prev_node must be a node of a circular list. - //! + //! //! Effects: Links this_node after prev_node in the circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void link_after(node_ptr prev_node, node_ptr this_node) + static void link_after(const node_ptr &prev_node, const node_ptr &this_node) { node_ptr next(NodeTraits::get_next(prev_node)); NodeTraits::set_previous(this_node, prev_node); NodeTraits::set_next(this_node, next); - NodeTraits::set_previous(next, this_node); + //prev_node might be an alias for next->next_ + //so use it before update it before NodeTraits::set_previous(next, ...) + //is called and the reference changes it's value NodeTraits::set_next(prev_node, this_node); + NodeTraits::set_previous(next, this_node); } //! Requires: this_node and other_node must be nodes inserted //! in circular lists or be empty circular lists. - //! + //! //! Effects: Swaps the position of the nodes: this_node is inserted in //! other_nodes position in the second circular list and the other_node is inserted //! in this_node's position in the first circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. /* - static void swap_nodes(node_ptr this_node, node_ptr other_node) + static void swap_nodes(const node_ptr &this_node, const node_ptr &other_node) { if (other_node == this_node) @@ -242,22 +248,22 @@ class circular_list_algorithms */ //Watanabe version - private: - static void swap_prev(node_ptr this_node, node_ptr other_node) - { - node_ptr temp(NodeTraits::get_previous(this_node)); - NodeTraits::set_previous(this_node, NodeTraits::get_previous(other_node)); - NodeTraits::set_previous(other_node, temp); - } - static void swap_next(node_ptr this_node, node_ptr other_node) - { - node_ptr temp(NodeTraits::get_next(this_node)); - NodeTraits::set_next(this_node, NodeTraits::get_next(other_node)); - NodeTraits::set_next(other_node, temp); - } + private: + static void swap_prev(const node_ptr &this_node, const node_ptr &other_node) + { + node_ptr temp(NodeTraits::get_previous(this_node)); + NodeTraits::set_previous(this_node, NodeTraits::get_previous(other_node)); + NodeTraits::set_previous(other_node, temp); + } + static void swap_next(const node_ptr &this_node, const node_ptr &other_node) + { + node_ptr temp(NodeTraits::get_next(this_node)); + NodeTraits::set_next(this_node, NodeTraits::get_next(other_node)); + NodeTraits::set_next(other_node, temp); + } - public: - static void swap_nodes(node_ptr this_node, node_ptr other_node) + public: + static void swap_nodes(const node_ptr &this_node, const node_ptr &other_node) { if (other_node == this_node) return; @@ -270,15 +276,15 @@ class circular_list_algorithms init_header(other_node); } - node_ptr next_this(NodeTraits::get_next(this_node)); - node_ptr prev_this(NodeTraits::get_previous(this_node)); - node_ptr next_other(NodeTraits::get_next(other_node)); - node_ptr prev_other(NodeTraits::get_previous(other_node)); - //these first two swaps must happen before the other two - swap_prev(next_this, next_other); - swap_next(prev_this, prev_other); - swap_next(this_node, other_node); - swap_prev(this_node, other_node); + node_ptr next_this(NodeTraits::get_next(this_node)); + node_ptr prev_this(NodeTraits::get_previous(this_node)); + node_ptr next_other(NodeTraits::get_next(other_node)); + node_ptr prev_other(NodeTraits::get_previous(other_node)); + //these first two swaps must happen before the other two + swap_prev(next_this, next_other); + swap_next(prev_this, prev_other); + swap_next(this_node, other_node); + swap_prev(this_node, other_node); if(this_inited){ init(other_node); @@ -289,16 +295,16 @@ class circular_list_algorithms } //! Requires: b and e must be nodes of the same circular list or an empty range. - //! and p must be a node of a different circular list or may not be an iterator in + //! and p must be a node of a different circular list or may not be an iterator in // [b, e). - //! + //! //! Effects: Removes the nodes from [b, e) range from their circular list and inserts //! them before p in p's circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void transfer(node_ptr p, node_ptr b, node_ptr e) + static void transfer(const node_ptr &p, const node_ptr &b, const node_ptr &e) { if (b != e) { node_ptr prev_p(NodeTraits::get_previous(p)); @@ -315,15 +321,15 @@ class circular_list_algorithms //! Requires: i must a node of a circular list //! and p must be a node of a different circular list. - //! + //! //! Effects: Removes the node i from its circular list and inserts - //! it before p in p's circular list. + //! it before p in p's circular list. //! If p == i or p == NodeTraits::get_next(i), this function is a null operation. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void transfer(node_ptr p, node_ptr i) + static void transfer(const node_ptr &p, const node_ptr &i) { node_ptr n(NodeTraits::get_next(i)); if(n != p && i != p){ @@ -339,16 +345,16 @@ class circular_list_algorithms } } - //! Effects: Reverses the order of elements in the list. - //! + //! Effects: Reverses the order of elements in the list. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear time. - static void reverse(node_ptr p) + static void reverse(const node_ptr &p) { node_ptr f(NodeTraits::get_next(p)); node_ptr i(NodeTraits::get_next(f)), e(p); - + while(i != e) { node_ptr n = i; i = NodeTraits::get_next(i); @@ -358,11 +364,11 @@ class circular_list_algorithms } //! Effects: Moves the node p n positions towards the end of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear to the number of moved positions. - static void move_backwards(node_ptr p, std::size_t n) + static void move_backwards(const node_ptr &p, std::size_t n) { //Null shift, nothing to do if(!n) return; @@ -378,11 +384,11 @@ class circular_list_algorithms } //! Effects: Moves the node p n positions towards the beginning of the list. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear to the number of moved positions. - static void move_forward(node_ptr p, std::size_t n) + static void move_forward(const node_ptr &p, std::size_t n) { //Null shift, nothing to do if(!n) return; @@ -399,8 +405,8 @@ class circular_list_algorithms } }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/circular_slist_algorithms.hpp b/3party/boost/boost/intrusive/circular_slist_algorithms.hpp index 8bb95cdf49..c39b3d0c5a 100644 --- a/3party/boost/boost/intrusive/circular_slist_algorithms.hpp +++ b/3party/boost/boost/intrusive/circular_slist_algorithms.hpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Olaf Krzikalla 2004-2006. -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -42,7 +42,7 @@ namespace intrusive { //! Static functions: //! //! static node_ptr get_next(const_node_ptr n); -//! +//! //! static void set_next(node_ptr n, node_ptr next); template class circular_slist_algorithms @@ -63,38 +63,38 @@ class circular_slist_algorithms //! Effects: Constructs an non-used list element, putting the next //! pointer to null: - //! NodeTraits::get_next(this_node) == 0 - //! - //! Complexity: Constant - //! + //! NodeTraits::get_next(this_node) == node_ptr() + //! + //! Complexity: Constant + //! //! Throws: Nothing. static void init(node_ptr this_node); //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Returns true is "this_node" is the only node of a circular list: //! or it's a not inserted node: - //! return !NodeTraits::get_next(this_node) || NodeTraits::get_next(this_node) == this_node - //! - //! Complexity: Constant - //! + //! return node_ptr() == NodeTraits::get_next(this_node) || NodeTraits::get_next(this_node) == this_node + //! + //! Complexity: Constant + //! //! Throws: Nothing. static bool unique(const_node_ptr this_node); //! Effects: Returns true is "this_node" has the same state as //! if it was inited using "init(node_ptr)" - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. static bool inited(const_node_ptr this_node); //! Requires: prev_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Unlinks the next node of prev_node from the circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. static void unlink_after(node_ptr prev_node); @@ -103,28 +103,28 @@ class circular_slist_algorithms //! //! Effects: Unlinks the range (prev_node, last_node) from the circular list. //! - //! Complexity: Constant + //! Complexity: Constant //! //! Throws: Nothing. static void unlink_after(node_ptr prev_node, node_ptr last_node); //! Requires: prev_node must be a node of a circular list. - //! + //! //! Effects: Links this_node after prev_node in the circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. static void link_after(node_ptr prev_node, node_ptr this_node); //! Requires: b and e must be nodes of the same circular list or an empty range. //! and p must be a node of a different circular list. - //! + //! //! Effects: Removes the nodes from (b, e] range from their circular list and inserts //! them after p in p's circular list. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. static void transfer_after(node_ptr p, node_ptr b, node_ptr e); @@ -133,55 +133,55 @@ class circular_slist_algorithms //! Effects: Constructs an empty list, making this_node the only //! node of the circular list: //! NodeTraits::get_next(this_node) == this_node. - //! - //! Complexity: Constant - //! + //! + //! Complexity: Constant + //! //! Throws: Nothing. - static void init_header(node_ptr this_node) - { NodeTraits::set_next(this_node, this_node); } + static void init_header(const node_ptr &this_node) + { NodeTraits::set_next(this_node, this_node); } //! Requires: this_node and prev_init_node must be in the same circular list. - //! + //! //! Effects: Returns the previous node of this_node in the circular list starting. //! the search from prev_init_node. The first node checked for equality //! is NodeTraits::get_next(prev_init_node). - //! + //! //! Complexity: Linear to the number of elements between prev_init_node and this_node. - //! + //! //! Throws: Nothing. - static node_ptr get_previous_node(node_ptr prev_init_node, node_ptr this_node) + static node_ptr get_previous_node(const node_ptr &prev_init_node, const node_ptr &this_node) { return base_t::get_previous_node(prev_init_node, this_node); } //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Returns the previous node of this_node in the circular list. - //! + //! //! Complexity: Linear to the number of elements in the circular list. - //! + //! //! Throws: Nothing. - static node_ptr get_previous_node(node_ptr this_node) + static node_ptr get_previous_node(const node_ptr & this_node) { return base_t::get_previous_node(this_node, this_node); } //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Returns the previous node of the previous node of this_node in the circular list. - //! + //! //! Complexity: Linear to the number of elements in the circular list. - //! + //! //! Throws: Nothing. - static node_ptr get_previous_previous_node(node_ptr this_node) + static node_ptr get_previous_previous_node(const node_ptr & this_node) { return get_previous_previous_node(this_node, this_node); } //! Requires: this_node and prev_prev_init_node must be in the same circular list. - //! + //! //! Effects: Returns the previous node of the previous node of this_node in the //! circular list starting. the search from prev_init_node. The first node checked //! for equality is NodeTraits::get_next((NodeTraits::get_next(prev_prev_init_node)). - //! + //! //! Complexity: Linear to the number of elements in the circular list. - //! + //! //! Throws: Nothing. - static node_ptr get_previous_previous_node(node_ptr prev_prev_init_node, node_ptr this_node) + static node_ptr get_previous_previous_node(const node_ptr & prev_prev_init_node, const node_ptr & this_node) { node_ptr p = prev_prev_init_node; node_ptr p_next = NodeTraits::get_next(p); @@ -195,14 +195,14 @@ class circular_slist_algorithms } //! Requires: this_node must be in a circular list or be an empty circular list. - //! + //! //! Effects: Returns the number of nodes in a circular list. If the circular list //! is empty, returns 1. - //! - //! Complexity: Linear - //! + //! + //! Complexity: Linear + //! //! Throws: Nothing. - static std::size_t count(const_node_ptr this_node) + static std::size_t count(const const_node_ptr & this_node) { std::size_t result = 0; const_node_ptr p = this_node; @@ -214,39 +214,39 @@ class circular_slist_algorithms } //! Requires: this_node must be in a circular list, be an empty circular list or be inited. - //! + //! //! Effects: Unlinks the node from the circular list. - //! - //! Complexity: Linear to the number of elements in the circular list - //! + //! + //! Complexity: Linear to the number of elements in the circular list + //! //! Throws: Nothing. - static void unlink(node_ptr this_node) + static void unlink(const node_ptr & this_node) { if(NodeTraits::get_next(this_node)) base_t::unlink_after(get_previous_node(this_node)); } //! Requires: nxt_node must be a node of a circular list. - //! + //! //! Effects: Links this_node before nxt_node in the circular list. - //! - //! Complexity: Linear to the number of elements in the circular list. - //! + //! + //! Complexity: Linear to the number of elements in the circular list. + //! //! Throws: Nothing. - static void link_before (node_ptr nxt_node, node_ptr this_node) + static void link_before (const node_ptr & nxt_node, const node_ptr & this_node) { base_t::link_after(get_previous_node(nxt_node), this_node); } //! Requires: this_node and other_node must be nodes inserted //! in circular lists or be empty circular lists. - //! + //! //! Effects: Swaps the position of the nodes: this_node is inserted in //! other_nodes position in the second circular list and the other_node is inserted //! in this_node's position in the first circular list. - //! - //! Complexity: Linear to number of elements of both lists - //! + //! + //! Complexity: Linear to number of elements of both lists + //! //! Throws: Nothing. - static void swap_nodes(node_ptr this_node, node_ptr other_node) + static void swap_nodes(const node_ptr & this_node, const node_ptr & other_node) { if (other_node == this_node) return; @@ -279,14 +279,14 @@ class circular_slist_algorithms } } - //! Effects: Reverses the order of elements in the list. - //! + //! Effects: Reverses the order of elements in the list. + //! //! Throws: Nothing. - //! + //! //! Complexity: This function is linear to the contained elements. - static void reverse(node_ptr p) + static void reverse(const node_ptr & p) { - node_ptr i = NodeTraits::get_next(p), e(p); + node_ptr i = NodeTraits::get_next(p), e(p); for (;;) { node_ptr nxt(NodeTraits::get_next(i)); if (nxt == e) @@ -301,20 +301,20 @@ class circular_slist_algorithms //! Null if n leads to no movement. //! //! Throws: Nothing. - //! + //! //! Complexity: Linear to the number of elements plus the number moved positions. - static node_ptr move_backwards(node_ptr p, std::size_t n) + static node_ptr move_backwards(const node_ptr & p, std::size_t n) { //Null shift, nothing to do - if(!n) return node_ptr(0); + if(!n) return node_ptr(); node_ptr first = NodeTraits::get_next(p); //count() == 1 or 2, nothing to do if(NodeTraits::get_next(first) == p) - return node_ptr(0); + return node_ptr(); bool end_found = false; - node_ptr new_last(0); + node_ptr new_last = node_ptr(); //Now find the new last node according to the shift count. //If we find p before finding the new last node @@ -327,7 +327,7 @@ class circular_slist_algorithms //Shortcut the shift with the modulo of the size of the list n %= i; if(!n) - return node_ptr(0); + return node_ptr(); i = 0; //Unlink p and continue the new first node search first = NodeTraits::get_next(p); @@ -348,21 +348,21 @@ class circular_slist_algorithms } //! Effects: Moves the node p n positions towards the beginning of the list. - //! + //! //! Returns: The previous node of p after the function if there has been any movement, //! Null if n leads equals to no movement. - //! + //! //! Throws: Nothing. - //! + //! //! Complexity: Linear to the number of elements plus the number moved positions. - static node_ptr move_forward(node_ptr p, std::size_t n) + static node_ptr move_forward(const node_ptr & p, std::size_t n) { //Null shift, nothing to do - if(!n) return node_ptr(0); + if(!n) return node_ptr(); node_ptr first = node_traits::get_next(p); //count() == 1 or 2, nothing to do - if(node_traits::get_next(first) == p) return node_ptr(0); + if(node_traits::get_next(first) == p) return node_ptr(); //Iterate until p is found to know where the current last node is. //If the shift count is less than the size of the list, we can also obtain @@ -381,8 +381,8 @@ class circular_slist_algorithms //Shortcut the shift with the modulo of the size of the list std::size_t new_before_last_pos = (distance - (n % distance))% distance; //If the shift is a multiple of the size there is nothing to do - if(!new_before_last_pos) return node_ptr(0); - + if(!new_before_last_pos) return node_ptr(); + for( new_last = p ; new_before_last_pos-- ; new_last = node_traits::get_next(new_last)){ @@ -397,8 +397,8 @@ class circular_slist_algorithms } }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/derivation_value_traits.hpp b/3party/boost/boost/intrusive/derivation_value_traits.hpp index 8711d5696b..0aae01b619 100644 --- a/3party/boost/boost/intrusive/derivation_value_traits.hpp +++ b/3party/boost/boost/intrusive/derivation_value_traits.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -15,6 +15,7 @@ #include #include +#include #include namespace boost { @@ -34,8 +35,10 @@ struct derivation_value_traits typedef typename node_traits::const_node_ptr const_node_ptr; typedef typename boost::pointer_to_other::type pointer; typedef typename boost::pointer_to_other::type const_pointer; - typedef typename std::iterator_traits::reference reference; - typedef typename std::iterator_traits::reference const_reference; + typedef typename boost::intrusive:: + pointer_traits::reference reference; + typedef typename boost::intrusive:: + pointer_traits::reference const_reference; static const link_mode_type link_mode = LinkMode; static node_ptr to_node_ptr(reference value) @@ -44,7 +47,7 @@ struct derivation_value_traits static const_node_ptr to_node_ptr(const_reference value) { return node_ptr(&value); } - static pointer to_value_ptr(node_ptr n) + static pointer to_value_ptr(const node_ptr &n) { // This still fails in gcc < 4.4 so forget about it // using ::boost::static_pointer_cast; @@ -52,7 +55,7 @@ struct derivation_value_traits return pointer(&static_cast(*n)); } - static const_pointer to_value_ptr(const_node_ptr n) + static const_pointer to_value_ptr(const const_node_ptr &n) { // This still fails in gcc < 4.4 so forget about it // using ::boost::static_pointer_cast; @@ -61,7 +64,7 @@ struct derivation_value_traits } }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #endif //BOOST_INTRUSIVE_DERIVATION_VALUE_TRAITS_HPP diff --git a/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp b/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp index 513bdd9fbb..b274135a90 100644 --- a/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp +++ b/3party/boost/boost/intrusive/detail/any_node_and_algorithms.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -16,9 +16,9 @@ #include #include #include -#include +#include #include -#include +#include #include namespace boost { @@ -27,8 +27,8 @@ namespace intrusive { template struct any_node { - typedef typename boost::pointer_to_other - ::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; node_ptr node_ptr_1; node_ptr node_ptr_2; node_ptr node_ptr_3; @@ -39,21 +39,21 @@ template struct any_list_node_traits { typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; - static node_ptr get_next(const_node_ptr n) + static const node_ptr &get_next(const const_node_ptr & n) { return n->node_ptr_1; } - static void set_next(node_ptr n, node_ptr next) + static void set_next(const node_ptr & n, const node_ptr & next) { n->node_ptr_1 = next; } - static node_ptr get_previous(const_node_ptr n) + static const node_ptr &get_previous(const const_node_ptr & n) { return n->node_ptr_2; } - static void set_previous(node_ptr n, node_ptr prev) + static void set_previous(const node_ptr & n, const node_ptr & prev) { n->node_ptr_2 = prev; } }; @@ -62,15 +62,15 @@ template struct any_slist_node_traits { typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; - static node_ptr get_next(const_node_ptr n) + static const node_ptr &get_next(const const_node_ptr & n) { return n->node_ptr_1; } - static void set_next(node_ptr n, node_ptr next) + static void set_next(const node_ptr & n, const node_ptr & next) { n->node_ptr_1 = next; } }; @@ -87,26 +87,23 @@ struct any_unordered_node_traits static const bool store_hash = true; static const bool optimize_multikey = true; - static node_ptr get_next(const_node_ptr n) - { - using ::boost::static_pointer_cast; - return static_pointer_cast(n->node_ptr_1); - } + static const node_ptr &get_next(const const_node_ptr & n) + { return n->node_ptr_1; } - static void set_next(node_ptr n, node_ptr next) + static void set_next(const node_ptr & n, const node_ptr & next) { n->node_ptr_1 = next; } - static node_ptr get_prev_in_group(const_node_ptr n) + static node_ptr get_prev_in_group(const const_node_ptr & n) { return n->node_ptr_2; } - static void set_prev_in_group(node_ptr n, node_ptr prev) + static void set_prev_in_group(const node_ptr & n, const node_ptr & prev) { n->node_ptr_2 = prev; } - static std::size_t get_hash(const_node_ptr n) - { return n->size_t_1; } + static std::size_t get_hash(const const_node_ptr & n) + { return n->size_t_1; } - static void set_hash(node_ptr n, std::size_t h) - { n->size_t_1 = h; } + static void set_hash(const node_ptr & n, std::size_t h) + { n->size_t_1 = h; } }; @@ -115,35 +112,35 @@ struct any_rbtree_node_traits { typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; typedef std::size_t color; - static node_ptr get_parent(const_node_ptr n) + static const node_ptr &get_parent(const const_node_ptr & n) { return n->node_ptr_1; } - static void set_parent(node_ptr n, node_ptr p) + static void set_parent(const node_ptr & n, const node_ptr & p) { n->node_ptr_1 = p; } - static node_ptr get_left(const_node_ptr n) + static const node_ptr &get_left(const const_node_ptr & n) { return n->node_ptr_2; } - static void set_left(node_ptr n, node_ptr l) + static void set_left(const node_ptr & n, const node_ptr & l) { n->node_ptr_2 = l; } - static node_ptr get_right(const_node_ptr n) + static const node_ptr &get_right(const const_node_ptr & n) { return n->node_ptr_3; } - static void set_right(node_ptr n, node_ptr r) + static void set_right(const node_ptr & n, const node_ptr & r) { n->node_ptr_3 = r; } - static color get_color(const_node_ptr n) + static color get_color(const const_node_ptr & n) { return n->size_t_1; } - static void set_color(node_ptr n, color c) + static void set_color(const node_ptr & n, color c) { n->size_t_1 = c; } static color black() @@ -159,34 +156,34 @@ struct any_avltree_node_traits { typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; typedef std::size_t balance; - static node_ptr get_parent(const_node_ptr n) + static const node_ptr &get_parent(const const_node_ptr & n) { return n->node_ptr_1; } - static void set_parent(node_ptr n, node_ptr p) + static void set_parent(const node_ptr & n, const node_ptr & p) { n->node_ptr_1 = p; } - static node_ptr get_left(const_node_ptr n) + static const node_ptr &get_left(const const_node_ptr & n) { return n->node_ptr_2; } - static void set_left(node_ptr n, node_ptr l) + static void set_left(const node_ptr & n, const node_ptr & l) { n->node_ptr_2 = l; } - static node_ptr get_right(const_node_ptr n) + static const node_ptr &get_right(const const_node_ptr & n) { return n->node_ptr_3; } - static void set_right(node_ptr n, node_ptr r) + static void set_right(const node_ptr & n, const node_ptr & r) { n->node_ptr_3 = r; } - static balance get_balance(const_node_ptr n) + static balance get_balance(const const_node_ptr & n) { return n->size_t_1; } - static void set_balance(node_ptr n, balance b) + static void set_balance(const node_ptr & n, balance b) { n->size_t_1 = b; } static balance negative() @@ -205,27 +202,27 @@ struct any_tree_node_traits { typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; - static node_ptr get_parent(const_node_ptr n) + static const node_ptr &get_parent(const const_node_ptr & n) { return n->node_ptr_1; } - static void set_parent(node_ptr n, node_ptr p) + static void set_parent(const node_ptr & n, const node_ptr & p) { n->node_ptr_1 = p; } - static node_ptr get_left(const_node_ptr n) + static const node_ptr &get_left(const const_node_ptr & n) { return n->node_ptr_2; } - static void set_left(node_ptr n, node_ptr l) + static void set_left(const node_ptr & n, const node_ptr & l) { n->node_ptr_2 = l; } - static node_ptr get_right(const_node_ptr n) + static const node_ptr &get_right(const const_node_ptr & n) { return n->node_ptr_3; } - static void set_right(node_ptr n, node_ptr r) + static void set_right(const node_ptr & n, const node_ptr & r) { n->node_ptr_3 = r; } }; @@ -234,10 +231,10 @@ class any_node_traits { public: typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; }; template @@ -249,42 +246,42 @@ class any_algorithms public: typedef any_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer::type const_node_ptr; typedef any_node_traits node_traits; //! Requires: node must not be part of any tree. //! //! Effects: After the function unique(node) == true. - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. //! //! Nodes: If node is inserted in a tree, this function corrupts the tree. - static void init(node_ptr node) + static void init(const node_ptr & node) { node->node_ptr_1 = 0; }; //! Effects: Returns true if node is in the same state as if called init(node) - //! + //! //! Complexity: Constant. - //! + //! //! Throws: Nothing. - static bool inited(const_node_ptr node) + static bool inited(const const_node_ptr & node) { return !node->node_ptr_1; }; - static bool unique(const_node_ptr node) + static bool unique(const const_node_ptr & node) { return 0 == node->node_ptr_1; } - static void unlink(node_ptr) + static void unlink(const node_ptr &) { //Auto-unlink hooks and unlink() are not available for any hooks any_algorithms::template function_not_available_for_any_hooks(); } - static void swap_nodes(node_ptr l, node_ptr r) + static void swap_nodes(const node_ptr & l, const node_ptr & r) { //Any nodes have no swap_nodes capability because they don't know //what algorithm they must use to unlink the node from the container @@ -292,8 +289,8 @@ class any_algorithms } }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/detail/assert.hpp b/3party/boost/boost/intrusive/detail/assert.hpp index cfe392bfb0..33de97f701 100644 --- a/3party/boost/boost/intrusive/detail/assert.hpp +++ b/3party/boost/boost/intrusive/detail/assert.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -11,7 +11,7 @@ ///////////////////////////////////////////////////////////////////////////// #ifndef BOOST_INTRUSIVE_DETAIL_ASSERT_HPP -#define BOOST_INTRUSIVE_DETAIL_ASSERT_HPP +#define BOOST_INTRUSIVE_DETAIL_ASSERT_HPP #if defined(_MSC_VER)&&(_MSC_VER>=1200) #pragma once diff --git a/3party/boost/boost/intrusive/detail/avltree_node.hpp b/3party/boost/boost/intrusive/detail/avltree_node.hpp index 92458a4371..aec0dabd4b 100644 --- a/3party/boost/boost/intrusive/detail/avltree_node.hpp +++ b/3party/boost/boost/intrusive/detail/avltree_node.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007. +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include #include @@ -33,9 +33,9 @@ namespace intrusive { template struct compact_avltree_node { - typedef typename pointer_to_other - >::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + >::type node_ptr; enum balance { negative_t, zero_t, positive_t }; node_ptr parent_, left_, right_; }; @@ -44,9 +44,9 @@ struct compact_avltree_node template struct avltree_node { - typedef typename pointer_to_other - >::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + >::type node_ptr; enum balance { negative_t, zero_t, positive_t }; node_ptr parent_, left_, right_; balance balance_; @@ -59,34 +59,37 @@ struct default_avltree_node_traits_impl { typedef avltree_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + ::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + ::type const_node_ptr; + typedef typename node::balance balance; - static node_ptr get_parent(const_node_ptr n) + static const node_ptr & get_parent(const const_node_ptr & n) { return n->parent_; } - static void set_parent(node_ptr n, node_ptr p) + static void set_parent(const node_ptr & n, const node_ptr & p) { n->parent_ = p; } - static node_ptr get_left(const_node_ptr n) + static const node_ptr & get_left(const const_node_ptr & n) { return n->left_; } - static void set_left(node_ptr n, node_ptr l) + static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static node_ptr get_right(const_node_ptr n) + static const node_ptr & get_right(const const_node_ptr & n) { return n->right_; } - static void set_right(node_ptr n, node_ptr r) + static void set_right(const node_ptr & n, const node_ptr & r) { n->right_ = r; } - static balance get_balance(const_node_ptr n) + static balance get_balance(const const_node_ptr & n) { return n->balance_; } - static void set_balance(node_ptr n, balance b) + static void set_balance(const node_ptr & n, balance b) { n->balance_ = b; } static balance negative() @@ -105,36 +108,39 @@ template struct compact_avltree_node_traits_impl { typedef compact_avltree_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + + typedef typename pointer_traits + ::template rebind_pointer + ::type node_ptr; + typedef typename pointer_traits + ::template rebind_pointer + ::type const_node_ptr; typedef typename node::balance balance; typedef pointer_plus_bits ptr_bit; - static node_ptr get_parent(const_node_ptr n) + static node_ptr get_parent(const const_node_ptr & n) { return ptr_bit::get_pointer(n->parent_); } - static void set_parent(node_ptr n, node_ptr p) + static void set_parent(const node_ptr & n, const node_ptr & p) { ptr_bit::set_pointer(n->parent_, p); } - static node_ptr get_left(const_node_ptr n) + static const node_ptr & get_left(const const_node_ptr & n) { return n->left_; } - static void set_left(node_ptr n, node_ptr l) + static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static node_ptr get_right(const_node_ptr n) + static const node_ptr & get_right(const const_node_ptr & n) { return n->right_; } - static void set_right(node_ptr n, node_ptr r) + static void set_right(const node_ptr & n, const node_ptr & r) { n->right_ = r; } - static balance get_balance(const_node_ptr n) + static balance get_balance(const const_node_ptr & n) { return (balance)ptr_bit::get_bits(n->parent_); } - static void set_balance(node_ptr n, balance b) + static void set_balance(const node_ptr & n, balance b) { ptr_bit::set_bits(n->parent_, (std::size_t)b); } static balance negative() @@ -166,13 +172,13 @@ struct avltree_node_traits , OptimizeSize && max_pointer_plus_bits < VoidPointer - , detail::alignment_of >::value + , detail::alignment_of >::value >::value >= 2u > {}; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp b/3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp index 6765dfa05d..1b5c27fff4 100644 --- a/3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp +++ b/3party/boost/boost/intrusive/detail/clear_on_destructor_base.hpp @@ -1,6 +1,6 @@ //////} // /////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2008-2012. 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) // diff --git a/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp b/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp index c6bdb20d1f..942b35a3f4 100644 --- a/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp +++ b/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -31,7 +31,7 @@ class common_slist_algorithms typedef typename NodeTraits::const_node_ptr const_node_ptr; typedef NodeTraits node_traits; - static node_ptr get_previous_node(node_ptr prev_init_node, node_ptr this_node) + static node_ptr get_previous_node(const node_ptr & prev_init_node, const node_ptr & this_node) { node_ptr p = prev_init_node; for( node_ptr p_next @@ -44,44 +44,44 @@ class common_slist_algorithms return p; } - static void init_header(node_ptr this_node) - { NodeTraits::set_next(this_node, this_node); } + static void init_header(const node_ptr & this_node) + { NodeTraits::set_next(this_node, this_node); } - static void init(node_ptr this_node) - { NodeTraits::set_next(this_node, node_ptr(0)); } + static void init(const node_ptr & this_node) + { NodeTraits::set_next(this_node, node_ptr()); } - static bool unique(const_node_ptr this_node) + static bool unique(const const_node_ptr & this_node) { node_ptr next = NodeTraits::get_next(this_node); return !next || next == this_node; } - static bool inited(const_node_ptr this_node) + static bool inited(const const_node_ptr & this_node) { return !NodeTraits::get_next(this_node); } - static void unlink_after(node_ptr prev_node) + static void unlink_after(const node_ptr & prev_node) { - node_ptr this_node(NodeTraits::get_next(prev_node)); + const_node_ptr this_node(NodeTraits::get_next(prev_node)); NodeTraits::set_next(prev_node, NodeTraits::get_next(this_node)); } - static void unlink_after(node_ptr prev_node, node_ptr last_node) + static void unlink_after(const node_ptr & prev_node, const node_ptr & last_node) { NodeTraits::set_next(prev_node, last_node); } - static void link_after(node_ptr prev_node, node_ptr this_node) + static void link_after(const node_ptr & prev_node, const node_ptr & this_node) { NodeTraits::set_next(this_node, NodeTraits::get_next(prev_node)); NodeTraits::set_next(prev_node, this_node); } - static void incorporate_after(node_ptr bp, node_ptr b, node_ptr be) + static void incorporate_after(const node_ptr & bp, const node_ptr & b, const node_ptr & be) { node_ptr p(NodeTraits::get_next(bp)); NodeTraits::set_next(bp, b); NodeTraits::set_next(be, p); } - - static void transfer_after(node_ptr bp, node_ptr bb, node_ptr be) + + static void transfer_after(const node_ptr & bp, const node_ptr & bb, const node_ptr & be) { if (bp != bb && bp != be && bb != be) { node_ptr next_b = NodeTraits::get_next(bb); @@ -95,8 +95,8 @@ class common_slist_algorithms }; } //namespace detail -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/detail/config_begin.hpp b/3party/boost/boost/intrusive/detail/config_begin.hpp index bb126fcdf0..7d153368a5 100644 --- a/3party/boost/boost/intrusive/detail/config_begin.hpp +++ b/3party/boost/boost/intrusive/detail/config_begin.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -20,10 +20,10 @@ #pragma warning (push) // //'function' : resolved overload was found by argument-dependent lookup - //A function found by argument-dependent lookup (Koenig lookup) was eventually + //A function found by argument-dependent lookup (Koenig lookup) was eventually //chosen by overload resolution. // - //In Visual C++ .NET and earlier compilers, a different function would have + //In Visual C++ .NET and earlier compilers, a different function would have //been called. To pick the original function, use an explicitly qualified name. // diff --git a/3party/boost/boost/intrusive/detail/config_end.hpp b/3party/boost/boost/intrusive/detail/config_end.hpp index 4277cb576f..d653030daa 100644 --- a/3party/boost/boost/intrusive/detail/config_end.hpp +++ b/3party/boost/boost/intrusive/detail/config_end.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp b/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp index d4c2d1593b..850d074326 100644 --- a/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp +++ b/3party/boost/boost/intrusive/detail/ebo_functor_holder.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Joaquin M Lopez Munoz 2006-2009 +// (C) Copyright Joaquin M Lopez Munoz 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/intrusive/detail/function_detector.hpp b/3party/boost/boost/intrusive/detail/function_detector.hpp index a20db6dc90..08cee2d561 100644 --- a/3party/boost/boost/intrusive/detail/function_detector.hpp +++ b/3party/boost/boost/intrusive/detail/function_detector.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2009. +// (C) Copyright Ion Gaztanaga 2009-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -11,10 +11,11 @@ ///////////////////////////////////////////////////////////////////////////// // This code was modified from the code posted by Alexandre Courpron in his // article "Interface Detection" in The Code Project: +// http://www.codeproject.com/KB/architecture/Detector.aspx /////////////////////////////////////////////////////////////////////////////// // Copyright 2007 Alexandre Courpron // -// Permission to use, copy, modify, redistribute and sell this software, +// Permission to use, copy, modify, redistribute and sell this software, // provided that this copyright notice appears on all copies of the software. /////////////////////////////////////////////////////////////////////////////// @@ -73,7 +74,7 @@ namespace function_detector { public : \ static const int check = NotFound + (sizeof(Test(0, 0)) - sizeof(NotFoundType));\ };\ -}}} //namespace boost::intrusive::function_detector { +}}} //namespace boost::intrusive::function_detector { #define BOOST_INTRUSIVE_DETECT_FUNCTION(Class, InstantiationKey, ReturnType, Identifier, Params) \ ::boost::intrusive::function_detector::DetectMember_##InstantiationKey_##Identifier< Class,\ diff --git a/3party/boost/boost/intrusive/detail/generic_hook.hpp b/3party/boost/boost/intrusive/detail/generic_hook.hpp index ae1282eaba..5ddd52074e 100644 --- a/3party/boost/boost/intrusive/detail/generic_hook.hpp +++ b/3party/boost/boost/intrusive/detail/generic_hook.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -15,10 +15,11 @@ #include #include -#include +#include #include #include #include +#include #include namespace boost { @@ -142,28 +143,34 @@ class generic_hook typedef Tag tag; typedef typename GetNodeAlgorithms::type::node_traits node_traits; static const bool is_base_hook = !detail::is_same::value; - static const bool safemode_or_autounlink = + static const bool safemode_or_autounlink = (int)link_mode == (int)auto_unlink || (int)link_mode == (int)safe_link; }; + node_ptr this_ptr() + { return pointer_traits::pointer_to(static_cast(*this)); } + + const_node_ptr this_ptr() const + { return pointer_traits::pointer_to(static_cast(*this)); } + public: /// @endcond generic_hook() { if(boost_intrusive_tags::safemode_or_autounlink){ - node_algorithms::init(static_cast(this)); + node_algorithms::init(this->this_ptr()); } } - generic_hook(const generic_hook& ) + generic_hook(const generic_hook& ) { if(boost_intrusive_tags::safemode_or_autounlink){ - node_algorithms::init(static_cast(this)); + node_algorithms::init(this->this_ptr()); } } - generic_hook& operator=(const generic_hook& ) + generic_hook& operator=(const generic_hook& ) { return *this; } ~generic_hook() @@ -172,31 +179,30 @@ class generic_hook (*this, detail::link_dispatch()); } - void swap_nodes(generic_hook &other) + void swap_nodes(generic_hook &other) { node_algorithms::swap_nodes - ( static_cast(this), static_cast(&other)); + (this->this_ptr(), other.this_ptr()); } - bool is_linked() const + bool is_linked() const { //is_linked() can be only used in safe-mode or auto-unlink BOOST_STATIC_ASSERT(( boost_intrusive_tags::safemode_or_autounlink )); - return !node_algorithms::unique - (static_cast(this)); + return !node_algorithms::unique(this->this_ptr()); } void unlink() { BOOST_STATIC_ASSERT(( (int)boost_intrusive_tags::link_mode == (int)auto_unlink )); - node_algorithms::unlink(static_cast(this)); - node_algorithms::init(static_cast(this)); + node_algorithms::unlink(this->this_ptr()); + node_algorithms::init(this->this_ptr()); } }; } //namespace detail -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp b/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp new file mode 100644 index 0000000000..6516e28067 --- /dev/null +++ b/3party/boost/boost/intrusive/detail/has_member_function_callable_with.hpp @@ -0,0 +1,356 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/intrusive for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +// sample.h + +#if !defined(BOOST_PP_IS_ITERATING) + + #ifndef BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_DETAILS_INCLUDED + #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_DETAILS_INCLUDED + + #include + #include + #include + #include + #include + + //Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and + //wrong SFINAE for GCC 4.2/4.3 + #if defined(__GNUC__) && !defined(__clang__) && ((__GNUC__*100 + __GNUC_MINOR__*10) >= 340) && ((__GNUC__*100 + __GNUC_MINOR__*10) <= 430) + #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED + #elif defined(BOOST_INTEL) && (BOOST_INTEL < 1200 ) + #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED + #endif + + namespace boost_intrusive_has_member_function_callable_with { + + struct dont_care + { + dont_care(...); + }; + + struct private_type + { + static private_type p; + private_type const &operator,(int) const; + }; + + typedef char yes_type; // sizeof(yes_type) == 1 + struct no_type{ char dummy[2]; }; // sizeof(no_type) == 2 + + template + no_type is_private_type(T const &); + yes_type is_private_type(private_type const &); + + } //boost_intrusive_has_member_function_callable_with + + #include + + #endif //BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_DETAILS_INCLUDED + +#else //!BOOST_PP_IS_ITERATING + + #ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME + #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME not defined!" + #endif + + #ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN + #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN not defined!" + #endif + + #ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END + #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END not defined!" + #endif + + #if BOOST_PP_ITERATION_START() != 0 + #error "BOOST_PP_ITERATION_START() must be zero (0)" + #endif + + #if BOOST_PP_ITERATION() == 0 + + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN + + template + class BOOST_PP_CAT(has_member_function_named_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + { + struct BaseMixin + { + void BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(); + }; + + struct Base : public Type, public BaseMixin { Base(); }; + template class Helper{}; + + template + static boost_intrusive_has_member_function_callable_with::no_type deduce + (U*, Helper* = 0); + static boost_intrusive_has_member_function_callable_with::yes_type deduce(...); + + public: + static const bool value = + sizeof(boost_intrusive_has_member_function_callable_with::yes_type) == sizeof(deduce((Base*)(0))); + }; + + #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl); + //! + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl) + + { + static const bool value = false; + }; + //! + + #if !defined(_MSC_VER) || (_MSC_VER < 1600) + + #if defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED) + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + + { + //Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and + //wrong SFINAE for GCC 4.2/4.3 + static const bool value = true; + }; + + #else //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED) + + //Special case for 0 args + template< class F + , std::size_t N = + sizeof((boost::move_detail::declval(). + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))> + struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + { + boost_intrusive_has_member_function_callable_with::yes_type dummy; + BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); + }; + + //For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not + //SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0. + template + struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + { + boost_intrusive_has_member_function_callable_with::no_type dummy; + BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); + }; + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + + { + template + static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)*); + + template + static boost_intrusive_has_member_function_callable_with::no_type Test(...); + + static const bool value = sizeof(Test< Fun >(0)) + == sizeof(boost_intrusive_has_member_function_callable_with::yes_type); + }; + #endif //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED) + + #else //#if !defined(_MSC_VER) || (_MSC_VER < 1600) + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + + { + template + static decltype( boost::move_detail::declval().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME() + , boost_intrusive_has_member_function_callable_with::yes_type()) + Test(Fun*); + + template + static boost_intrusive_has_member_function_callable_with::no_type Test(...); + + static const bool value = sizeof(Test(0)) + == sizeof(boost_intrusive_has_member_function_callable_with::yes_type); + }; + #endif //#if !defined(_MSC_VER) || (_MSC_VER < 1600) + + #else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl); + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + + { + static const bool value = false; + }; + + //Special case for 0 args + template< class F + , std::size_t N = + sizeof((boost::move_detail::declval(). + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))> + struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + { + boost_intrusive_has_member_function_callable_with::yes_type dummy; + BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); + }; + + //For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not + //SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0. + template + struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + { + boost_intrusive_has_member_function_callable_with::no_type dummy; + BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int); + }; + + template + struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + + { + template + static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)*); + + template + static boost_intrusive_has_member_function_callable_with::no_type Test(...); + + static const bool value = sizeof(Test< Fun >(0)) + == sizeof(boost_intrusive_has_member_function_callable_with::yes_type); + }; + + template + struct BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ) + : Fun + { + BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )(); + using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME; + + boost_intrusive_has_member_function_callable_with::private_type + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME + ( DontCares...) const; + }; + + template + struct BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl) + + { + template + struct make_dontcare + { + typedef boost_intrusive_has_member_function_callable_with::dont_care type; + }; + + typedef BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME ) + ::type...> FunWrap; + + static bool const value = (sizeof(boost_intrusive_has_member_function_callable_with::no_type) == + sizeof(boost_intrusive_has_member_function_callable_with::is_private_type + ( (::boost::move_detail::declval< FunWrap >(). + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME + ( ::boost::move_detail::declval()... ), 0) ) + ) + ); + }; + + template + struct BOOST_PP_CAT( has_member_function_callable_with_ + , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + : public BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_ + , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + < Fun + , BOOST_PP_CAT( has_member_function_named_ + , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )::value + , Args... > + {}; + + #endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END + + #else //BOOST_PP_ITERATION() == 0 + + #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN + + template + struct BOOST_PP_CAT( BOOST_PP_CAT(funwrap, BOOST_PP_ITERATION()) + , BOOST_PP_CAT(_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)) + : Fun + { + BOOST_PP_CAT( BOOST_PP_CAT(funwrap, BOOST_PP_ITERATION()) + , BOOST_PP_CAT(_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME))(); + + using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME; + boost_intrusive_has_member_function_callable_with::private_type + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME + ( BOOST_PP_ENUM(BOOST_PP_ITERATION() + , BOOST_INTRUSIVE_PP_IDENTITY + , boost_intrusive_has_member_function_callable_with::dont_care)) const; + }; + + template + struct BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_ + , BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl) + + { + typedef BOOST_PP_CAT( BOOST_PP_CAT(funwrap, BOOST_PP_ITERATION()) + , BOOST_PP_CAT(_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)) + FunWrap; + static bool const value = + (sizeof(boost_intrusive_has_member_function_callable_with::no_type) == + sizeof(boost_intrusive_has_member_function_callable_with::is_private_type + ( (boost::move_detail::declval(). + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME + ( BOOST_PP_ENUM( BOOST_PP_ITERATION(), BOOST_INTRUSIVE_PP_DECLVAL, _) ), 0 + ) + ) + ) + ); + }; + + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END + #endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + #endif //BOOST_PP_ITERATION() == 0 + + #if BOOST_PP_ITERATION() == BOOST_PP_ITERATION_FINISH() + + #if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN + + template + struct BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME) + : public BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl) + ::value + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION_FINISH(), P) > + {}; + + BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END + + #endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING) + + #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME + #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN + #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END + + #endif //#if BOOST_PP_ITERATION() == BOOST_PP_ITERATION_FINISH() + +#endif //!BOOST_PP_IS_ITERATING diff --git a/3party/boost/boost/intrusive/detail/hashtable_node.hpp b/3party/boost/boost/intrusive/detail/hashtable_node.hpp index 72188b9ec5..86e607460c 100644 --- a/3party/boost/boost/intrusive/detail/hashtable_node.hpp +++ b/3party/boost/boost/intrusive/detail/hashtable_node.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2009 +// (C) Copyright Ion Gaztanaga 2007-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -16,13 +16,17 @@ #include #include #include -#include +#include #include #include #include -#include //remove-me +//#include //remove-me +#include #include #include +#include + + namespace boost { namespace intrusive { namespace detail { @@ -36,7 +40,7 @@ struct prime_list_holder template const std::size_t prime_list_holder::prime_list[] = { - 3ul, 7ul, 11ul, 17ul, 29ul, + 3ul, 7ul, 11ul, 17ul, 29ul, 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, 393241ul, 786433ul, @@ -76,9 +80,15 @@ struct bucket_impl : public Slist template struct bucket_traits_impl { + private: + BOOST_COPYABLE_AND_MOVABLE(bucket_traits_impl) + + public: /// @cond - typedef typename boost::pointer_to_other - < typename Slist::pointer, bucket_impl >::type bucket_ptr; + + typedef typename pointer_traits + ::template rebind_pointer + < bucket_impl >::type bucket_ptr; typedef typename Slist::size_type size_type; /// @endcond @@ -86,7 +96,27 @@ struct bucket_traits_impl : buckets_(buckets), buckets_len_(len) {} - bucket_ptr bucket_begin() const + bucket_traits_impl(const bucket_traits_impl &x) + : buckets_(x.buckets_), buckets_len_(x.buckets_len_) + {} + + + bucket_traits_impl(BOOST_RV_REF(bucket_traits_impl) x) + : buckets_(x.buckets_), buckets_len_(x.buckets_len_) + { x.buckets_ = bucket_ptr(); x.buckets_len_ = 0; } + + bucket_traits_impl& operator=(BOOST_RV_REF(bucket_traits_impl) x) + { + buckets_ = x.buckets_; buckets_len_ = x.buckets_len_; + x.buckets_ = bucket_ptr(); x.buckets_len_ = 0; return *this; + } + + bucket_traits_impl& operator=(BOOST_COPY_ASSIGN_REF(bucket_traits_impl) x) + { + buckets_ = x.buckets_; buckets_len_ = x.buckets_len_; return *this; + } + + const bucket_ptr &bucket_begin() const { return buckets_; } size_type bucket_count() const @@ -102,7 +132,7 @@ class hashtable_iterator : public std::iterator < std::forward_iterator_tag , typename Container::value_type - , typename std::iterator_traits::difference_type + , typename pointer_traits::difference_type , typename detail::add_const_if_c ::type * , typename detail::add_const_if_c @@ -113,16 +143,16 @@ class hashtable_iterator typedef typename Container::siterator siterator; typedef typename Container::const_siterator const_siterator; typedef typename Container::bucket_type bucket_type; - typedef typename boost::pointer_to_other - < typename Container::pointer, const Container>::type const_cont_ptr; + + typedef typename pointer_traits + ::template rebind_pointer + < const Container >::type const_cont_ptr; typedef typename Container::size_type size_type; static typename Container::node_ptr downcast_bucket(typename bucket_type::node_ptr p) { -// This still fails in gcc < 4.4 so forget about it -// using ::boost::static_pointer_cast; -// return static_pointer_cast(p); - return typename Container::node_ptr(&static_cast(*p)); + return pointer_traits:: + pointer_to(static_cast(*p)); } public: @@ -136,7 +166,7 @@ class hashtable_iterator {} explicit hashtable_iterator(siterator ptr, const Container *cont) - : slist_it_ (ptr), cont_ (cont) + : slist_it_ (ptr), cont_ (cont ? pointer_traits::pointer_to(*cont) : const_cont_ptr() ) {} hashtable_iterator(const hashtable_iterator &other) @@ -150,9 +180,9 @@ class hashtable_iterator { return hashtable_iterator(this->slist_it(), this->get_container()); } public: - hashtable_iterator& operator++() + hashtable_iterator& operator++() { this->increment(); return *this; } - + hashtable_iterator operator++(int) { hashtable_iterator result (*this); @@ -170,10 +200,13 @@ class hashtable_iterator { return *this->operator ->(); } pointer operator->() const - { return detail::boost_intrusive_get_pointer(this->get_real_value_traits()->to_value_ptr(downcast_bucket(slist_it_.pointed_node()))); } + { + return boost::intrusive::detail::to_raw_pointer(this->get_real_value_traits()->to_value_ptr + (downcast_bucket(slist_it_.pointed_node()))); + } - const Container *get_container() const - { return detail::boost_intrusive_get_pointer(cont_); } + const const_cont_ptr &get_container() const + { return cont_; } const real_value_traits *get_real_value_traits() const { return &this->get_container()->get_real_value_traits(); } @@ -181,12 +214,12 @@ class hashtable_iterator private: void increment() { - const Container *cont = detail::boost_intrusive_get_pointer(cont_); - bucket_type* buckets = detail::boost_intrusive_get_pointer(cont->bucket_pointer()); + const Container *cont = boost::intrusive::detail::to_raw_pointer(cont_); + bucket_type* buckets = boost::intrusive::detail::to_raw_pointer(cont->bucket_pointer()); size_type buckets_len = cont->bucket_count(); ++slist_it_; - if(buckets[0].cend().pointed_node() <= slist_it_.pointed_node() && + if(buckets[0].cend().pointed_node() <= slist_it_.pointed_node() && slist_it_.pointed_node()<= buckets[buckets_len].cend().pointed_node() ){ //Now get the bucket_impl from the iterator const bucket_type &b = static_cast diff --git a/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp b/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp index e38f4de459..8677c666d4 100644 --- a/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp +++ b/3party/boost/boost/intrusive/detail/is_stateful_value_traits.hpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2009. +// (C) Copyright Ion Gaztanaga 2009-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/intrusive/detail/list_node.hpp b/3party/boost/boost/intrusive/detail/list_node.hpp index e5df1503c9..d406af60e4 100644 --- a/3party/boost/boost/intrusive/detail/list_node.hpp +++ b/3party/boost/boost/intrusive/detail/list_node.hpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Olaf Krzikalla 2004-2006. -// (C) Copyright Ion Gaztanaga 2006-2009 +// (C) Copyright Ion Gaztanaga 2006-2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -17,7 +17,7 @@ #include #include #include -#include +#include namespace boost { namespace intrusive { @@ -29,8 +29,8 @@ namespace intrusive { template struct list_node { - typedef typename boost::pointer_to_other - ::type node_ptr; + typedef typename pointer_traits + :: template rebind_pointer::type node_ptr; node_ptr next_; node_ptr prev_; }; @@ -39,25 +39,25 @@ template struct list_node_traits { typedef list_node node; - typedef typename boost::pointer_to_other - ::type node_ptr; - typedef typename boost::pointer_to_other - ::type const_node_ptr; + typedef typename pointer_traits + :: template rebind_pointer::type node_ptr; + typedef typename pointer_traits + :: template rebind_pointer::type const_node_ptr; - static node_ptr get_previous(const_node_ptr n) + static const node_ptr &get_previous(const const_node_ptr & n) { return n->prev_; } - static void set_previous(node_ptr n, node_ptr prev) + static void set_previous(const node_ptr & n, const node_ptr & prev) { n->prev_ = prev; } - static node_ptr get_next(const_node_ptr n) + static const node_ptr &get_next(const const_node_ptr & n) { return n->next_; } - static void set_next(node_ptr n, node_ptr next) + static void set_next(const node_ptr & n, const node_ptr & next) { n->next_ = next; } }; -// list_iterator provides some basic functions for a +// list_iterator provides some basic functions for a // node oriented bidirectional iterator: template class list_iterator @@ -74,9 +74,9 @@ class list_iterator typedef typename real_value_traits::node_traits node_traits; typedef typename node_traits::node node; typedef typename node_traits::node_ptr node_ptr; - typedef typename boost::pointer_to_other - ::type void_pointer; - static const bool store_container_ptr = + typedef typename pointer_traits:: + template rebind_pointer::type void_pointer; + static const bool store_container_ptr = detail::store_cont_ptr_on_it::value; public: @@ -85,10 +85,10 @@ class list_iterator typedef typename detail::if_c::type reference; list_iterator() - : members_ (node_ptr(0), 0) + : members_ (node_ptr(), 0) {} - explicit list_iterator(node_ptr node, const Container *cont_ptr) + explicit list_iterator(const node_ptr & node, const Container *cont_ptr) : members_ (node, cont_ptr) {} @@ -103,12 +103,14 @@ class list_iterator { members_.nodeptr_ = node; return static_cast(*this); } public: - list_iterator& operator++() - { - members_.nodeptr_ = node_traits::get_next(members_.nodeptr_); - return static_cast (*this); + list_iterator& operator++() + { + node_ptr p = node_traits::get_next(members_.nodeptr_); + members_.nodeptr_ = p; + //members_.nodeptr_ = node_traits::get_next(members_.nodeptr_); + return static_cast (*this); } - + list_iterator operator++(int) { list_iterator result (*this); @@ -116,12 +118,12 @@ class list_iterator return result; } - list_iterator& operator--() - { - members_.nodeptr_ = node_traits::get_previous(members_.nodeptr_); - return static_cast (*this); + list_iterator& operator--() + { + members_.nodeptr_ = node_traits::get_previous(members_.nodeptr_); + return static_cast (*this); } - + list_iterator operator--(int) { list_iterator result (*this); @@ -139,7 +141,7 @@ class list_iterator { return *operator->(); } pointer operator->() const - { return detail::boost_intrusive_get_pointer(this->get_real_value_traits()->to_value_ptr(members_.nodeptr_)); } + { return this->get_real_value_traits()->to_value_ptr(members_.nodeptr_); } const Container *get_container() const { @@ -180,8 +182,8 @@ class list_iterator } members_; }; -} //namespace intrusive -} //namespace boost +} //namespace intrusive +} //namespace boost #include diff --git a/3party/boost/boost/intrusive/detail/memory_util.hpp b/3party/boost/boost/intrusive/detail/memory_util.hpp new file mode 100644 index 0000000000..1a6431b078 --- /dev/null +++ b/3party/boost/boost/intrusive/detail/memory_util.hpp @@ -0,0 +1,288 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Pablo Halpern 2009. 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) +// +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2011-2012. 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) +// +// See http://www.boost.org/libs/intrusive for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTRUSIVE_ALLOCATOR_MEMORY_UTIL_HPP +#define BOOST_INTRUSIVE_ALLOCATOR_MEMORY_UTIL_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include + +namespace boost { +namespace intrusive { +namespace detail { + +template +inline T* addressof(T& obj) +{ + return static_cast + (static_cast + (const_cast + (&reinterpret_cast(obj)) + ) + ); +} + +template struct unvoid { typedef T type; }; +template <> struct unvoid { struct type { }; }; +template <> struct unvoid { struct type { }; }; + +template +struct LowPriorityConversion +{ + // Convertible from T with user-defined-conversion rank. + LowPriorityConversion(const T&) { } +}; + +// Infrastructure for providing a default type for T::TNAME if absent. +#define BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(TNAME) \ + template \ + struct boost_intrusive_default_type_ ## TNAME \ + { \ + template \ + static char test(int, typename X::TNAME*); \ + \ + template \ + static int test(boost::intrusive::detail:: \ + LowPriorityConversion, void*); \ + \ + struct DefaultWrap { typedef DefaultType TNAME; }; \ + \ + static const bool value = (1 == sizeof(test(0, 0))); \ + \ + typedef typename \ + ::boost::intrusive::detail::if_c \ + ::type::TNAME type; \ + }; \ + \ + template \ + struct boost_intrusive_eval_default_type_ ## TNAME \ + { \ + template \ + static char test(int, typename X::TNAME*); \ + \ + template \ + static int test(boost::intrusive::detail:: \ + LowPriorityConversion, void*); \ + \ + struct DefaultWrap \ + { typedef typename DefaultType::type TNAME; }; \ + \ + static const bool value = (1 == sizeof(test(0, 0))); \ + \ + typedef typename \ + ::boost::intrusive::detail::eval_if_c \ + < value \ + , ::boost::intrusive::detail::identity \ + , ::boost::intrusive::detail::identity \ + >::type::TNAME type; \ + }; \ +// + +#define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL) \ + typename INSTANTIATION_NS_PREFIX \ + boost_intrusive_default_type_ ## TNAME< T, TIMPL >::type \ +// + +#define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL) \ + typename INSTANTIATION_NS_PREFIX \ + boost_intrusive_eval_default_type_ ## TNAME< T, TIMPL >::type \ +// + +}}} //namespace boost::intrusive::detail + +#include + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME pointer_to +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME static_cast_from +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME const_cast_from +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) +#include BOOST_PP_ITERATE() + +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME dynamic_cast_from +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} +#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, )) +#include BOOST_PP_ITERATE() + +namespace boost { +namespace intrusive { +namespace detail { + +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(element_type) +BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type) + +////////////////////// +//struct first_param +////////////////////// + +template struct first_param +{ typedef void type; }; + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + template